|
| 1 | +from time_tracker.time_entries._infrastructure import TimeEntriesJsonDao |
| 2 | +from time_tracker.time_entries._domain import TimeEntry |
| 3 | +from faker import Faker |
| 4 | +import json |
| 5 | +import pytest |
| 6 | +import typing |
| 7 | +import random |
| 8 | + |
| 9 | +fake_time_entries = [ |
| 10 | + { |
| 11 | + "id": Faker().uuid4(), |
| 12 | + "start_date": str(Faker().date_time()), |
| 13 | + "owner_id": Faker().uuid4(), |
| 14 | + "description": Faker().sentence(), |
| 15 | + "activity_id": Faker().uuid4(), |
| 16 | + "uri": Faker().uri(), |
| 17 | + "technologies": [Faker().name() for x in range(random.randrange(5))], |
| 18 | + "end_date": str(Faker().date_time()), |
| 19 | + "deleted": Faker().uuid4(), |
| 20 | + "timezone_offset": str(Faker().date_time()), |
| 21 | + "project_id": Faker().uuid4(), |
| 22 | + } |
| 23 | +] |
| 24 | + |
| 25 | + |
| 26 | +@pytest.fixture(name="create_fake_time_entries") |
| 27 | +def _create_fake_time_entries(mocker) -> typing.List[TimeEntry]: |
| 28 | + def _creator(time_entries): |
| 29 | + read_data = json.dumps(time_entries) |
| 30 | + mocker.patch("builtins.open", mocker.mock_open(read_data=read_data)) |
| 31 | + return [TimeEntry(**time_entry) for time_entry in time_entries] |
| 32 | + |
| 33 | + return _creator |
| 34 | + |
| 35 | + |
| 36 | +def test_get_by_id__returns_an_time_entry_dto__when_found_one_time_entry_that_matches_its_id( |
| 37 | + create_fake_time_entries, |
| 38 | +): |
| 39 | + print(fake_time_entries) |
| 40 | + time_entries_json_dao = TimeEntriesJsonDao(Faker().file_path()) |
| 41 | + time_entries = create_fake_time_entries(fake_time_entries) |
| 42 | + time_entries_dto = time_entries.pop() |
| 43 | + |
| 44 | + result = time_entries_json_dao.get_by_id(time_entries_dto.id) |
| 45 | + |
| 46 | + assert result == time_entries_dto |
| 47 | + |
| 48 | + |
| 49 | +def test__get_by_id__returns_none__when_no_time_entry_matches_its_id( |
| 50 | + create_fake_time_entries, |
| 51 | +): |
| 52 | + time_entries_json_dao = TimeEntriesJsonDao(Faker().file_path()) |
| 53 | + create_fake_time_entries([]) |
| 54 | + |
| 55 | + result = time_entries_json_dao.get_by_id(Faker().uuid4()) |
| 56 | + |
| 57 | + assert result is None |
| 58 | + |
| 59 | + |
| 60 | +def test__get_all__returns_a_list_of_time_entry_dto_objects__when_one_or_more_time_entries_are_found( |
| 61 | + create_fake_time_entries, |
| 62 | +): |
| 63 | + time_entries_json_dao = TimeEntriesJsonDao(Faker().file_path()) |
| 64 | + number_of_time_entries = 3 |
| 65 | + time_entries = create_fake_time_entries(fake_time_entries * number_of_time_entries) |
| 66 | + |
| 67 | + result = time_entries_json_dao.get_all() |
| 68 | + |
| 69 | + assert result == time_entries |
| 70 | + |
| 71 | + |
| 72 | +def test_get_all__returns_an_empty_list__when_doesnt_found_any_time_entries( |
| 73 | + create_fake_time_entries, |
| 74 | +): |
| 75 | + time_entries_json_dao = TimeEntriesJsonDao(Faker().file_path()) |
| 76 | + time_entries = create_fake_time_entries([]) |
| 77 | + |
| 78 | + result = time_entries_json_dao.get_all() |
| 79 | + |
| 80 | + assert result == time_entries |
0 commit comments