Exemple #1
0
    def setUp(self):
        super().setUp()

        # actors
        self.tr = FactoryFloor.IndividualTripRequestFactory(
            submitted=timezone.now())
        self.reviewer1 = FactoryFloor.ReviewerFactory(trip_request=self.tr,
                                                      role_id=1,
                                                      order=1)
        self.reviewer2 = FactoryFloor.ReviewerFactory(trip_request=self.tr,
                                                      role_id=5,
                                                      order=2)
        self.reviewer3 = FactoryFloor.ReviewerFactory(trip_request=self.tr,
                                                      role_id=6,
                                                      order=3)
        # start the review process and get set the first reviewer to "pending"
        utils.start_review_process(self.tr)
        utils.approval_seeker(self.tr, True)
        self.test_url1 = reverse_lazy('travel:tr_review_update',
                                      kwargs={"pk": self.reviewer1.pk})

        # there are two cases we will want to test. 1) an admin coming in to approve on behalf of and 2) a reviewer approving their own record

        # 2)

        self.expected_template = 'travel/reviewer_approval_form.html'
Exemple #2
0
 def setUp(self):
     super().setUp()
     self.instance = FactoryFloor.TripRequestFactory()
     FactoryFloor.ReviewerFactory(request=self.instance)
     self.test_url = reverse_lazy('travel:request_submit', args=[self.instance.pk])
     self.expected_template = 'travel/request_submit.html'
     self.user = self.get_and_login_user(self.instance.created_by)
Exemple #3
0
 def setUp(self):
     super().setUp()
     self.reviewer = FactoryFloor.ReviewerFactory()
     self.instance = self.reviewer.trip_request
     self.user = self.instance.user
     self.test_url = reverse_lazy('travel:request_submit',
                                  args=(self.instance.pk, "my"))
     self.expected_template = 'travel/trip_request_submission_form.html'
Exemple #4
0
    def test_can_modify_rules(self):
        activate('en')

        # actors
        trip_request = FactoryFloor.IndividualTripRequestFactory()
        reg_user = self.get_and_login_user()
        admin_user = self.get_and_login_user(in_group="travel_admin")

        # RULE 1: travel admin = True
        self.assertEqual(can_modify_request(admin_user, trip_request.id), True)

        # RULE 2: a current reviewer; they must be able to edit a child trip and the parent trip
        # a)
        my_reviewer = FactoryFloor.ReviewerFactory(trip_request=trip_request, status_id=1)
        self.assertEqual(can_modify_request(my_reviewer.user, trip_request.id), True)
        # b)
        child_trip_request = FactoryFloor.ChildTripRequestFactory()
        parent_trip_request = child_trip_request.parent_request
        my_reviewer = FactoryFloor.ReviewerFactory(trip_request=parent_trip_request, status_id=1)
        self.assertEqual(can_modify_request(my_reviewer.user, child_trip_request.id), True)
        self.assertEqual(can_modify_request(my_reviewer.user, parent_trip_request.id), True)

        # RULE 3: when a trip is unsubmitted, randos cannot edit
        self.assertIsNone(can_modify_request(reg_user, trip_request.id), False)
        # ** THERE IS AN EXCEPTION HERE: if the trip request user is None, then anyone can edit
        trip_request.user = None
        trip_request.save()
        self.assertEqual(can_modify_request(reg_user, trip_request.id), True)
        trip_request.user = UserFactory()
        trip_request.save()

        # RULE 4: when a trip is unsubmitted, owners can edit
        self.assertEqual(can_modify_request(trip_request.user, trip_request.id), True)
        self.assertEqual(can_modify_request(parent_trip_request.user, parent_trip_request.id), True)
        self.assertEqual(can_modify_request(parent_trip_request.user, child_trip_request.id), True)

        # RULE 5: when a trip is unsubmitted, travellers can edit
        self.assertEqual(can_modify_request(child_trip_request.user, child_trip_request.id), True)
        self.assertEqual(can_modify_request(child_trip_request.user, parent_trip_request.id), True)

        # RULE 6: owners are always able to unsubmit a trip
        trip_request.submitted = timezone.now()
        trip_request.save()
        self.assertEqual(can_modify_request(trip_request.user, trip_request.id, True), True)
Exemple #5
0
    def test_tr_review_process(self):
        activate('en')

        # actors
        tr = FactoryFloor.IndividualTripRequestFactory(status_id=8)  # draft
        reviewer1 = FactoryFloor.ReviewerFactory(trip_request=tr, order=1)
        reviewer2 = FactoryFloor.ReviewerFactory(trip_request=tr, order=2)
        reviewer3 = FactoryFloor.ReviewerFactory(trip_request=tr, order=3)

        utils.start_review_process(tr)
        for reviewer in tr.reviewers.all():
            self.assertEqual(reviewer.status_id, 20)
            self.assertIsNone(reviewer.status_date)

        # now let's end the review process
        utils.end_review_process(tr)
        for reviewer in tr.reviewers.all():
            self.assertEqual(reviewer.status_id, 4)
            self.assertIsNone(reviewer.status_date)
Exemple #6
0
 def test_start_request_review_process(self):
     # create your cast of people
     trip_request = FactoryFloor.TripRequestFactory(status=8)
     for i in range(0, 5):
         # add a status date just to make sure it is removed
         FactoryFloor.ReviewerFactory(request=trip_request, status=4, status_date=timezone.now())
     for r in trip_request.reviewers.all():
         self.assertEqual(r.status, 4)
         self.assertIsNotNone(r.status_date)
     utils.start_request_review_process(trip_request)
     for r in trip_request.reviewers.all():
         self.assertEqual(r.status, 20)
         self.assertIsNone(r.status_date)
Exemple #7
0
 def test_end_request_review_process(self):
     trip_request = FactoryFloor.TripRequestFactory(status=8)
     for i in range(0, 5):
         # add a status date just to make sure it is removed
         FactoryFloor.ReviewerFactory(request=trip_request, status=20, status_date=timezone.now(), comments="123")
     for r in trip_request.reviewers.all():
         self.assertEqual(r.status, 20)
         self.assertIsNotNone(r.status_date)
         self.assertIsNotNone(r.comments)
     utils.end_request_review_process(trip_request)
     for r in trip_request.reviewers.all():
         self.assertEqual(r.status, 4)
         self.assertIsNone(r.status_date)
         self.assertIsNone(r.comments)
Exemple #8
0
    def test_trip_request_model(self):
        # a reviewer associated with a trip request can be accessed by the reverse name called `reviewers`
        reviewer = FactoryFloor.ReviewerFactory()
        tr = reviewer.trip_request
        self.assertIn(reviewer, tr.reviewers.all())

        # a file associated with a trip request can be accessed by the reverse name called `files`
        file = FactoryFloor.FileFactory()
        tr = file.trip_request
        self.assertIn(file, tr.files.all())

        # a file associated with a trip request can be accessed by the reverse name called `files`
        tr_cost = FactoryFloor.TripRequestCostTotalFactory()
        tr = tr_cost.trip_request
        self.assertIn(tr_cost, tr.trip_request_costs.all())
Exemple #9
0
 def test_get_related_request_reviewers(self):
     # scenario 1 --> they are the active reviewer
     user = UserFactory()
     trip_request = FactoryFloor.TripRequestFactory(created_by=user, status=17)
     reviewer = FactoryFloor.ReviewerFactory(user=user, request=trip_request, status=4)  # start in draft
     self.assertIsNone(trip_request.current_reviewer)
     reviewer.status = 1
     reviewer.save()
     self.assertEqual(trip_request.current_reviewer, reviewer)
     self.assertIn(reviewer, utils.get_related_request_reviewers(user))
     trip_request.status = 16
     trip_request.save()
     self.assertNotIn(reviewer, utils.get_related_request_reviewers(user))
     trip_request.status = 14
     trip_request.save()
     self.assertNotIn(reviewer, utils.get_related_request_reviewers(user))
     trip_request.status = 8
     trip_request.save()
     self.assertNotIn(reviewer, utils.get_related_request_reviewers(user))
Exemple #10
0
    def test_reviewer_model(self):
        # if you save a reviewer while a request is in NON DRAFT (!=8) and the reviewer is in draft status (=4), there is a problem. the status should
        # be queued (=20)
        reviewer = FactoryFloor.ReviewerFactory()
        tr = reviewer.trip_request

        reviewer.status_id = 4  # draft
        reviewer.save()

        tr.status_id = 2  # pending review
        tr.save()

        reviewer.save()
        self.assertEqual(reviewer.status_id, 20)

        # reviewers with a status of pending should be accessible throught the trip_request prop `current_reviewer`
        reviewer.status_id = 1  # draft
        reviewer.save()
        self.assertEqual(tr.current_reviewer, reviewer)
Exemple #11
0
    def test_context(self):
        context_vars = [
            "user_trip_requests",
            "tr_reviews_waiting",
            "trip_reviews_waiting",
            "reviews_waiting",
            "is_reviewer",
            "is_tr_reviewer",
            "is_trip_reviewer",
            "is_admin",
            "is_adm_admin",
            "tab_dict",
        ]
        self.assert_presence_of_context_vars(self.test_url, context_vars)

        activate('en')
        reg_user = self.get_and_login_user()
        response = self.client.get(self.test_url)
        # a regular user should not be an admin or a reviewer
        self.assertEqual(response.context["is_admin"], False)
        self.assertEqual(response.context["is_reviewer"], False)

        # if a regular user is also a reviewer, the 'is_reviewer' var should be true
        FactoryFloor.ReviewerFactory(user=reg_user)
        response = self.client.get(self.test_url)
        self.assertEqual(response.context["is_reviewer"], True)

        # an admin user should be identified as such by the `is_admin` var in the template
        self.client.logout()
        admin_user = self.get_and_login_user(in_group="travel_admin")
        response = self.client.get(self.test_url)
        self.assertEqual(response.context["is_admin"], True)

        # an adm admin user should be identified as such by the `is_adm_admin` var in the template
        self.client.logout()
        admin_user = self.get_and_login_user(in_group="travel_adm_admin")
        response = self.client.get(self.test_url)
        self.assertEqual(response.context["is_adm_admin"], True)
Exemple #12
0
    def test_can_modify_rules(self):
        activate('en')

        # actors
        trip_request = FactoryFloor.TripRequestFactory()
        traveller = FactoryFloor.TravellerFactory(request=trip_request)
        reg_user = self.get_and_login_user()
        admin_user = self.get_and_login_regional_admin()
        adm_admin_user = self.get_and_login_admin()

        # RULE 1: travel admin = True
        self.assertEqual(can_modify_request(admin_user, trip_request.id), True)
        self.assertEqual(can_modify_request(adm_admin_user, trip_request.id), True)

        # RULE 2: a current reviewer; they must be able to edit a child trip and the parent trip
        # a)
        my_reviewer = FactoryFloor.ReviewerFactory(request=trip_request, status=1)
        trip_request.status = 17
        trip_request.save()
        self.assertTrue(can_modify_request(my_reviewer.user, trip_request.id))

        # RULE 3: when a trip is unsubmitted, randos cannot edit
        self.assertFalse(can_modify_request(reg_user, trip_request.id))

        # RULE 4: when a trip is unsubmitted, owners can edit
        self.assertTrue(can_modify_request(trip_request.created_by, trip_request.id))

        # RULE 5: when a trip is unsubmitted, travellers can edit
        self.assertTrue(can_modify_request(traveller.user, trip_request.id))

        # RULE 6: owners are always able to unsubmit a trip
        trip_request.submitted = timezone.now()
        trip_request.save()
        self.assertTrue(can_modify_request(trip_request.created_by, trip_request.id, True))
        trip_request.status = 22
        trip_request.save()
        self.assertTrue(can_modify_request(trip_request.created_by, trip_request.id, True))
Exemple #13
0
    def test_context(self):
        context_vars = [
            "field_list",
            "child_field_list",
            "reviewer_field_list",
            "conf_field_list",
            "cost_field_list",
            "help_text_dict",
            "help_text_dict",
            "fy",
            "is_admin",
            "is_owner",
            "is_current_reviewer",
            "can_modify",
            "trip",
            "triprequest",
        ]
        self.assert_presence_of_context_vars(self.test_url, context_vars)

        activate('en')
        reg_user = self.get_and_login_user()
        response = self.client.get(self.test_url)
        # expected to determine if the user is authorized to add content

        # a random user should not be an admin, owner, current_reviewer, able-to-modify
        self.assertEqual(response.context["is_admin"], False)
        self.assertEqual(response.context["is_owner"], False)
        # self.assertEqual(response.context["report_mode"], True)
        # self.assertIsNone(response.context["can_modify"], False)
        self.assertIsNone(response.context["is_current_reviewer"], True)

        # if owner, the is_owner var should be true
        self.trip_request.user = reg_user
        self.trip_request.save()
        response = self.client.get(self.test_url)
        self.assertEqual(response.context["is_admin"], False)
        self.assertEqual(response.context["is_owner"], True)
        self.assertIsNone(response.context["is_current_reviewer"], True)

        # if a user is an admin, they should be able to modify and are also always the current_reviewer
        self.get_and_login_user(in_group='travel_admin')
        response = self.client.get(self.test_url)
        self.assertEqual(response.context["is_admin"], True)
        self.assertEqual(response.context["is_owner"], False)
        self.assertEqual(response.context["is_current_reviewer"], True)

        # if a regular user is the current reviewer
        my_reviewer = FactoryFloor.ReviewerFactory(
            trip_request=self.trip_request, status_id=1)
        self.get_and_login_user(user=my_reviewer.user)
        response = self.client.get(self.test_url)
        self.assertEqual(response.context["is_admin"], False)
        self.assertEqual(response.context["is_owner"], False)
        self.assertEqual(response.context["is_current_reviewer"], True)

        # a submitted project being viewed by someone who is not admin or not current reviewer should have report_mode set to True
        self.trip_request.submitted = timezone.now()
        self.trip_request.save()
        reg_user = self.get_and_login_user()
        response = self.client.get(self.test_url)
        self.assertEqual(response.context["report_mode"], True)
Exemple #14
0
 def test_is_approver(self):
     user = self.get_and_login_user()
     trip_request = FactoryFloor.TripRequestFactory(status=17)
     self.assertFalse(utils.is_approver(user, trip_request))
     FactoryFloor.ReviewerFactory(user=user, request=trip_request, status=1)
     self.assertTrue(utils.is_approver(user, trip_request))