Exemple #1
0
def test_worktime_balance_with_employments(auth_client,
                                           django_assert_num_queries):
    # Calculate over one week
    start_date = date(2017, 3, 19)
    end_date = date(2017, 3, 26)

    employment = EmploymentFactory.create(user=auth_client.user,
                                          start_date=start_date,
                                          worktime_per_day=timedelta(
                                              hours=8, minutes=30),
                                          end_date=date(2017, 3, 23))
    EmploymentFactory.create(user=auth_client.user,
                             start_date=date(2017, 3, 24),
                             worktime_per_day=timedelta(hours=8),
                             end_date=None)

    # Overtime credit of 10 hours
    OvertimeCreditFactory.create(user=auth_client.user,
                                 date=start_date,
                                 duration=timedelta(hours=10, minutes=30))

    # One public holiday during workdays
    PublicHolidayFactory.create(date=start_date, location=employment.location)
    # One public holiday on weekend
    PublicHolidayFactory.create(date=start_date + timedelta(days=1),
                                location=employment.location)

    # 2x 10 hour reported worktime
    ReportFactory.create(user=auth_client.user,
                         date=start_date + timedelta(days=3),
                         duration=timedelta(hours=10))

    ReportFactory.create(user=auth_client.user,
                         date=start_date + timedelta(days=4),
                         duration=timedelta(hours=10))

    # one absence
    AbsenceFactory.create(user=auth_client.user,
                          date=start_date + timedelta(days=5))

    url = reverse('worktime-balance-detail',
                  args=[
                      '{0}_{1}'.format(auth_client.user.id,
                                       end_date.strftime('%Y-%m-%d'))
                  ])

    with django_assert_num_queries(12):
        result = auth_client.get(url)
    assert result.status_code == status.HTTP_200_OK

    # 4 workdays 8.5 hours, 1 workday 8 hours, minus one holiday 8.5
    # minutes 10.5 hours overtime credit
    expected_worktime = timedelta(hours=23)

    # 2 x 10 reports hours + 1 absence of 8 hours
    expected_reported = timedelta(hours=28)

    json = result.json()
    assert json['data']['attributes']['balance'] == (
        duration_string(expected_reported - expected_worktime))
Exemple #2
0
    def setUp(self):
        """Set the environment for the tests up."""
        super().setUp()

        self.overtime_credits = OvertimeCreditFactory.create_batch(
            5, user=self.user)

        OvertimeCreditFactory.create_batch(5)
Exemple #3
0
    def test_user_worktime_balance(self):
        """Should calculate correct worktime balances."""
        user = self.user
        employment = user.employments.get(end_date__isnull=True)

        # Calculate over one week
        start_date = date(2017, 3, 19)
        end_date = date(2017, 3, 26)

        employment.start_date = start_date
        employment.worktime_per_day = timedelta(hours=8)

        employment.save()

        # Overtime credit of 10 hours
        OvertimeCreditFactory.create(user=user,
                                     date=start_date,
                                     duration=timedelta(hours=10, minutes=30))

        # One public holiday during workdays
        PublicHolidayFactory.create(date=start_date,
                                    location=employment.location)
        # One public holiday on weekend
        PublicHolidayFactory.create(date=start_date + timedelta(days=1),
                                    location=employment.location)

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

        res = self.client.get('{0}?until={1}'.format(
            url, end_date.strftime('%Y-%m-%d')))

        result = self.result(res)

        # 5 workdays minus one holiday minus 10 hours overtime credit
        expected_worktime = (4 * employment.worktime_per_day -
                             timedelta(hours=10, minutes=30))

        assert (result['data']['attributes']['worktime-balance'] ==
                duration_string(timedelta() - expected_worktime))

        # 2x 10 hour reported worktime
        ReportFactory.create(user=user,
                             date=start_date + timedelta(days=3),
                             duration=timedelta(hours=10))

        ReportFactory.create(user=user,
                             date=start_date + timedelta(days=4),
                             duration=timedelta(hours=10))

        AbsenceFactory.create(user=user, date=start_date + timedelta(days=5))

        res2 = self.client.get('{0}?until={1}'.format(
            url, end_date.strftime('%Y-%m-%d')))

        result2 = self.result(res2)

        assert (result2['data']['attributes']['worktime-balance'] ==
                duration_string(timedelta(hours=28) - expected_worktime))
def test_overtime_credit_get_superuser(superadmin_client):
    OvertimeCreditFactory.create_batch(2)
    OvertimeCreditFactory.create(user=superadmin_client.user)
    url = reverse("overtime-credit-list")

    result = superadmin_client.get(url)
    assert result.status_code == status.HTTP_200_OK
    json = result.json()
    assert len(json["data"]) == 3
def test_overtime_credit_get_authenticated(auth_client):
    OvertimeCreditFactory.create_batch(2)
    overtime_credit = OvertimeCreditFactory.create(user=auth_client.user)
    url = reverse("overtime-credit-list")

    result = auth_client.get(url)
    assert result.status_code == status.HTTP_200_OK
    json = result.json()
    assert len(json["data"]) == 1
    assert json["data"][0]["id"] == str(overtime_credit.id)
def test_overtime_credit_get_supervisor(auth_client):
    user = UserFactory.create()
    auth_client.user.supervisees.add(user)

    OvertimeCreditFactory.create_batch(1)
    OvertimeCreditFactory.create(user=auth_client.user)
    OvertimeCreditFactory.create(user=user)
    url = reverse("overtime-credit-list")

    result = auth_client.get(url)
    assert result.status_code == status.HTTP_200_OK
    json = result.json()
    assert len(json["data"]) == 2