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,7 +56,6 @@ INSTALLED_APPS = [
56 'forum', 56 'forum',
57 'poll', 57 'poll',
58 'links', 58 'links',
59 - 'exam',  
60 'files', 59 'files',
61 60
62 ] 61 ]
core/templates/registration/passwor_reset_complete.html
@@ -22,9 +22,7 @@ @@ -22,9 +22,7 @@
22 <form class="form-group " method="post" action=""> 22 <form class="form-group " method="post" action="">
23 {% csrf_token %} 23 {% csrf_token %}
24 <div class="form-group is-empty"> 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 </div> 26 </div>
29 </form> 27 </form>
30 </div> 28 </div>
core/templates/registration/passwor_reset_done.html
@@ -22,14 +22,8 @@ @@ -22,14 +22,8 @@
22 <form class="form-group " method="post" action=""> 22 <form class="form-group " method="post" action="">
23 {% csrf_token %} 23 {% csrf_token %}
24 <div class="form-group is-empty"> 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 </div> 27 </div>
34 </form> 28 </form>
35 </div> 29 </div>
courses/urls.py
@@ -27,7 +27,7 @@ urlpatterns = [ @@ -27,7 +27,7 @@ urlpatterns = [
27 url(r'^subjects/categories$',views.IndexSubjectCategoryView.as_view(), name='subject_category_index'), 27 url(r'^subjects/categories$',views.IndexSubjectCategoryView.as_view(), name='subject_category_index'),
28 url(r'^forum/', include('forum.urls', namespace = 'forum')), 28 url(r'^forum/', include('forum.urls', namespace = 'forum')),
29 url(r'^poll/', include('poll.urls', namespace = 'poll')), 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 url(r'^files/', include('files.urls', namespace = 'file')), 31 url(r'^files/', include('files.urls', namespace = 'file')),
32 url(r'^upload-material/$', views.UploadMaterialView.as_view(), name='upload_material'), 32 url(r'^upload-material/$', views.UploadMaterialView.as_view(), name='upload_material'),
33 url(r'^links/',include('links.urls',namespace = 'links')), 33 url(r'^links/',include('links.urls',namespace = 'links')),
1 from django.contrib import admin 1 from django.contrib import admin
2 2
3 -from .models import Exam, Answer 3 +from .models import Exam, Answer, AnswersStudent
4 4
5 class ExamAdmin(admin.ModelAdmin): 5 class ExamAdmin(admin.ModelAdmin):
6 list_display = ['name', 'slug','begin_date','limit_date'] 6 list_display = ['name', 'slug','begin_date','limit_date']
@@ -10,5 +10,10 @@ class AnswerAdmin(admin.ModelAdmin): @@ -10,5 +10,10 @@ class AnswerAdmin(admin.ModelAdmin):
10 list_display = ['answer','order'] 10 list_display = ['answer','order']
11 search_fields = ['answer'] 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 admin.site.register(Exam, ExamAdmin) 17 admin.site.register(Exam, ExamAdmin)
14 admin.site.register(Answer, AnswerAdmin) 18 admin.site.register(Answer, AnswerAdmin)
  19 +admin.site.register(AnswersStudent, AnswersStudentAdmin)
1 -from django.utils.translation import ugettext_lazy as _  
2 from django import forms 1 from django import forms
  2 +from django.utils.translation import ugettext_lazy as _
  3 +from users.models import User
3 from .models import Exam 4 from .models import Exam
4 5
5 class ExamForm(forms.ModelForm): 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,4 +27,18 @@ class Answer(models.Model):
27 verbose_name_plural = _('Answers') 27 verbose_name_plural = _('Answers')
28 28
29 def __str__(self): 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,3 +10,13 @@ def edit_exam(role, user, exam):
10 return True 10 return True
11 11
12 return False 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
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 +# ]
@@ -12,7 +12,7 @@ from django.db.models import Q @@ -12,7 +12,7 @@ from django.db.models import Q
12 # from django.views.generic.edit import FormMixin 12 # from django.views.generic.edit import FormMixin
13 13
14 from .forms import ExamForm 14 from .forms import ExamForm
15 -from .models import Exam, Answer 15 +from .models import Exam, Answer, AnswersStudent
16 from core.mixins import NotificationMixin 16 from core.mixins import NotificationMixin
17 from users.models import User 17 from users.models import User
18 from courses.models import Course, Topic 18 from courses.models import Course, Topic
@@ -26,50 +26,24 @@ class ViewExam(LoginRequiredMixin,generic.DetailView): @@ -26,50 +26,24 @@ class ViewExam(LoginRequiredMixin,generic.DetailView):
26 def get_object(self, queryset=None): 26 def get_object(self, queryset=None):
27 return get_object_or_404(Exam, slug = self.kwargs.get('slug')) 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 def get_context_data(self, **kwargs): 29 def get_context_data(self, **kwargs):
56 context = super(ViewExam, self).get_context_data(**kwargs) 30 context = super(ViewExam, self).get_context_data(**kwargs)
57 exam = self.object 31 exam = self.object
  32 + context["topic"] = exam.topic
58 context['course'] = exam.topic.subject.course 33 context['course'] = exam.topic.subject.course
59 context['subject'] = exam.topic.subject 34 context['subject'] = exam.topic.subject
60 context['subjects'] = exam.topic.subject.course.subjects.all() 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 return context 43 return context
71 44
72 45
  46 +
73 class CreateExam(LoginRequiredMixin,HasRoleMixin,generic.CreateView): 47 class CreateExam(LoginRequiredMixin,HasRoleMixin,generic.CreateView):
74 48
75 allowed_roles = ['professor', 'system_admin'] 49 allowed_roles = ['professor', 'system_admin']
@@ -79,7 +53,6 @@ class CreateExam(LoginRequiredMixin,HasRoleMixin,generic.CreateView): @@ -79,7 +53,6 @@ class CreateExam(LoginRequiredMixin,HasRoleMixin,generic.CreateView):
79 form_class = ExamForm 53 form_class = ExamForm
80 context_object_name = 'exam' 54 context_object_name = 'exam'
81 template_name = 'exam/create.html' 55 template_name = 'exam/create.html'
82 - success_url = reverse_lazy('core:home')  
83 56
84 def form_invalid(self, form,**kwargs): 57 def form_invalid(self, form,**kwargs):
85 context = super(CreateExam, self).form_invalid(form) 58 context = super(CreateExam, self).form_invalid(form)
@@ -91,6 +64,8 @@ class CreateExam(LoginRequiredMixin,HasRoleMixin,generic.CreateView): @@ -91,6 +64,8 @@ class CreateExam(LoginRequiredMixin,HasRoleMixin,generic.CreateView):
91 keys = sorted(answers) 64 keys = sorted(answers)
92 context.context_data['answers'] = answers 65 context.context_data['answers'] = answers
93 context.context_data['keys'] = keys 66 context.context_data['keys'] = keys
  67 + context.context_data['form'] = form
  68 + context.status_code = 400
94 return context 69 return context
95 70
96 def form_valid(self, form): 71 def form_valid(self, form):
@@ -104,7 +79,7 @@ class CreateExam(LoginRequiredMixin,HasRoleMixin,generic.CreateView): @@ -104,7 +79,7 @@ class CreateExam(LoginRequiredMixin,HasRoleMixin,generic.CreateView):
104 answer = Answer(answer=self.request.POST[key],order=key,exam=self.object) 79 answer = Answer(answer=self.request.POST[key],order=key,exam=self.object)
105 answer.save() 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 def get_context_data(self, **kwargs): 84 def get_context_data(self, **kwargs):
110 context = super(CreateExam, self).get_context_data(**kwargs) 85 context = super(CreateExam, self).get_context_data(**kwargs)
@@ -129,7 +104,7 @@ class UpdateExam(LoginRequiredMixin,HasRoleMixin,generic.UpdateView): @@ -129,7 +104,7 @@ class UpdateExam(LoginRequiredMixin,HasRoleMixin,generic.UpdateView):
129 exam = get_object_or_404(Exam, slug = self.kwargs.get('slug')) 104 exam = get_object_or_404(Exam, slug = self.kwargs.get('slug'))
130 if(not has_object_permission('edit_exam', self.request.user, exam)): 105 if(not has_object_permission('edit_exam', self.request.user, exam)):
131 return self.handle_no_permission() 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 def get_object(self, queryset=None): 109 def get_object(self, queryset=None):
135 return get_object_or_404(Exam, slug = self.kwargs.get('slug')) 110 return get_object_or_404(Exam, slug = self.kwargs.get('slug'))
@@ -144,6 +119,8 @@ class UpdateExam(LoginRequiredMixin,HasRoleMixin,generic.UpdateView): @@ -144,6 +119,8 @@ class UpdateExam(LoginRequiredMixin,HasRoleMixin,generic.UpdateView):
144 keys = sorted(answers) 119 keys = sorted(answers)
145 context.context_data['answers'] = answers 120 context.context_data['answers'] = answers
146 context.context_data['keys'] = keys 121 context.context_data['keys'] = keys
  122 + context.context_data['form'] = form
  123 + context.status_code = 400
147 return context 124 return context
148 125
149 def form_valid(self, form): 126 def form_valid(self, form):
@@ -204,3 +181,49 @@ class DeleteExam(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): @@ -204,3 +181,49 @@ class DeleteExam(LoginRequiredMixin, HasRoleMixin, generic.DeleteView):
204 181
205 def get_success_url(self): 182 def get_success_url(self):
206 return reverse_lazy('course:view_topic', kwargs={'slug' : self.object.topic.slug}) 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,7 +10,6 @@ from forum.models import Forum, Post, PostAnswer
10 class ForumViewTestCase (TestCase): 10 class ForumViewTestCase (TestCase):
11 11
12 def setUp(self): 12 def setUp(self):
13 - self.client = Client()  
14 13
15 self.user = User.objects.create_user( 14 self.user = User.objects.create_user(
16 username = 'test', 15 username = 'test',
@@ -21,6 +20,26 @@ class ForumViewTestCase (TestCase): @@ -21,6 +20,26 @@ class ForumViewTestCase (TestCase):
21 ) 20 )
22 assign_role(self.user, 'system_admin') 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 self.category = CourseCategory.objects.create( 43 self.category = CourseCategory.objects.create(
25 name = 'Category test', 44 name = 'Category test',
26 slug = 'category_test' 45 slug = 'category_test'
@@ -87,11 +106,15 @@ class ForumViewTestCase (TestCase): @@ -87,11 +106,15 @@ class ForumViewTestCase (TestCase):
87 ) 106 )
88 self.answer.save() 107 self.answer.save()
89 108
90 - 109 + self.client = Client()
91 self.client.login(username='test', password='testing') 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 self.createPost_url = reverse('course:forum:create_post') 119 self.createPost_url = reverse('course:forum:create_post')
97 self.updatePost_url = reverse('course:forum:update_post', kwargs={'pk':self.post.pk}) 120 self.updatePost_url = reverse('course:forum:update_post', kwargs={'pk':self.post.pk})
@@ -99,61 +122,137 @@ class ForumViewTestCase (TestCase): @@ -99,61 +122,137 @@ class ForumViewTestCase (TestCase):
99 ######################### ForumDetailView ######################### 122 ######################### ForumDetailView #########################
100 123
101 def test_ForumDetail_view_ok (self): 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 self.assertEquals(response.status_code, 200) 134 self.assertEquals(response.status_code, 200)
104 - self.assertTemplateUsed(response, 'forum/forum_view.html')  
105 135
106 def test_ForumDetail_context(self): 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 self.assertTrue('forum' in response.context) 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 ######################### CreateForumView ######################### 149 ######################### CreateForumView #########################
111 150
112 def test_CreateForum_view_ok (self): 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 self.assertEquals(response.status_code, 200) 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 self.assertTrue('form' in response.context) 173 self.assertTrue('form' in response.context)
120 174
121 def test_CreateForum_form_error (self): 175 def test_CreateForum_form_error (self):
  176 + url = reverse('course:forum:create')
122 data = {'name':'', 'limit_date': '', 'description':'', 'topic':''} 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 self.assertEquals (response.status_code, 400) 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 def test_CreateForum_form_ok (self): 192 def test_CreateForum_form_ok (self):
  193 + url = reverse('course:forum:create')
127 data = { 194 data = {
128 'name':'Forum Test2', 195 'name':'Forum Test2',
129 'limit_date': '2017-10-05', 196 'limit_date': '2017-10-05',
130 'description':'Test', 197 'description':'Test',
131 'topic':str(self.topic.id) 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 self.assertEquals (response.status_code, 302) 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 ######################### UpdateForumView ######################### 214 ######################### UpdateForumView #########################
140 215
141 def test_UpdateForum_view_ok (self): 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 self.assertEquals(response.status_code, 200) 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 self.assertTrue('form' in response.context) 239 self.assertTrue('form' in response.context)
149 240
150 def test_UpdateForum_form_error (self): 241 def test_UpdateForum_form_error (self):
  242 + url = reverse('course:forum:update', kwargs={'pk':self.forum.pk})
151 data = {'name':'', 'limit_date': '', 'description':''} 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 self.assertEquals (response.status_code, 400) 252 self.assertEquals (response.status_code, 400)
155 253
156 def test_UpdateForum_form_ok (self): 254 def test_UpdateForum_form_ok (self):
  255 + url = reverse('course:forum:update', kwargs={'pk':self.forum.pk})
157 data = { 256 data = {
158 'name':'Forum Updated', 257 'name':'Forum Updated',
159 'limit_date': '2017-10-05', 258 'limit_date': '2017-10-05',
@@ -161,11 +260,26 @@ class ForumViewTestCase (TestCase): @@ -161,11 +260,26 @@ class ForumViewTestCase (TestCase):
161 'topic':str(self.topic.id) 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 self.assertEquals (response.status_code, 302) 265 self.assertEquals (response.status_code, 302)
166 - 266 + self.assertEquals(Forum.objects.all()[0].name, 'Forum Updated')
167 forum = Forum.objects.get(name='Forum Updated') 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 ######################### CreatePostView ######################### 283 ######################### CreatePostView #########################
170 284
171 def test_CreatePost_form_error (self): 285 def test_CreatePost_form_error (self):
manage.py 100644 → 100755