diff --git a/files/tests/files/large.pdf b/files/tests/files/large.pdf new file mode 100644 index 0000000..b0d7423 Binary files /dev/null and b/files/tests/files/large.pdf differ diff --git a/files/tests/tests.py b/files/tests/tests.py index a6748fe..ea52f12 100644 --- a/files/tests/tests.py +++ b/files/tests/tests.py @@ -7,6 +7,7 @@ from core.models import MimeType from users.models import User from files.models import TopicFile from files.forms import FileForm, UpdateFileForm +from rolepermissions.verifications import has_object_permission from courses.models import CourseCategory, Course, Subject, Topic import os @@ -35,6 +36,15 @@ class FileTestCase(TestCase): ) assign_role(self.teacher, 'professor') + self.teacher2 = User.objects.create_user( + username = 'teacher2', + email = 'teacherg2@school.com', + is_staff = False, + is_active = True, + password = 'teaching123' + ) + assign_role(self.teacher2, 'professor') + self.student = User.objects.create_user( username = 'student', email = 'student@amadeus.com', @@ -117,6 +127,49 @@ class FileTestCase(TestCase): self.assertEqual(response.status_code, 302) self.assertTemplateUsed(template_name = 'files/create_file.html') + def test_create_file_form_errors(self): + self.client.login(username='admin', password = 'testing123') + + files = TopicFile.objects.all().count() + self.assertEqual(TopicFile.objects.all().count(), files) #Macthing no file + + topic = Topic.objects.get(name = 'Topic Test') + + url = reverse('course:file:create_file', kwargs={'slug': topic.slug}) + data = { + "file_url" : self.file + } + data['topic'] = topic + + # Get modal + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + # Create file + response = self.client.post(url, data) + self.assertFormError(response, 'form', 'name', 'Este campo é obrigatório.') + self.assertEqual(TopicFile.objects.all().count(), files) + self.assertEqual(response.status_code, 400) + + # Test file too large + upload_file = open( '/'.join([FILE_DIR, 'files/large.pdf']), 'rb') + file = SimpleUploadedFile(upload_file.name, upload_file.read()) + data = { + "name": 'File too large', + "file_url": file + } + data['topic'] = topic + + # Get modal + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + #Create file + response = self.client.post(url, data) + self.assertFormError(response, 'form', 'file_url', 'File too large (Max 10MB)') + self.assertEqual(TopicFile.objects.all().count(), files) + self.assertEqual(response.status_code, 400) + def test_update_file_ok(self): self.client.login(username='admin', password = 'testing123') @@ -128,13 +181,13 @@ class FileTestCase(TestCase): icon = 'photo' ) self.file_update = TopicFile.objects.create( - name = 'testinglink', + name = 'testingFile', file_url = self.file, file_type = mime_type, topic = topic ) - url = reverse('course:file:update_file',kwargs={'slug': self.file_update.slug}) + url = reverse('course:file:update_file', kwargs={'slug': self.file_update.slug}) upload_file_update = open( '/'.join([FILE_DIR, 'files/update.png']), 'rb') new_file = SimpleUploadedFile(upload_file_update.name, upload_file_update.read()) @@ -152,6 +205,55 @@ class FileTestCase(TestCase): self.assertEqual(response.status_code, 302) self.assertTemplateUsed(template_name = 'files/update_file.html') + def test_update_file_student_errors(self): + # Student + self.client.login(username='student', password = 'testing123') + + topic = Topic.objects.get(name = 'Topic Test') + + # File type + mime_type = MimeType.objects.create( + typ = 'image/png', + icon = 'photo' + ) + self.file_update = TopicFile.objects.create( + name = 'testingFile', + file_url = self.file, + file_type = mime_type, + topic = topic + ) + + url = reverse('course:file:update_file', kwargs={'slug': self.file_update.slug}) + + upload_file_update = open( '/'.join([FILE_DIR, 'files/update.png']), 'rb') + new_file = SimpleUploadedFile(upload_file_update.name, upload_file_update.read()) + data = { + 'name' : 'updated', + 'file_url': new_file + } + + # Get modal + response = self.client.get(url) + self.assertEqual(response.status_code, 302) + + response = self.client.post(url, data) + self.assertEqual(TopicFile.objects.all()[0].name, 'testingFile') # new file name + self.assertEqual(response.status_code, 302) + self.assertTemplateUsed(template_name = 'files/update_file.html') + + # Teacher + self.client.logout() + self.client.login(username='teacher2', password = 'testing123') + + # Get modal + response = self.client.get(url) + self.assertEqual(response.status_code, 302) + + response = self.client.post(url, data) + self.assertEqual(TopicFile.objects.all()[0].name, 'testingFile') # new file name + self.assertEqual(response.status_code, 302) + self.assertTemplateUsed(template_name = 'files/update_file.html') + def test_delete_file(self): self.client.login(username='admin', password = 'testing123') @@ -163,13 +265,13 @@ class FileTestCase(TestCase): icon = 'photo' ) self.file_delete = TopicFile.objects.create( - name = 'testinglink', + name = 'testingFile', file_url = self.file, file_type = mime_type, topic = topic ) - url = reverse('course:file:delete_file',kwargs={'slug': self.file_delete.slug}) + url = reverse('course:file:delete_file', kwargs={'slug': self.file_delete.slug}) # Get modal response = self.client.get(url) @@ -180,6 +282,49 @@ class FileTestCase(TestCase): self.assertEqual(response.status_code, 302) self.assertTemplateUsed(template_name = 'files/delete_file.html') + def test_delete_file_error_permissions(self): + # Teacher without permission + self.client.login(username='teacher2', password = 'testing123') + + topic = Topic.objects.get(name = 'Topic Test') + + # File type + mime_type = MimeType.objects.create( + typ = 'image/png', + icon = 'photo' + ) + self.file_delete = TopicFile.objects.create( + name = 'testingFile', + file_url = self.file, + file_type = mime_type, + topic = topic + ) + + url = reverse('course:file:delete_file', kwargs={'slug': self.file_delete.slug}) + + # Get modal + response = self.client.get(url) + self.assertEqual(response.status_code, 302) + + response = self.client.post(url) + self.assertEqual(TopicFile.objects.all().count(), 1) # new file name + self.assertEqual(response.status_code, 302) + self.assertTemplateUsed(template_name = 'files/delete_file.html') + + # Student + self.client.logout() + self.client.login(username='student', password = 'testing123') + + # Get modal + response = self.client.get(url) + self.assertEqual(response.status_code, 302) + + response = self.client.post(url) + self.assertEqual(TopicFile.objects.all().count(), 1) # new file name + self.assertEqual(response.status_code, 302) + self.assertTemplateUsed(template_name = 'files/delete_file.html') + + -- libgit2 0.21.2