示例#1
0
class RemoveUserFromProjectTests(TestCase):
    def setUp(self) -> None:
        self.number_of_reports = 6
        self.project = ProjectFactory(name="Test project")
        self.user = UserFactory()
        self.project.members.add(self.user)
        self._generate_user_reports()

    def test_that_removing_user_from_project_should_not_delete_user_reports_made_for_project(
            self):
        user_reports = Report.objects.filter(author=self.user,
                                             project=self.project)

        self.assertIn(self.user, self.project.members.all())
        self._check_number_of_reports(user_reports)

        self.project.members.remove(self.user)
        self.project.refresh_from_db()
        self.assertNotIn(self.user, self.project.members.all())

        self._check_number_of_reports(user_reports)

    def _generate_user_reports(self):
        for _report_number in range(self.number_of_reports):
            ReportFactory(author=self.user, project=self.project)

    def _check_number_of_reports(self, user_reports):
        self.assertEqual(user_reports.count(), self.number_of_reports)
        self.assertEqual(Report.objects.all().count(), self.number_of_reports)
示例#2
0
class ProjectUpdateViewTestCase(ProjectBaseTests):
    def setUp(self):
        super().setUp()
        self.project = ProjectFactory()
        self.url = reverse("custom-project-update",
                           kwargs={"pk": self.project.pk})
        self.data = {
            "name": "New Example Project Name",
            "start_date": self.project.start_date,
            "managers": [self.user.pk],
            "members": [self.user.pk],
        }

    def test_project_update_view_should_display_update_template(self):
        response = self.client.get(self.url)
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, self.project.name)
        self.assertTemplateUsed(response, ProjectUpdateView.template_name)

    def test_project_update_view_should_return_404_status_code_on_get_if_project_does_not_exist(
            self):
        response = self.client.get(
            reverse("custom-project-update",
                    kwargs={"pk": self.project.pk + 1}))
        self.assertEqual(response.status_code, 404)

    def test_project_create_view_should_exclude_inactive_users_from_members_field(
            self):
        inactive_user = UserFactory(is_active=False)
        response = self.client.get(self.url)
        form = response.context_data["form"]
        self.assertTrue(inactive_user not in form.fields["members"].queryset)

    def test_project_update_view_should_update_project_on_post(self):
        response = self.client.post(self.url, self.data)
        self.assertEqual(response.status_code, 302)
        self.project.refresh_from_db()
        self.assertEqual(self.project.name, self.data["name"])

    def test_project_update_view_should_update_project_on_post_if_data_is_invalid(
            self):
        del self.data["name"]
        response = self.client.post(self.url, self.data)
        self.assertEqual(response.status_code, 200)
        self.project.refresh_from_db()
        self.assertFormError(response, "form", "name",
                             "This field is required.")

    def test_project_update_view_should_not_update_managers_if_user_is_manager(
            self):
        assert self.project.managers.count() == 0
        user_manager = UserFactory(user_type=CustomUser.UserType.MANAGER.name)
        self.client.force_login(user=user_manager)
        self.data["managers"] = [self.user.pk, user_manager.pk]
        response = self.client.post(self.url, self.data)
        self.assertEqual(response.status_code, 404)
        self.project.refresh_from_db()
        self.assertEqual(self.project.managers.count(), 0)

    def test_project_update_view_should_display_all_aggregated_managers_on_get(
            self):
        self.project.managers.add(self.user)
        other_manager = ManagerUserFactory()

        response = self.client.get(self.url)

        self.assertEqual(response.status_code, 200)
        self.assertIn(self.user,
                      response.context_data["form"].initial["managers"])
        self.assertNotIn(other_manager,
                         response.context_data["form"].initial["managers"])
        self.assertContains(response, self.user)
        self.assertContains(response, other_manager)