diff --git a/yaksh/templates/yaksh/view_notifications.html b/yaksh/templates/yaksh/view_notifications.html
index 72f90f8..48193ed 100644
--- a/yaksh/templates/yaksh/view_notifications.html
+++ b/yaksh/templates/yaksh/view_notifications.html
@@ -39,7 +39,9 @@
-
From: {{message.creator.get_full_name}}
+ {% if user.id != message.creator.id %}
+
From: {{message.creator.get_full_name}}
+ {% endif %}
Description:
{{message.description|safe}}
diff --git a/yaksh/test_views.py b/yaksh/test_views.py
index 8f811c5..b137435 100644
--- a/yaksh/test_views.py
+++ b/yaksh/test_views.py
@@ -32,6 +32,8 @@ from yaksh.models import (
from yaksh.views import add_as_moderator
from yaksh.decorators import user_has_profile
+from notifications_plugin.models import Notification
+
class TestUserRegistration(TestCase):
def setUp(self):
@@ -575,9 +577,9 @@ class TestMonitor(TestCase):
)
self.assertEqual(response.status_code, 404)
- def test_monitor_display_quizzes(self):
+ def test_monitor_quiz_not_found(self):
"""
- Check all the available quizzes in monitor
+ Check if quiz is not found
"""
self.client.login(
username=self.user.username,
@@ -586,10 +588,7 @@ class TestMonitor(TestCase):
response = self.client.get(reverse('yaksh:monitor'),
follow=True
)
- self.assertEqual(response.status_code, 200)
- self.assertTemplateUsed(response, "yaksh/monitor.html")
- self.assertEqual(response.context['objects'][0], self.course)
- self.assertEqual(response.context['msg'], "Monitor")
+ self.assertEqual(response.status_code, 404)
def test_monitor_display_quiz_results(self):
"""
@@ -3687,41 +3686,20 @@ class TestGrader(TestCase):
AnswerPaper.objects.all().delete()
self.mod_group.delete()
- def test_grader_denies_anonymous(self):
- # Given
- redirect_destination = ('/exam/login/?next=/exam/manage/grader/')
-
- # When
- response = self.client.get(reverse('yaksh:grader'), follow=True)
-
- # Then
- self.assertRedirects(response, redirect_destination)
-
- def test_grader_denies_students(self):
- # Given
- self.client.login(
- username=self.student.username,
- password=self.student_plaintext_pass
- )
-
- # When
- response = self.client.get(reverse('yaksh:grader'), follow=True)
-
- # Then
- self.assertEqual(response.status_code, 404)
-
def test_regrade_denies_anonymous(self):
# Given
- url = "/exam/login/?next=/exam/manage/regrade/answerpaper"
+ url = "/exam/login/?next=/exam/manage/regrade/user/question"
redirect_destination = (
- url + "/{}/{}/{}/".format(
- self.course.id, self.question.id, self.answerpaper.id)
+ url + "/{}/{}/{}/{}/".format(
+ self.course.id, self.question_paper.id,
+ self.answerpaper.id, self.question.id)
)
# When
response = self.client.get(
- reverse('yaksh:regrade',
+ reverse('yaksh:regrade_by_question',
kwargs={'course_id': self.course.id,
+ 'questionpaper_id': self.question_paper.id,
'question_id': self.question.id,
'answerpaper_id': self.answerpaper.id}),
follow=True
@@ -3739,8 +3717,9 @@ class TestGrader(TestCase):
# When
response = self.client.get(
- reverse('yaksh:regrade',
+ reverse('yaksh:regrade_by_question',
kwargs={'course_id': self.course.id,
+ 'questionpaper_id': self.question_paper.id,
'question_id': self.question.id,
'answerpaper_id': self.answerpaper.id}),
follow=True
@@ -3749,21 +3728,6 @@ class TestGrader(TestCase):
# Then
self.assertEqual(response.status_code, 404)
- def test_grader_by_moderator(self):
- # Given
- self.client.login(
- username=self.user1.username,
- password=self.user1_plaintext_pass
- )
-
- # When
- response = self.client.get(reverse('yaksh:grader'), follow=True)
-
- # Then
- self.assertEqual(response.status_code, 200)
- self.assertTrue('courses' in response.context)
- self.assertTemplateUsed(response, 'yaksh/regrade.html')
-
def test_regrade_by_moderator(self):
# Given
self.client.login(
@@ -3773,44 +3737,43 @@ class TestGrader(TestCase):
# When
response = self.client.get(
- reverse('yaksh:regrade',
+ reverse('yaksh:regrade_by_question',
kwargs={'course_id': self.course.id,
+ 'questionpaper_id': self.question_paper.id,
'question_id': self.question.id,
'answerpaper_id': self.answerpaper.id}),
follow=True)
# Then
+ messages = [m.message for m in get_messages(response.wsgi_request)]
self.assertEqual(response.status_code, 200)
- self.assertTrue('courses' in response.context)
- self.assertTrue('details' in response.context)
- self.assertTemplateUsed(response, 'yaksh/regrade.html')
+ self.assertIn("demo quiz is submitted for re-evaluation", messages[0])
# When
response = self.client.get(
- reverse('yaksh:regrade',
+ reverse('yaksh:regrade_by_user',
kwargs={'course_id': self.course.id,
+ 'questionpaper_id': self.question_paper.id,
'answerpaper_id': self.answerpaper.id}),
follow=True)
# Then
+ messages = [m.message for m in get_messages(response.wsgi_request)]
self.assertEqual(response.status_code, 200)
- self.assertTrue('courses' in response.context)
- self.assertTrue('details' in response.context)
- self.assertTemplateUsed(response, 'yaksh/regrade.html')
+ self.assertIn("demo quiz is submitted for re-evaluation", messages[0])
# When
response = self.client.get(
- reverse('yaksh:regrade',
+ reverse('yaksh:regrade_by_quiz',
kwargs={'course_id': self.course.id,
'question_id': self.question.id,
'questionpaper_id': self.question_paper.id}),
follow=True)
# Then
+ messages = [m.message for m in get_messages(response.wsgi_request)]
self.assertEqual(response.status_code, 200)
- self.assertTrue('courses' in response.context)
- self.assertTrue('details' in response.context)
- self.assertTemplateUsed(response, 'yaksh/regrade.html')
+ self.assertIn("demo quiz is submitted for re-evaluation", messages[0])
def test_regrade_denies_moderator_not_in_course(self):
# Given
@@ -3822,8 +3785,9 @@ class TestGrader(TestCase):
self.mod_group.user_set.remove(self.user2)
# When
response = self.client.get(
- reverse('yaksh:regrade',
+ reverse('yaksh:regrade_by_question',
kwargs={'course_id': self.course.id,
+ 'questionpaper_id': self.question_paper.id,
'question_id': self.question.id,
'answerpaper_id': self.answerpaper.id}),
follow=True)
--
cgit
From dde62c0da11af928ac1c5ff078c52db739aa090b Mon Sep 17 00:00:00 2001
From: adityacp
Date: Mon, 20 Apr 2020 17:40:54 +0530
Subject: Change celery.py, settings.py, requirements-common.txt test_views.py
- Add ping task in celery.py
- Add celery result backend in settings.py
- Add celery related packages in common requirements
- Add celery worker in regrade test class to run the worker with the test
---
online_test/celery.py | 6 ++++++
online_test/settings.py | 2 ++
requirements/requirements-common.txt | 5 +++++
yaksh/test_views.py | 17 +++++++++++++++--
4 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/online_test/celery.py b/online_test/celery.py
index 582f8a1..ac6e395 100644
--- a/online_test/celery.py
+++ b/online_test/celery.py
@@ -17,3 +17,9 @@ app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
+
+@app.task(name='celery.ping')
+def ping():
+ # type: () -> str
+ """Simple task that just returns 'pong'."""
+ return 'pong'
\ No newline at end of file
diff --git a/online_test/settings.py b/online_test/settings.py
index aa373c4..ad52804 100644
--- a/online_test/settings.py
+++ b/online_test/settings.py
@@ -46,6 +46,7 @@ INSTALLED_APPS = (
'social_django',
'grades',
'django_celery_beat',
+ 'django_celery_results',
'notifications_plugin',
)
@@ -220,3 +221,4 @@ CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TIMEZONE = 'Asia/Kolkata'
CELERY_BROKER_URL = 'redis://localhost'
+CELERY_RESULT_BACKEND = 'django-db'
diff --git a/requirements/requirements-common.txt b/requirements/requirements-common.txt
index d1fed93..de9fe96 100644
--- a/requirements/requirements-common.txt
+++ b/requirements/requirements-common.txt
@@ -10,3 +10,8 @@ coverage
ruamel.yaml==0.15.23
markdown==2.6.9
pygments==2.2.0
+celery==4.4.2
+redis==3.4.1
+notifications-plugin==0.1.1
+django-celery-beat==2.0.0
+django-celery-results==1.2.1
diff --git a/yaksh/test_views.py b/yaksh/test_views.py
index b137435..131aeb9 100644
--- a/yaksh/test_views.py
+++ b/yaksh/test_views.py
@@ -2,6 +2,7 @@ from datetime import datetime
import pytz
import os
import json
+import time
try:
from StringIO import StringIO as string_io
except ImportError:
@@ -21,6 +22,8 @@ from django.conf import settings
from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.files import File
from django.contrib.messages import get_messages
+from celery.contrib.testing.worker import start_worker
+from django.test import SimpleTestCase
from yaksh.models import (
@@ -31,6 +34,7 @@ from yaksh.models import (
)
from yaksh.views import add_as_moderator
from yaksh.decorators import user_has_profile
+from online_test.celery import app
from notifications_plugin.models import Notification
@@ -3593,11 +3597,13 @@ class TestSelfEnroll(TestCase):
self.assertRedirects(response, '/exam/manage/')
-class TestGrader(TestCase):
+class TestGrader(SimpleTestCase):
+ allow_database_queries = True
+
def setUp(self):
self.client = Client()
- self.mod_group = Group.objects.create(name='moderator')
+ self.mod_group, created = Group.objects.get_or_create(name='moderator')
# Create Moderator with profile
self.user1_plaintext_pass = 'demo1'
@@ -3677,6 +3683,9 @@ class TestGrader(TestCase):
end_time=timezone.now()+timezone.timedelta(minutes=20),
)
+ self.celery_worker = start_worker(app)
+ self.celery_worker.__enter__()
+
def tearDown(self):
User.objects.all().delete()
Course.objects.all().delete()
@@ -3685,6 +3694,7 @@ class TestGrader(TestCase):
QuestionPaper.objects.all().delete()
AnswerPaper.objects.all().delete()
self.mod_group.delete()
+ self.celery_worker.__exit__(None, None, None)
def test_regrade_denies_anonymous(self):
# Given
@@ -3774,6 +3784,9 @@ class TestGrader(TestCase):
messages = [m.message for m in get_messages(response.wsgi_request)]
self.assertEqual(response.status_code, 200)
self.assertIn("demo quiz is submitted for re-evaluation", messages[0])
+ self.assertEqual(Notification.objects.get_receiver_notifications(
+ self.user1.id
+ ).count(), 3)
def test_regrade_denies_moderator_not_in_course(self):
# Given
--
cgit
From 52533db57fa0145d2a76e41bd24f2580218078b9 Mon Sep 17 00:00:00 2001
From: adityacp
Date: Mon, 20 Apr 2020 17:53:57 +0530
Subject: Add redis-server in the travis for celery
---
.travis.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.travis.yml b/.travis.yml
index 892898e..6e58e1a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,6 +5,7 @@ python:
services:
- xvfb
+ - redis-server
before_install:
- sudo apt-get update -qq
--
cgit
From d482c57974033f97515f510df059327555397ef8 Mon Sep 17 00:00:00 2001
From: adityacp
Date: Mon, 20 Apr 2020 18:08:17 +0530
Subject: Add absoulute path in init.py
---
online_test/__init__.py | 2 +-
online_test/celery.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/online_test/__init__.py b/online_test/__init__.py
index 07d5e33..1506ef2 100644
--- a/online_test/__init__.py
+++ b/online_test/__init__.py
@@ -1,6 +1,6 @@
from __future__ import absolute_import, unicode_literals
-from .celery import app as celery_app
+from online_test.celery import app as celery_app
__all__ = ('celery_app',)
diff --git a/online_test/celery.py b/online_test/celery.py
index ac6e395..6868b89 100644
--- a/online_test/celery.py
+++ b/online_test/celery.py
@@ -22,4 +22,4 @@ app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
def ping():
# type: () -> str
"""Simple task that just returns 'pong'."""
- return 'pong'
\ No newline at end of file
+ return 'pong'
--
cgit
From a8c881326894ee9cfd008eb971f3079d62bee6d6 Mon Sep 17 00:00:00 2001
From: adityacp
Date: Tue, 21 Apr 2020 12:46:41 +0530
Subject: Update notifications-plugin package and travis command
---
.travis.yml | 1 +
requirements/requirements-common.txt | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/.travis.yml b/.travis.yml
index 6e58e1a..e6fd3a4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -20,6 +20,7 @@ install:
- python setup.py develop
before_script:
+ - python manage.py makemigrations notifications_plugin
- python manage.py migrate auth
- python manage.py migrate
diff --git a/requirements/requirements-common.txt b/requirements/requirements-common.txt
index de9fe96..5e6680c 100644
--- a/requirements/requirements-common.txt
+++ b/requirements/requirements-common.txt
@@ -12,6 +12,6 @@ markdown==2.6.9
pygments==2.2.0
celery==4.4.2
redis==3.4.1
-notifications-plugin==0.1.1
+notifications-plugin==0.1.2
django-celery-beat==2.0.0
django-celery-results==1.2.1
--
cgit