Ejemplo n.º 1
0
 def test_get_related_requests(self):
     user = UserFactory()
     # scenario 1 --> they are a creator
     trip_request1 = FactoryFloor.TripRequestFactory(created_by=user)
     self.assertIn(trip_request1, utils.get_related_requests(user))
     # scenario 2 --> they are a traveller
     trip_request2 = FactoryFloor.TripRequestFactory(created_by=UserFactory())
     FactoryFloor.TravellerFactory(request=trip_request2, user=user)
     self.assertIn(trip_request2, utils.get_related_requests(user))
Ejemplo n.º 2
0
 def setUp(self):
     super().setUp()
     # individual
     self.instance1 = FactoryFloor.TripRequestFactory()
     FactoryFloor.TravellerFactory(request=self.instance1)
     # group
     self.instance2 = FactoryFloor.TripRequestFactory()
     FactoryFloor.TravellerFactory(request=self.instance2)
     FactoryFloor.TravellerFactory(request=self.instance2)
     self.test_url1 = reverse_lazy('travel:request_print', args=[self.instance1.pk])
     self.test_url2 = reverse_lazy('travel:request_print', args=[self.instance2.pk])
     self.expected_template1 = 'travel/traf/single.html'
     self.expected_template2 = 'travel/traf/group.html'
     self.user1 = self.get_and_login_user(self.instance1.created_by)
     self.user2 = self.get_and_login_user(self.instance2.created_by)
Ejemplo n.º 3
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)
Ejemplo n.º 4
0
 def setUp(self):
     super().setUp()
     self.instance = FactoryFloor.TripRequestFactory()
     self.test_url1 = reverse_lazy('travel:request_detail', args=[self.instance.pk])
     self.test_url2 = reverse_lazy('travel:request_detail_by_uuid', args=[self.instance.uuid])
     self.expected_template = 'travel/request_detail.html'
     self.user = self.get_and_login_user()
Ejemplo n.º 5
0
 def setUp(self):
     super().setUp()
     self.instance = FactoryFloor.TripRequestFactory()
     self.test_url = reverse_lazy('travel:request_cancel', args=[self.instance.pk])
     self.expected_template = 'travel/form.html'
     self.user1 = self.get_and_login_user(in_group="travel_adm_admin")
     self.user2 = self.get_and_login_user(in_group="travel_adm_admin")
Ejemplo n.º 6
0
 def setUp(self):
     super().setUp()
     self.instance = FactoryFloor.TripRequestFactory()
     self.test_url = reverse_lazy('travel:request_delete',
                                  args=[self.instance.pk])
     self.expected_template = 'travel/confirm_delete.html'
     self.user = self.get_and_login_user(self.instance.created_by)
Ejemplo n.º 7
0
 def setUp(self):
     super().setUp()
     self.instance = FactoryFloor.TripRequestFactory()
     self.test_url = reverse_lazy('travel:request_clone',
                                  args=[self.instance.pk])
     self.expected_template = 'travel/request_form.html'
     self.user = self.get_and_login_user()
Ejemplo n.º 8
0
 def setUp(self):
     super().setUp()
     self.trip_request = FactoryFloor.TripRequestFactory()
     self.trip = FactoryFloor.TripFactory()
     self.test_url1 = reverse_lazy('travel:export_cfts_list', args=[])
     self.test_url2 = reverse_lazy('travel:export_cfts_request', args=[self.trip_request.id])
     self.test_url3 = reverse_lazy('travel:export_cfts_trip', args=[self.trip.id])
     self.user = self.get_and_login_user(in_group="travel_admin")
Ejemplo n.º 9
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)
Ejemplo n.º 10
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)
Ejemplo n.º 11
0
 def test_get_adm_eligible_trips(self):
     trip = FactoryFloor.TripFactory(is_adm_approval_required=False, start_date=timezone.now(), trip_subcategory_id=8)
     self.assertNotIn(trip, utils.get_adm_eligible_trips())
     trip.is_adm_approval_required = True
     trip.save()
     self.assertNotIn(trip, utils.get_adm_eligible_trips())
     trip.status = 41
     trip.save()
     self.assertNotIn(trip, utils.get_adm_eligible_trips())
     trip_request = FactoryFloor.TripRequestFactory(trip=trip)
     FactoryFloor.TravellerFactory(request=trip_request)
     self.assertNotIn(trip, utils.get_adm_eligible_trips())
     trip_request.status = 12
     trip_request.save()
     self.assertIn(trip, utils.get_adm_eligible_trips())
Ejemplo n.º 12
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))
Ejemplo n.º 13
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))
Ejemplo n.º 14
0
    def test_get_request_reviewers(self):
        # create your cast of people
        section = SectionFactory(head=UserFactory(), admin=UserFactory())
        division = section.division
        division.head = UserFactory()
        division.save()
        branch = division.branch
        branch.admin = UserFactory()
        branch.head = UserFactory()
        branch.save()
        region = branch.region
        region.head = UserFactory()
        region.save()
        adm, created = models.DefaultReviewer.objects.get_or_create(user=UserFactory(), special_role=5)
        presection2, created = models.DefaultReviewer.objects.get_or_create(user=UserFactory(), order=2)
        presection1, created = models.DefaultReviewer.objects.get_or_create(user=UserFactory(), order=1)
        presection2.sections.add(section)
        presection1.sections.add(section)
        prediv2, created = models.DefaultReviewer.objects.get_or_create(user=UserFactory(), order=2)
        prediv1, created = models.DefaultReviewer.objects.get_or_create(user=UserFactory(), order=1)
        prediv2.divisions.add(division)
        prediv1.divisions.add(division)
        prebranch2, created = models.DefaultReviewer.objects.get_or_create(user=UserFactory(), order=2)
        prebranch1, created = models.DefaultReviewer.objects.get_or_create(user=UserFactory(), order=1)
        prebranch2.branches.add(branch)
        prebranch1.branches.add(branch)

        trip_request = FactoryFloor.TripRequestFactory(status=17, section=section)
        trip = trip_request.trip
        trip.is_adm_approval_required = True
        trip.is_virtual = False
        trip.save()

        self.assertEqual(trip_request.reviewers.count(), 0)
        utils.get_request_reviewers(trip_request)
        supposed_reviewer_list = [
            presection1.user,
            presection2.user,
            section.admin,
            section.head,
            prediv1.user,
            prediv2.user,
            division.head,
            prebranch1.user,
            prebranch2.user,
            branch.admin,
            branch.head,
            adm.user,
            region.head
        ]
        actual_reviewer_list = [r.user for r in trip_request.reviewers.all()]
        self.assertEqual(supposed_reviewer_list, actual_reviewer_list)

        # if there is a regional delegate for expenditure initiation, this should take place of RDG
        ## this only applies to domestic travel... so we will have to remove ADM as well
        trip.is_adm_approval_required = False
        trip.save()
        ei, created = models.DefaultReviewer.objects.get_or_create(user=UserFactory(), expenditure_initiation_region=region)
        trip_request.reviewers.all().delete()
        supposed_reviewer_list = supposed_reviewer_list[:-1]
        supposed_reviewer_list = supposed_reviewer_list[:-1]
        supposed_reviewer_list.append(ei.user)
        utils.get_request_reviewers(trip_request)
        actual_reviewer_list = [r.user for r in trip_request.reviewers.all()]
        self.assertEqual(supposed_reviewer_list, actual_reviewer_list)

        # if the trip is virtual, there would be no expenditure initiation
        trip.is_virtual = True
        trip.save()
        trip_request.reviewers.all().delete()
        supposed_reviewer_list = supposed_reviewer_list[:-1]
        utils.get_request_reviewers(trip_request)
        actual_reviewer_list = [r.user for r in trip_request.reviewers.all()]
        self.assertEqual(supposed_reviewer_list, actual_reviewer_list)
Ejemplo n.º 15
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))
Ejemplo n.º 16
0
    def test_get_requests_with_managerial_access(self):
        section1 = SectionFactory(head=UserFactory(), admin=UserFactory())
        division = section1.division
        division.head = UserFactory()
        division.admin = UserFactory()
        division.save()
        branch = division.branch
        branch.admin = UserFactory()
        branch.head = UserFactory()
        branch.save()
        sector = branch.sector
        sector.admin = UserFactory()
        sector.head = UserFactory()
        sector.save()
        region = sector.region
        region.head = UserFactory()
        region.admin = UserFactory()
        region.save()
        # another section within division
        section2 = SectionFactory(head=UserFactory(), admin=UserFactory(), division=division)
        # another section within branch
        d = DivisionFactory(head=UserFactory(), admin=UserFactory(), branch=branch)
        section3 = SectionFactory(head=UserFactory(), admin=UserFactory(), division=d)
        # another section within region
        b = BranchFactory(head=UserFactory(), admin=UserFactory(), sector=sector)
        d = DivisionFactory(head=UserFactory(), admin=UserFactory(), branch=b)
        section4 = SectionFactory(head=UserFactory(), admin=UserFactory(), division=d)

        # create 4 trip requests, one under each section
        r1 = FactoryFloor.TripRequestFactory(section=section1)
        r2 = FactoryFloor.TripRequestFactory(section=section2)
        r3 = FactoryFloor.TripRequestFactory(section=section3)
        r4 = FactoryFloor.TripRequestFactory(section=section4)

        # start high: region head should see all four requests
        self.assertEqual(utils.get_requests_with_managerial_access(region.head).count(), 4)
        self.assertEqual(utils.get_requests_with_managerial_access(region.admin).count(), 4)
        for r in [r1, r2, r3, r4]:
            self.assertIn(r, utils.get_requests_with_managerial_access(region.head))
            self.assertIn(r, utils.get_requests_with_managerial_access(region.admin))

        # branch head should see all 3 requests
        self.assertEqual(utils.get_requests_with_managerial_access(branch.head).count(), 3)
        self.assertEqual(utils.get_requests_with_managerial_access(branch.admin).count(), 3)
        for r in [r1, r2, r3]:
            self.assertIn(r, utils.get_requests_with_managerial_access(branch.head))
            self.assertIn(r, utils.get_requests_with_managerial_access(branch.admin))

        # division head should see all 2 requests
        self.assertEqual(utils.get_requests_with_managerial_access(division.head).count(), 2)
        self.assertEqual(utils.get_requests_with_managerial_access(division.admin).count(), 2)
        for r in [r1, r2]:
            self.assertIn(r, utils.get_requests_with_managerial_access(division.head))
            self.assertIn(r, utils.get_requests_with_managerial_access(division.admin))

        # section head should see all 1 requests
        self.assertEqual(utils.get_requests_with_managerial_access(section1.head).count(), 1)
        self.assertEqual(utils.get_requests_with_managerial_access(section1.admin).count(), 1)
        for r in [r1]:
            self.assertIn(r, utils.get_requests_with_managerial_access(section1.head))
            self.assertIn(r, utils.get_requests_with_managerial_access(section1.admin))