예제 #1
0
    def test_email_must_be_unique(self):
        """
        email field must be unique
        """

        exception_a = 'UNIQUE constraint failed: staff_employee.email'
        exception_b = 'column email is not unique'
        expected_exception_msg = '({0}|{1})'.format(exception_a, exception_b)

        with self.assertRaisesRegexp(IntegrityError, expected_exception_msg):
            EmployeeFactory.create(email=self.subject.email).full_clean()
    def test_read_employee_fetch_all(self):
        # TODO: assert pagination
        # TODO: assert response schema

        queryset_length = 3
        EmployeeFactory.create_batch(queryset_length)

        view = EmployeeViewSet.as_view({'get': 'list'})
        url = reverse('employee-list')
        request = self.factory.get(url, format='json')
        force_authenticate(request, user=self.user)
        response = view(request)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
    def test_create_employee_with_duplicated_email(self):
        employee_a = EmployeeFactory.create()
        employee_b = EmployeeFactory.build()
        employee_b.email = employee_a.email
        data = EmployeeSerializer(employee_b).data

        view = EmployeeViewSet.as_view({'post': 'create'})
        url = reverse('employee-list')
        request = self.factory.post(url, data, format='json')
        force_authenticate(request, user=self.user)
        response = view(request)
        response.render()

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        self.assertEqual(response.data.get('email'),
                         ['employee with this email already exists.'])
    def test_patch_employee_when_found(self):
        employee_a = EmployeeFactory.create()
        employee_b = EmployeeFactory.build()
        department_url = reverse('department-detail',
                                 args=[employee_a.department.id])
        data = {
            'name': employee_b.name,
            'email': employee_b.email,
            'department': department_url
        }

        view = EmployeeViewSet.as_view({'patch': 'partial_update'})
        url = reverse('employee-list', args=[employee_a.id])
        request = self.factory.patch(url, data, format='json')
        force_authenticate(request, user=self.user)
        response = view(request, pk=employee_a.id)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
예제 #5
0
    def test_name_can_be_duplicated(self):
        """
        name field can be duplicated across different objects
        """

        employee = EmployeeFactory.create()
        employee.name = self.subject.name

        employee.full_clean()
    def test_delete_employee_when_found(self):
        employee = EmployeeFactory.create()

        view = EmployeeViewSet.as_view({'delete': 'destroy'})

        url = reverse('employee-detail', args=[employee.id])

        request = self.factory.delete(url, format='json')
        force_authenticate(request, user=self.user)
        response = view(request, pk=employee.id)

        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
    def test_patch_employee_when_not_found(self):
        employee = EmployeeFactory.build()
        data = EmployeeSerializer(employee).data

        view = EmployeeViewSet.as_view({'patch': 'partial_update'})

        url = reverse('employee-detail', args=[self.random_id])

        request = self.factory.patch(url, data, format='json')
        force_authenticate(request, user=self.user)
        response = view(request, pk=self.random_id)

        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
    def test_read_employee_when_found(self):
        employee = EmployeeFactory.create()

        view = EmployeeViewSet.as_view({'get': 'retrieve'})

        url = reverse('employee-detail', args=[employee.id])

        request = self.factory.get(url, format='json')
        force_authenticate(request, user=self.user)
        response = view(request, pk=employee.id)
        response.render()

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data.get('name'), employee.name)
    def test_create_employee_with_long_name(self):
        employee = EmployeeFactory.build(with_long_name=True)
        data = EmployeeSerializer(employee).data

        view = EmployeeViewSet.as_view({'post': 'create'})
        url = reverse('employee-list')
        request = self.factory.post(url, data, format='json')
        force_authenticate(request, user=self.user)
        response = view(request)
        response.render()

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

        self.assertEqual(
            response.data.get('name'),
            ['Ensure this field has no more than 250 characters.'])
    def test_create_employee_with_valid_data(self):
        department = DepartmentFactory.create()
        employee = EmployeeFactory.build()
        department_url = reverse('department-detail', args=[department.id])
        data = {
            'name': employee.name,
            'email': employee.email,
            'department': department_url
        }

        view = EmployeeViewSet.as_view({'post': 'create'})
        url = reverse('employee-list')
        request = self.factory.post(url, data, format='json')
        force_authenticate(request, user=self.user)
        response = view(request)
        response.render()

        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertIsNotNone(response.data.get('id'))
예제 #11
0
 def setUp(self):
     self.subject = EmployeeFactory.create()