Ejemplo n.º 1
0
    def setUp(self):
        """Set the environment for the tests up."""
        super().setUp()

        self.absence_credits = AbsenceCreditFactory.create_batch(
            5, user=self.user)

        AbsenceCreditFactory.create_batch(5)
Ejemplo n.º 2
0
def test_absence_credit_get_superuser(superadmin_client):
    AbsenceCreditFactory.create_batch(2)
    AbsenceCreditFactory.create(user=superadmin_client.user)
    url = reverse("absence-credit-list")

    result = superadmin_client.get(url)
    assert result.status_code == status.HTTP_200_OK
    json = result.json()
    assert len(json["data"]) == 3
Ejemplo n.º 3
0
def test_absence_credit_get_authenticated(auth_client):
    AbsenceCreditFactory.create_batch(2)
    absence_credit = AbsenceCreditFactory.create(user=auth_client.user)
    url = reverse("absence-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(absence_credit.id)
Ejemplo n.º 4
0
    def test_absence_credit_balance(self):
        """Should calculate an absence credit balance."""
        absence_credit = AbsenceCreditFactory.create(
            user=self.user, duration=timedelta(hours=30))

        EmploymentFactory.create(user=self.user,
                                 start_date=absence_credit.date -
                                 timedelta(days=1),
                                 worktime_per_day=timedelta(hours=8))

        AbsenceFactory.create(user=self.user,
                              type=absence_credit.absence_type,
                              date=absence_credit.date + timedelta(days=1))

        AbsenceFactory.create(user=self.user,
                              type=absence_credit.absence_type,
                              date=absence_credit.date - timedelta(days=1),
                              duration=timedelta(hours=8))

        url = reverse('absence-credit-detail', args=[absence_credit.id])

        res = self.client.get(url)
        result = self.result(res)

        assert result['data']['attributes']['duration'] == '1 06:00:00'
        assert result['data']['attributes']['used'] == '08:00:00'
        assert result['data']['attributes']['balance'] == '22:00:00'
Ejemplo n.º 5
0
def test_absence_balance_full_day(auth_client, django_assert_num_queries):
    day = date(2017, 2, 28)

    user = auth_client.user
    EmploymentFactory.create(user=user, start_date=day)
    absence_type = AbsenceTypeFactory.create()

    AbsenceCreditFactory.create(date=day,
                                user=user,
                                days=5,
                                absence_type=absence_type)

    # credit on different user, may not show up
    AbsenceCreditFactory.create(date=date.today(), absence_type=absence_type)

    AbsenceFactory.create(date=day, user=user, type=absence_type)

    AbsenceFactory.create(date=day - timedelta(days=1),
                          user=user,
                          type=absence_type)

    url = reverse('absence-balance-list')

    with django_assert_num_queries(7):
        result = auth_client.get(url,
                                 data={
                                     'date': '2017-03-01',
                                     'user': user.id,
                                     'include': 'absence_credits,absence_type'
                                 })

    assert result.status_code == status.HTTP_200_OK
    json = result.json()
    assert len(json['data']) == 1
    entry = json['data'][0]

    assert (entry['id'] == '{0}_{1}_2017-03-01'.format(user.id,
                                                       absence_type.id))
    assert entry['attributes']['credit'] == 5
    assert entry['attributes']['used-days'] == 2
    assert entry['attributes']['used-duration'] is None
    assert entry['attributes']['balance'] == 3

    assert len(json['included']) == 2
def test_absence_balance_full_day(auth_client, django_assert_num_queries):
    day = date(2017, 2, 28)

    user = auth_client.user
    EmploymentFactory.create(user=user, start_date=day)
    absence_type = AbsenceTypeFactory.create()

    AbsenceCreditFactory.create(date=day, user=user, days=5, absence_type=absence_type)

    # credit on different user, may not show up
    AbsenceCreditFactory.create(date=date.today(), absence_type=absence_type)

    AbsenceFactory.create(date=day, user=user, type=absence_type)

    AbsenceFactory.create(date=day - timedelta(days=1), user=user, type=absence_type)

    url = reverse("absence-balance-list")

    with django_assert_num_queries(6):
        result = auth_client.get(
            url,
            data={
                "date": "2017-03-01",
                "user": user.id,
                "include": "absence_credits,absence_type",
            },
        )

    assert result.status_code == status.HTTP_200_OK
    json = result.json()
    assert len(json["data"]) == 1
    entry = json["data"][0]

    assert entry["id"] == "{0}_{1}_2017-03-01".format(user.id, absence_type.id)
    assert entry["attributes"]["credit"] == 5
    assert entry["attributes"]["used-days"] == 2
    assert entry["attributes"]["used-duration"] is None
    assert entry["attributes"]["balance"] == 3

    assert len(json["included"]) == 2
Ejemplo n.º 7
0
def test_absence_credit_get_supervisor(auth_client):
    user = UserFactory.create()
    auth_client.user.supervisees.add(user)

    AbsenceCreditFactory.create_batch(1)
    AbsenceCreditFactory.create(user=auth_client.user)
    AbsenceCreditFactory.create(user=user)
    url = reverse("absence-credit-list")

    result = auth_client.get(url)
    assert result.status_code == status.HTTP_200_OK
    json = result.json()
    assert len(json["data"]) == 2
Ejemplo n.º 8
0
    def test_user_absence_types(self):
        absence_type = AbsenceTypeFactory.create()

        credit = AbsenceCreditFactory.create(date=date.today(),
                                             user=self.user,
                                             days=5,
                                             absence_type=absence_type)

        AbsenceFactory.create(date=date.today(),
                              user=self.user,
                              type=absence_type)

        AbsenceFactory.create(date=date.today() - timedelta(days=1),
                              user=self.user,
                              type=absence_type)

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

        res = self.client.get(url, {'include': 'user_absence_types'})

        assert res.status_code == HTTP_200_OK

        result = self.result(res)

        rel = result['data']['relationships']
        inc = result['included']

        assert len(rel['user-absence-types']['data']) == 1
        assert len(inc) == 1

        assert (
            inc[0]['id'] ==
            '{0}-{1}'.format(self.user.id, credit.absence_type.id)
        )

        assert inc[0]['attributes']['credit'] == 5
        assert inc[0]['attributes']['balance'] == 3
        assert inc[0]['attributes']['used-days'] == 2
        assert inc[0]['attributes']['used-duration'] is None