|
5 | 5 | from flask import json
|
6 | 6 | from flask.testing import FlaskClient
|
7 | 7 | from flask_restplus._http import HTTPStatus
|
8 |
| -from pytest_mock import MockFixture |
| 8 | +from pytest_mock import MockFixture, pytest |
9 | 9 |
|
10 |
| -from commons.data_access_layer.cosmos_db import current_datetime |
| 10 | +from commons.data_access_layer.cosmos_db import current_datetime, current_datetime_str |
11 | 11 |
|
12 | 12 | fake = Faker()
|
13 | 13 |
|
|
16 | 16 | "project_id": fake.uuid4(),
|
17 | 17 | "activity_id": fake.uuid4(),
|
18 | 18 | "description": fake.paragraph(nb_sentences=2),
|
19 |
| - "start_date": str(yesterday.isoformat()), |
20 |
| - "owner_id": fake.uuid4(), |
21 |
| - "tenant_id": fake.uuid4() |
| 19 | + "start_date": current_datetime_str(), |
22 | 20 | }
|
23 | 21 |
|
24 | 22 | fake_time_entry = ({
|
25 | 23 | "id": fake.random_int(1, 9999),
|
26 | 24 | "running": True,
|
| 25 | + "owner_id": fake.uuid4(), |
| 26 | + "tenant_id": fake.uuid4(), |
27 | 27 | })
|
28 | 28 | fake_time_entry.update(valid_time_entry_input)
|
29 | 29 |
|
@@ -86,21 +86,20 @@ def test_create_time_entry_should_succeed_with_valid_request(client: FlaskClient
|
86 | 86 | repository_create_mock.assert_called_once()
|
87 | 87 |
|
88 | 88 |
|
89 |
| -def test_create_time_entry_should_reject_bad_request(client: FlaskClient, |
90 |
| - mocker: MockFixture, |
91 |
| - valid_header: dict): |
| 89 | +def test_create_time_entry_with_missing_req_field_should_return_bad_request(client: FlaskClient, |
| 90 | + mocker: MockFixture, |
| 91 | + valid_header: dict): |
92 | 92 | from time_tracker_api.time_entries.time_entries_namespace import time_entries_dao
|
93 |
| - invalid_time_entry_input = valid_time_entry_input.copy() |
94 |
| - invalid_time_entry_input.update({ |
95 |
| - "project_id": None, |
96 |
| - }) |
97 | 93 | repository_create_mock = mocker.patch.object(time_entries_dao.repository,
|
98 | 94 | 'create',
|
99 | 95 | return_value=fake_time_entry)
|
100 | 96 |
|
101 | 97 | response = client.post("/time-entries",
|
102 | 98 | headers=valid_header,
|
103 |
| - json=invalid_time_entry_input, |
| 99 | + json={ |
| 100 | + "activity_id": fake.uuid4(), |
| 101 | + "start_date": current_datetime_str(), |
| 102 | + }, |
104 | 103 | follow_redirects=True)
|
105 | 104 |
|
106 | 105 | assert HTTPStatus.BAD_REQUEST == response.status_code
|
@@ -424,3 +423,50 @@ def test_get_running_should_return_not_found_if_find_running_throws_StopIteratio
|
424 | 423 | assert HTTPStatus.NOT_FOUND == response.status_code
|
425 | 424 | repository_update_mock.assert_called_once_with(partition_key_value=tenant_id,
|
426 | 425 | owner_id=owner_id)
|
| 426 | + |
| 427 | +@pytest.mark.parametrize( |
| 428 | + 'invalid_uuid', ["zxy", "zxy%s" % fake.uuid4(), "%szxy" % fake.uuid4(), " "] |
| 429 | +) |
| 430 | +def test_create_with_invalid_uuid_format_should_return_bad_request(client: FlaskClient, |
| 431 | + mocker: MockFixture, |
| 432 | + valid_header: dict, |
| 433 | + invalid_uuid: str): |
| 434 | + from time_tracker_api.time_entries.time_entries_namespace import time_entries_dao |
| 435 | + repository_container_create_item_mock = mocker.patch.object(time_entries_dao.repository.container, |
| 436 | + 'create_item', |
| 437 | + return_value=fake_time_entry) |
| 438 | + invalid_time_entry_input = { |
| 439 | + "project_id": fake.uuid4(), |
| 440 | + "activity_id": invalid_uuid, |
| 441 | + } |
| 442 | + response = client.post("/time-entries", |
| 443 | + headers=valid_header, |
| 444 | + json=invalid_time_entry_input, |
| 445 | + follow_redirects=True) |
| 446 | + |
| 447 | + assert HTTPStatus.BAD_REQUEST == response.status_code |
| 448 | + repository_container_create_item_mock.assert_not_called() |
| 449 | + |
| 450 | +@pytest.mark.parametrize( |
| 451 | + 'valid_uuid', ["", fake.uuid4()] |
| 452 | +) |
| 453 | +def test_create_with_valid_uuid_format_should_return_created(client: FlaskClient, |
| 454 | + mocker: MockFixture, |
| 455 | + valid_header: dict, |
| 456 | + valid_uuid: str): |
| 457 | + from time_tracker_api.time_entries.time_entries_namespace import time_entries_dao |
| 458 | + repository_container_create_item_mock = mocker.patch.object(time_entries_dao.repository.container, |
| 459 | + 'create_item', |
| 460 | + return_value=fake_time_entry) |
| 461 | + invalid_time_entry_input = { |
| 462 | + "project_id": fake.uuid4(), |
| 463 | + "activity_id": valid_uuid, |
| 464 | + } |
| 465 | + response = client.post("/time-entries", |
| 466 | + headers=valid_header, |
| 467 | + json=invalid_time_entry_input, |
| 468 | + follow_redirects=True) |
| 469 | + |
| 470 | + assert HTTPStatus.CREATED == response.status_code |
| 471 | + repository_container_create_item_mock.assert_called() |
| 472 | + |
0 commit comments