Commit 8238dbcf4e4e5035f131781f08684414b132968a

Authored by Matheus Lins
2 parents bb5303db d4a07c6f

Merge branch 'dev' of https://github.com/amadeusproject/amadeuslms into dev

amadeus/settings.py
... ... @@ -56,7 +56,6 @@ INSTALLED_APPS = [
56 56 'forum',
57 57 'poll',
58 58 'links',
59   - 'exam',
60 59 'files',
61 60  
62 61 ]
... ...
core/templates/registration/passwor_reset_complete.html
... ... @@ -22,9 +22,7 @@
22 22 <form class="form-group " method="post" action="">
23 23 {% csrf_token %}
24 24 <div class="form-group is-empty">
25   - <p>
26   - Sua senha foi definida. Você pode ir em frente e entrar agora.
27   - </p>
  25 + <p>{% trans "Your password has been set. You can go ahead and go now." %}</p>
28 26 </div>
29 27 </form>
30 28 </div>
... ...
core/templates/registration/passwor_reset_done.html
... ... @@ -22,14 +22,8 @@
22 22 <form class="form-group " method="post" action="">
23 23 {% csrf_token %}
24 24 <div class="form-group is-empty">
25   - <p>
26   - Temos enviado instruções para configurar sua senha, se uma conta existe com o e-mail inserido.
27   - Você deve recebê-los em breve.
28   - </p>
29   - <p>
30   - Se você não receber um e-mail, por favor, certifique-se de que introduziu o endereço que você registrou,
31   - e verifique a pasta de spam.
32   - </p>
  25 + <p>{% trans "We have sent instructions to set up your password, if an account exists with the email entered. You should receive them soon." %}</p>
  26 + <p>{% trans "If you do not receive an email, please make sure you entered the address you registered, and check the spam folder." %}</p>
33 27 </div>
34 28 </form>
35 29 </div>
... ...
courses/urls.py
... ... @@ -27,7 +27,7 @@ urlpatterns = [
27 27 url(r'^subjects/categories$',views.IndexSubjectCategoryView.as_view(), name='subject_category_index'),
28 28 url(r'^forum/', include('forum.urls', namespace = 'forum')),
29 29 url(r'^poll/', include('poll.urls', namespace = 'poll')),
30   - url(r'^exam/', include('exam.urls', namespace = 'exam')),
  30 + # url(r'^exam/', include('exam.urls', namespace = 'exam')),
31 31 url(r'^files/', include('files.urls', namespace = 'file')),
32 32 url(r'^upload-material/$', views.UploadMaterialView.as_view(), name='upload_material'),
33 33 url(r'^links/',include('links.urls',namespace = 'links')),
... ...
exam/admin.py
1 1 from django.contrib import admin
2 2  
3   -from .models import Exam, Answer
  3 +from .models import Exam, Answer, AnswersStudent
4 4  
5 5 class ExamAdmin(admin.ModelAdmin):
6 6 list_display = ['name', 'slug','begin_date','limit_date']
... ... @@ -10,5 +10,10 @@ class AnswerAdmin(admin.ModelAdmin):
10 10 list_display = ['answer','order']
11 11 search_fields = ['answer']
12 12  
  13 +class AnswersStudentAdmin(admin.ModelAdmin):
  14 + list_display = ['student','exam','answered_in']
  15 + search_fields = ['student','exam']
  16 +
13 17 admin.site.register(Exam, ExamAdmin)
14 18 admin.site.register(Answer, AnswerAdmin)
  19 +admin.site.register(AnswersStudent, AnswersStudentAdmin)
... ...
exam/forms.py
1   -from django.utils.translation import ugettext_lazy as _
2 1 from django import forms
  2 +from django.utils.translation import ugettext_lazy as _
  3 +from users.models import User
3 4 from .models import Exam
4 5  
5 6 class ExamForm(forms.ModelForm):
6   - def clean_end_date(self):
7   - begin_date = self.data['begin_date']
8   - limit_date = self.data['limit_date']
9 7  
10   - if begin_date and limit_date and limit_date < begin_date:
11   - raise forms.ValidationError(_('The end date may not be before the start date.'))
12   - return endDate
  8 + def __init__(self, *args, **kwargs):
  9 + super(ExamForm, self).__init__(*args, **kwargs)
  10 + self.fields["all_students"].required = False
  11 + self.fields["all_students"].initial = False
  12 + self.fields["students"].required = False
  13 +
  14 + def clean_all_students(self):
  15 + if('all_students' not in self.data):
  16 + if('students' in self.data):
  17 + return False
  18 + raise forms.ValidationError(_('It is required one these fields.'))
  19 + else:
  20 + all_students = self.data['all_students']
  21 + if(not all_students):
  22 + raise forms.ValidationError(_('It is required one these fields.'))
  23 + return True
13 24  
14 25  
15   - class Meta:
16   - model = Exam
17   - fields = ['name','begin_date','limit_date']
  26 + class Meta:
  27 + model = Exam
  28 + fields = ['name','begin_date','limit_date','students','all_students']
18 29  
19   - widgets = {
20   - 'name': forms.TextInput(attrs={'placeholder': 'Exam?'}),
21   - 'begin_date': forms.DateTimeInput(attrs={'placeholder': _('Start date to resolve the exam')}),
22   - 'limit_date': forms.DateTimeInput(attrs={'placeholder': _('Finish date permited to resolve the exam')}),
23   - }
  30 + widgets = {
  31 + 'name': forms.TextInput(attrs={'placeholder': 'Exam?'}),
  32 + 'begin_date': forms.DateTimeInput(
  33 + attrs={'placeholder': _('Start date to resolve the exam')}),
  34 + 'limit_date': forms.DateTimeInput(
  35 + attrs={'placeholder': _('Maximum date permited to resolve the exam')}),
  36 + 'student': forms.Select(),
  37 + }
... ...
exam/models.py
... ... @@ -27,4 +27,18 @@ class Answer(models.Model):
27 27 verbose_name_plural = _('Answers')
28 28  
29 29 def __str__(self):
30   - return str(self.answer) + str("/") + str(self.poll)
  30 + return str(self.answer) + str("/") + str(self.exam)
  31 +
  32 +class AnswersStudent(models.Model):
  33 + status = models.BooleanField(_("Answered"), default=False)
  34 + exam = models.ForeignKey(Exam, verbose_name = _('Exam'), related_name='answers_stundet')
  35 + answer = models.ManyToManyField(Answer,verbose_name = _('Answers Students'), related_name='answers_stundet')
  36 + student = models.ForeignKey(User, verbose_name = _('Student'), related_name='answers_stundent')
  37 + answered_in = models.DateTimeField(_("Answered Date"),auto_now=True)
  38 +
  39 + class Meta:
  40 + verbose_name = _('Answer Stundent')
  41 + verbose_name_plural = _('Answers Student')
  42 +
  43 + def __str__(self):
  44 + return str(self.student) + str("/") + str(self.exam)
... ...
exam/permissions.py
... ... @@ -10,3 +10,13 @@ def edit_exam(role, user, exam):
10 10 return True
11 11  
12 12 return False
  13 +
  14 +@register_object_checker()
  15 +def delete_exam(role, user, exam):
  16 + if (role == SystemAdmin):
  17 + return True
  18 +
  19 + if (user in exam.topic.subject.professors.all()):
  20 + return True
  21 +
  22 + return False
... ...
exam/urls.py
1   -from django.conf.urls import url
2   -
3   -from . import views
4   -
5   -urlpatterns = [
6   - url(r'^create/(?P<slug>[\w\-_]+)/$', views.CreateExam.as_view(), name='create_exam'),
7   - url(r'^update/(?P<slug>[\w\-_]+)/$', views.UpdateExam.as_view(), name='update_exam'),
8   - url(r'^view/(?P<slug>[\w\-_]+)/$', views.ViewExam.as_view(), name='view_exam'),
9   - url(r'^delete/(?P<slug>[\w\-_]+)/$', views.DeleteExam.as_view(), name='delete_exam'),
10   -]
  1 +# from django.conf.urls import url
  2 +#
  3 +# from . import views
  4 +#
  5 +# urlpatterns = [
  6 +# url(r'^create/(?P<slug>[\w\-_]+)/$', views.CreateExam.as_view(), name='create_exam'), # exam slug
  7 +# url(r'^update/(?P<slug>[\w\-_]+)/$', views.UpdateExam.as_view(), name='update_exam'), # topic slug
  8 +# url(r'^view/(?P<slug>[\w\-_]+)/$', views.ViewExam.as_view(), name='view_exam'), # exam slug
  9 +# url(r'^delete/(?P<slug>[\w\-_]+)/$', views.DeleteExam.as_view(), name='delete_exam'), # exam
  10 +# url(r'^answer/$', views.AnswerExam.as_view(), name='answer_exam'), # exam
  11 +# url(r'^answer-exam/(?P<slug>[\w\-_]+)/$', views.AnswerStudentExam.as_view(), name='answer_student_exam'), # exam slug
  12 +# ]
... ...
exam/views.py
... ... @@ -12,7 +12,7 @@ from django.db.models import Q
12 12 # from django.views.generic.edit import FormMixin
13 13  
14 14 from .forms import ExamForm
15   -from .models import Exam, Answer
  15 +from .models import Exam, Answer, AnswersStudent
16 16 from core.mixins import NotificationMixin
17 17 from users.models import User
18 18 from courses.models import Course, Topic
... ... @@ -26,50 +26,24 @@ class ViewExam(LoginRequiredMixin,generic.DetailView):
26 26 def get_object(self, queryset=None):
27 27 return get_object_or_404(Exam, slug = self.kwargs.get('slug'))
28 28  
29   - def form_invalid(self, form,**kwargs):
30   - context = super(ViewExam, self).form_invalid(form)
31   - answers = {}
32   - for key in self.request.POST:
33   - if(key != 'csrfmiddlewaretoken' and key != 'name' and key!= 'begin_date' and key != 'limit_date' and key != 'all_students' and key != 'students'):
34   - answers[key] = self.request.POST[key]
35   -
36   - keys = sorted(answers)
37   - context.context_data['answers'] = answers
38   - context.context_data['keys'] = keys
39   - return context
40   -
41   - def form_valid(self, form):
42   - exam = self.object
43   - exam = form.save(commit = False)
44   - exam.answers.all().delete()
45   - exam.save()
46   -
47   -
48   - for key in self.request.POST:
49   - if(key != 'csrfmiddlewaretoken' and key != 'name' and key != 'begin_date' and key != 'limit_date' and key != 'all_students' and key != 'students'):
50   - answer = Answer(answer=self.request.POST[key],order=key,exam=exam)
51   - answer.save()
52   -
53   - return super(ViewExam, self).form_valid(form)
54   -
55 29 def get_context_data(self, **kwargs):
56 30 context = super(ViewExam, self).get_context_data(**kwargs)
57 31 exam = self.object
  32 + context["topic"] = exam.topic
58 33 context['course'] = exam.topic.subject.course
59 34 context['subject'] = exam.topic.subject
60 35 context['subjects'] = exam.topic.subject.course.subjects.all()
61 36  
62   - answers = {}
63   - for answer in exam.answers.all():
64   - answers[answer.order] = answer.answer
65   -
66   - keys = sorted(answers)
67   - context['answers'] = answers
68   - context['keys'] = keys
69   -
  37 + answered = AnswersStudent.objects.filter(exam = exam, student=self.request.user)
  38 + print (answered)
  39 + if answered.count()<1:
  40 + context['status'] = False
  41 + else:
  42 + context['status'] = answered[0].status
70 43 return context
71 44  
72 45  
  46 +
73 47 class CreateExam(LoginRequiredMixin,HasRoleMixin,generic.CreateView):
74 48  
75 49 allowed_roles = ['professor', 'system_admin']
... ... @@ -79,7 +53,6 @@ class CreateExam(LoginRequiredMixin,HasRoleMixin,generic.CreateView):
79 53 form_class = ExamForm
80 54 context_object_name = 'exam'
81 55 template_name = 'exam/create.html'
82   - success_url = reverse_lazy('core:home')
83 56  
84 57 def form_invalid(self, form,**kwargs):
85 58 context = super(CreateExam, self).form_invalid(form)
... ... @@ -91,6 +64,8 @@ class CreateExam(LoginRequiredMixin,HasRoleMixin,generic.CreateView):
91 64 keys = sorted(answers)
92 65 context.context_data['answers'] = answers
93 66 context.context_data['keys'] = keys
  67 + context.context_data['form'] = form
  68 + context.status_code = 400
94 69 return context
95 70  
96 71 def form_valid(self, form):
... ... @@ -104,7 +79,7 @@ class CreateExam(LoginRequiredMixin,HasRoleMixin,generic.CreateView):
104 79 answer = Answer(answer=self.request.POST[key],order=key,exam=self.object)
105 80 answer.save()
106 81  
107   - return super(CreatePoll, self).form_valid(form)
  82 + return self.render_to_response(self.get_context_data(form = form), status = 200)
108 83  
109 84 def get_context_data(self, **kwargs):
110 85 context = super(CreateExam, self).get_context_data(**kwargs)
... ... @@ -129,7 +104,7 @@ class UpdateExam(LoginRequiredMixin,HasRoleMixin,generic.UpdateView):
129 104 exam = get_object_or_404(Exam, slug = self.kwargs.get('slug'))
130 105 if(not has_object_permission('edit_exam', self.request.user, exam)):
131 106 return self.handle_no_permission()
132   - return super(UpdatePoll, self).dispatch(*args, **kwargs)
  107 + return super(UpdateExam, self).dispatch(*args, **kwargs)
133 108  
134 109 def get_object(self, queryset=None):
135 110 return get_object_or_404(Exam, slug = self.kwargs.get('slug'))
... ... @@ -144,6 +119,8 @@ class UpdateExam(LoginRequiredMixin,HasRoleMixin,generic.UpdateView):
144 119 keys = sorted(answers)
145 120 context.context_data['answers'] = answers
146 121 context.context_data['keys'] = keys
  122 + context.context_data['form'] = form
  123 + context.status_code = 400
147 124 return context
148 125  
149 126 def form_valid(self, form):
... ... @@ -204,3 +181,49 @@ class DeleteExam(LoginRequiredMixin, HasRoleMixin, generic.DeleteView):
204 181  
205 182 def get_success_url(self):
206 183 return reverse_lazy('course:view_topic', kwargs={'slug' : self.object.topic.slug})
  184 +
  185 +class AnswerExam(generic.TemplateView):
  186 + template_name = 'exam/answer.html'
  187 +
  188 +class AnswerStudentExam(LoginRequiredMixin,generic.CreateView):
  189 +
  190 + model = AnswersStudent
  191 + fields = ['status']
  192 + context_object_name = 'answer'
  193 + template_name = 'exam/answer_student.html'
  194 +
  195 + def form_valid(self, form):
  196 + exam = get_object_or_404(Exam, slug = self.kwargs.get('slug'))
  197 + answers = AnswersStudent(
  198 + status = True,
  199 + exam = exam,
  200 + student = self.request.user,
  201 + )
  202 + answers.save()
  203 +
  204 + for key in self.request.POST:
  205 + if(key != 'csrfmiddlewaretoken'):
  206 + answers.answer.add(exam.answers.all().filter(order=key)[0])
  207 +
  208 + return self.render_to_response(self.get_context_data(form = form), status = 200)
  209 +
  210 + def get_context_data(self, **kwargs):
  211 + context = super(AnswerStudentExam, self).get_context_data(**kwargs)
  212 + print (self.kwargs.get('slug'))
  213 + exam = get_object_or_404(Exam, slug = self.kwargs.get('slug'))
  214 + context['exam'] = exam
  215 + context['topic'] = exam.topic
  216 + context['course'] = exam.topic.subject.course
  217 + context['subject'] = exam.topic.subject
  218 + context['subjects'] = exam.topic.subject.course.subjects.all()
  219 +
  220 + print (self.request.method)
  221 + answers = {}
  222 + for answer in exam.answers.all():
  223 + answers[answer.order] = answer.answer
  224 +
  225 + keys = sorted(answers)
  226 + context['answers'] = answers
  227 + context['keys'] = keys
  228 +
  229 + return context
... ...
forum/tests/test_view_forum.py
... ... @@ -10,7 +10,6 @@ from forum.models import Forum, Post, PostAnswer
10 10 class ForumViewTestCase (TestCase):
11 11  
12 12 def setUp(self):
13   - self.client = Client()
14 13  
15 14 self.user = User.objects.create_user(
16 15 username = 'test',
... ... @@ -21,6 +20,26 @@ class ForumViewTestCase (TestCase):
21 20 )
22 21 assign_role(self.user, 'system_admin')
23 22  
  23 + self.user_professor = User.objects.create_user(
  24 + username = 'professor',
  25 + email = 'professor@amadeus.com',
  26 + is_staff = False,
  27 + is_active = True,
  28 + password = 'testing',
  29 + type_profile = 1
  30 + )
  31 + assign_role(self.user_professor, 'professor')
  32 +
  33 + self.user_student = User.objects.create_user(
  34 + username = 'student',
  35 + email = 'student@amadeus.com',
  36 + is_staff = False,
  37 + is_active = True,
  38 + password = 'testing',
  39 + type_profile = 2
  40 + )
  41 + assign_role(self.user_student, 'student')
  42 +
24 43 self.category = CourseCategory.objects.create(
25 44 name = 'Category test',
26 45 slug = 'category_test'
... ... @@ -87,11 +106,15 @@ class ForumViewTestCase (TestCase):
87 106 )
88 107 self.answer.save()
89 108  
90   -
  109 + self.client = Client()
91 110 self.client.login(username='test', password='testing')
92   - self.index_url = reverse('course:forum:view', kwargs={'slug':self.forum.slug})
93   - self.create_url = reverse('course:forum:create')
94   - self.update_url = reverse('course:forum:update', kwargs={'pk':self.forum.pk})
  111 +
  112 + self.client_professor = Client()
  113 + self.client_professor.login (username='professor', password='testing')
  114 +
  115 + self.client_student = Client()
  116 + self.client_student.login (username='student', password='testing')
  117 +
95 118  
96 119 self.createPost_url = reverse('course:forum:create_post')
97 120 self.updatePost_url = reverse('course:forum:update_post', kwargs={'pk':self.post.pk})
... ... @@ -99,61 +122,137 @@ class ForumViewTestCase (TestCase):
99 122 ######################### ForumDetailView #########################
100 123  
101 124 def test_ForumDetail_view_ok (self):
102   - response = self.client.get(self.index_url)
  125 + url = reverse('course:forum:view', kwargs={'slug':self.forum.slug})
  126 +
  127 + response = self.client.get(url)
  128 + self.assertEquals(response.status_code, 200)
  129 +
  130 + response = self.client_professor.get(url)
  131 + self.assertEquals(response.status_code, 200)
  132 +
  133 + response = self.client_student.get(url)
103 134 self.assertEquals(response.status_code, 200)
104   - self.assertTemplateUsed(response, 'forum/forum_view.html')
105 135  
106 136 def test_ForumDetail_context(self):
107   - response = self.client.get(self.index_url)
  137 + url = reverse('course:forum:view', kwargs={'slug':self.forum.slug})
  138 +
  139 + response = self.client.get(url)
108 140 self.assertTrue('forum' in response.context)
109 141  
  142 + response = self.client_professor.get(url)
  143 + self.assertTrue('forum' in response.context)
  144 +
  145 + response = self.client_student.get(url)
  146 + self.assertTrue('forum' in response.context)
  147 +
  148 +
110 149 ######################### CreateForumView #########################
111 150  
112 151 def test_CreateForum_view_ok (self):
113   - response = self.client.get(self.create_url)
  152 + url = reverse('course:forum:create')
  153 +
  154 + response = self.client.get(url)
  155 + self.assertEquals(response.status_code, 200)
  156 +
  157 + response = self.client_professor.get(url)
  158 + self.assertEquals(response.status_code, 200)
  159 +
  160 + response = self.client_student.get(url)
114 161 self.assertEquals(response.status_code, 200)
115   - self.assertTemplateUsed(response, 'forum/forum_form.html')
116 162  
117   - def test_CreateForum_context(self):
118   - response = self.client.get(self.create_url)
  163 + def test_CreateForum_context(self):
  164 + url = reverse('course:forum:create')
  165 +
  166 + response = self.client.get(url)
  167 + self.assertTrue('form' in response.context)
  168 +
  169 + response = self.client_professor.get(url)
  170 + self.assertTrue('form' in response.context)
  171 +
  172 + response = self.client_student.get(url)
119 173 self.assertTrue('form' in response.context)
120 174  
121 175 def test_CreateForum_form_error (self):
  176 + url = reverse('course:forum:create')
122 177 data = {'name':'', 'limit_date': '', 'description':'', 'topic':''}
123   - response = self.client.post(self.create_url, data)
  178 + list_forum = Forum.objects.all().count()
  179 +
  180 + response = self.client.post(url, data)
  181 + self.assertEquals (response.status_code, 400)
  182 + self.assertEquals(list_forum, Forum.objects.all().count())
  183 +
  184 + response = self.client_professor.post(url, data)
124 185 self.assertEquals (response.status_code, 400)
  186 + self.assertEquals(list_forum, Forum.objects.all().count())
  187 +
  188 + response = self.client_student.post(url, data)
  189 + self.assertEquals (response.status_code, 400)
  190 + self.assertEquals(list_forum, Forum.objects.all().count())
125 191  
126 192 def test_CreateForum_form_ok (self):
  193 + url = reverse('course:forum:create')
127 194 data = {
128 195 'name':'Forum Test2',
129 196 'limit_date': '2017-10-05',
130 197 'description':'Test',
131 198 'topic':str(self.topic.id)
132 199 }
  200 + list_forum = Forum.objects.all().count()
  201 +
  202 + response = self.client.post(url, data)
  203 + self.assertEquals (response.status_code, 302)
  204 + self.assertEquals(list_forum+1, Forum.objects.all().count())
133 205  
134   - response = self.client.post(self.create_url, data)
  206 + response = self.client_professor.post(url, data)
135 207 self.assertEquals (response.status_code, 302)
  208 + self.assertEquals(list_forum+2, Forum.objects.all().count())
136 209  
137   - forum = Forum.objects.get(name='Forum Test2')
  210 + response = self.client_student.post(url, data)
  211 + self.assertEquals (response.status_code, 302)
  212 + self.assertEquals(list_forum+3, Forum.objects.all().count())
138 213  
139 214 ######################### UpdateForumView #########################
140 215  
141 216 def test_UpdateForum_view_ok (self):
142   - response = self.client.get(self.update_url)
  217 + url = reverse('course:forum:update', kwargs={'pk':self.forum.pk})
  218 +
  219 + response = self.client.get(url)
  220 + self.assertEquals(response.status_code, 200)
  221 +
  222 + response = self.client_professor.get(url)
143 223 self.assertEquals(response.status_code, 200)
144   - self.assertTemplateUsed(response, 'forum/forum_form.html')
145 224  
146   - def test_UpdateForum_context(self):
147   - response = self.client.get(self.update_url)
  225 + response = self.client_student.get(url)
  226 + self.assertEquals(response.status_code, 200)
  227 +
  228 +
  229 + def test_UpdateForum_context(self):
  230 + url = reverse('course:forum:update', kwargs={'pk':self.forum.pk})
  231 +
  232 + response = self.client.get(url)
  233 + self.assertTrue('form' in response.context)
  234 +
  235 + response = self.client_professor.get(url)
  236 + self.assertTrue('form' in response.context)
  237 +
  238 + response = self.client_student.get(url)
148 239 self.assertTrue('form' in response.context)
149 240  
150 241 def test_UpdateForum_form_error (self):
  242 + url = reverse('course:forum:update', kwargs={'pk':self.forum.pk})
151 243 data = {'name':'', 'limit_date': '', 'description':''}
152 244  
153   - response = self.client.post(self.update_url, data)
  245 + response = self.client.post(url, data)
  246 + self.assertEquals (response.status_code, 400)
  247 +
  248 + response = self.client_professor.post(url, data)
  249 + self.assertEquals (response.status_code, 400)
  250 +
  251 + response = self.client_student.post(url, data)
154 252 self.assertEquals (response.status_code, 400)
155 253  
156 254 def test_UpdateForum_form_ok (self):
  255 + url = reverse('course:forum:update', kwargs={'pk':self.forum.pk})
157 256 data = {
158 257 'name':'Forum Updated',
159 258 'limit_date': '2017-10-05',
... ... @@ -161,11 +260,26 @@ class ForumViewTestCase (TestCase):
161 260 'topic':str(self.topic.id)
162 261 }
163 262  
164   - response = self.client.post(self.update_url, data)
  263 + self.assertEquals(Forum.objects.all()[0].name, 'forum test')
  264 + response = self.client.post(url, data)
165 265 self.assertEquals (response.status_code, 302)
166   -
  266 + self.assertEquals(Forum.objects.all()[0].name, 'Forum Updated')
167 267 forum = Forum.objects.get(name='Forum Updated')
168 268  
  269 + data['name'] = 'Forum Updated as professor'
  270 + self.assertEquals(Forum.objects.all()[0].name, 'Forum Updated')
  271 + response = self.client_professor.post(url, data)
  272 + self.assertEquals (response.status_code, 302)
  273 + self.assertEquals(Forum.objects.all()[0].name, 'Forum Updated as professor')
  274 + forum = Forum.objects.get(name='Forum Updated as professor')
  275 +
  276 + data['name'] = 'Forum Updated as student'
  277 + self.assertEquals(Forum.objects.all()[0].name, 'Forum Updated as professor')
  278 + response = self.client_student.post(url, data)
  279 + self.assertEquals (response.status_code, 302)
  280 + self.assertEquals(Forum.objects.all()[0].name, 'Forum Updated as student')
  281 + forum = Forum.objects.get(name='Forum Updated as student')
  282 +
169 283 ######################### CreatePostView #########################
170 284  
171 285 def test_CreatePost_form_error (self):
... ...
manage.py 100644 → 100755