You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.8 KiB

  1. from django.urls import reverse
  2. from rest_framework import status
  3. from rest_framework.test import APITestCase
  4. from mixer.backend.django import mixer
  5. from ..models import User, Project
  6. class TestProjects(APITestCase):
  7. @classmethod
  8. def setUpTestData(cls):
  9. cls.username = 'user'
  10. cls.password = 'pass'
  11. cls.super_username = 'super'
  12. cls.normal_user = User.objects.create_user(username=cls.username, password=cls.password)
  13. cls.super_user = User.objects.create_superuser(username=cls.super_username,
  14. password=cls.password, email='fizz@buzz.com')
  15. cls.project1 = mixer.blend('server.Project', project_type=Project.DOCUMENT_CLASSIFICATION,
  16. users=[cls.normal_user, cls.super_user])
  17. cls.project2 = mixer.blend('server.Project', project_type=Project.DOCUMENT_CLASSIFICATION,
  18. users=[cls.super_user])
  19. cls.url = reverse('project-list')
  20. def setUp(self):
  21. self.client.login(username=self.username, password=self.password)
  22. def test_get_projects(self):
  23. """
  24. Ensure user can get project.
  25. """
  26. response = self.client.get(self.url, format='json')
  27. self.assertEqual(response.status_code, status.HTTP_200_OK)
  28. self.assertEqual(len(response.data), 1)
  29. self.assertEqual(response.data[0]['id'], self.project1.id)
  30. def test_get_progress(self):
  31. """
  32. Ensure user can get project's progress.
  33. """
  34. url = '{}{}/progress/'.format(self.url, self.project1.id)
  35. response = self.client.get(url, format='json')
  36. self.assertEqual(response.status_code, status.HTTP_200_OK)
  37. self.assertIn('total', response.data)
  38. self.assertIn('remaining', response.data)
  39. self.assertIsInstance(response.data['total'], int)
  40. self.assertIsInstance(response.data['remaining'], int)
  41. def test_superuser_can_delete_project(self):
  42. """
  43. Ensure superuser can delete a project.
  44. """
  45. self.assertEqual(Project.objects.count(), 2)
  46. self.client.login(username=self.super_username, password=self.password)
  47. url = '{}{}/'.format(self.url, self.project2.id)
  48. response = self.client.delete(url, format='json')
  49. self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
  50. self.assertEqual(Project.objects.count(), 1)
  51. def test_normal_user_cannot_delete_project(self):
  52. """
  53. Ensure normal user cannot delete a project.
  54. """
  55. self.assertEqual(Project.objects.count(), 2)
  56. url = '{}{}/'.format(self.url, self.project2.id)
  57. response = self.client.delete(url, format='json')
  58. self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
  59. self.assertEqual(Project.objects.count(), 2)