Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 45 additions & 7 deletions tests/time_tracker_api/time_entries/time_entries_model_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,12 +275,41 @@ def test_updated_item_without_deleted_key_should_call_validate_data(
@patch(
'time_tracker_api.time_entries.time_entries_repository.TimeEntryCosmosDBRepository.get_page_size_or'
)
@patch(
'commons.data_access_layer.cosmos_db.CosmosDBRepository.generate_params'
)
@patch(
'commons.data_access_layer.cosmos_db.CosmosDBRepository.create_sql_condition_for_visibility'
)
@patch(
'commons.data_access_layer.cosmos_db.CosmosDBRepository.create_sql_where_conditions'
)
@patch(
'commons.data_access_layer.cosmos_db.CosmosDBRepository.create_custom_sql_conditions'
)
@patch(
'time_tracker_api.time_entries.time_entries_repository.TimeEntryCosmosDBRepository.add_complementary_info'
)
@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.get_azure_app_configuration_client'
)
@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.is_toggle_enabled_for_user'
)
def test_find_all_v2(
is_toggle_enabled_for_user_mock,
get_azure_app_configuration_client_mock,
add_complementary_info_mock,
create_custom_sql_conditions_mock,
create_sql_where_conditions_mock,
create_sql_condition_for_visibility_mock,
generate_params_mock,
get_page_size_or_mock,
find_partition_key_value_mock,
event_context: EventContext,
time_entry_repository: TimeEntryCosmosDBRepository,
):
is_toggle_enabled_for_user_mock.return_value = True
expected_item = {
'id': 'id',
'start_date': '2021-03-22T10:00:00.000Z',
Expand All @@ -295,21 +324,28 @@ def test_find_all_v2(
time_entry_repository.container = Mock()
time_entry_repository.container.query_items = query_items_mock

result = time_entry_repository.find_all_v2(
event_context,
['owner_id'],
{
time_entry_repository.add_complementary_info = query_items_mock

result = time_entry_repository.find_all(
conditions={"user_id": "*"},
custom_sql_conditions=[],
event_context=event_context,
date_range={
'start_date': "2021-03-22T10:00:00.000Z",
'end_date': "2021-03-22T11:00:00.000Z",
},
custom_params={},
)

find_partition_key_value_mock.assert_called_once()
get_page_size_or_mock.assert_called_once()
assert len(result) == 1
time_entry = result[0]
assert isinstance(time_entry, TimeEntryCosmosDBModel)
assert time_entry.__dict__ == expected_item
assert time_entry == expected_item

create_sql_condition_for_visibility_mock.assert_called_once()
create_sql_where_conditions_mock.assert_called_once()
create_custom_sql_conditions_mock.assert_called_once()


@patch(
Expand All @@ -334,7 +370,9 @@ def test_get_last_entry(
time_entry_repository.container = Mock()
time_entry_repository.container.query_items = query_items_mock

time_entry = time_entry_repository.get_last_entry('id1', ['id1'], event_context)
time_entry = time_entry_repository.get_last_entry(
'id1', ['id1'], event_context
)

find_partition_key_value_mock.assert_called_once()
assert isinstance(time_entry, TimeEntryCosmosDBModel)
Expand Down
154 changes: 149 additions & 5 deletions tests/time_tracker_api/time_entries/time_entries_namespace_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,12 +137,22 @@ def test_create_time_entry_with_missing_req_field_should_return_bad_request(
repository_create_mock.assert_not_called()


@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.get_azure_app_configuration_client'
)
@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.is_toggle_enabled_for_user'
)
def test_list_all_time_entries(
is_toggle_enabled_for_user_mock,
get_azure_app_configuration_client_mock,
client: FlaskClient,
mocker: MockFixture,
valid_header: dict,
time_entries_dao,
):
is_toggle_enabled_for_user_mock.return_value = True

dao_get_all_mock = mocker.patch.object(
time_entries_dao, 'get_all', return_value=[]
)
Expand Down Expand Up @@ -204,18 +214,33 @@ def test_get_time_entry_should_succeed_with_valid_id(
'time_tracker_api.time_entries.time_entries_dao.TimeEntriesCosmosDBDao.handle_date_filter_args',
Mock(),
)
@patch(
'time_tracker_api.time_entries.time_entries_repository.TimeEntryCosmosDBRepository.create_sql_date_range_filter',
Mock(),
)
@patch(
'commons.data_access_layer.cosmos_db.CosmosDBRepository.generate_params',
Mock(),
)
@patch('msal.ConfidentialClientApplication', Mock())
@patch('utils.azure_users.AzureConnection.get_token', Mock())
@patch('utils.azure_users.AzureConnection.is_test_user')
@patch('utils.azure_users.AzureConnection.get_test_user_ids')
@pytest.mark.parametrize(
'current_user_is_tester, expected_user_ids',
[
(True, ['id1', 'id2']),
(False, ['id2']),
(True, ['id1', 'id1']),
],
)
def test_get_time_entries_by_type_of_user(
@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.get_azure_app_configuration_client'
)
@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.is_toggle_enabled_for_user'
)
def test_get_time_entries_by_type_of_user_when_is_user_tester(
is_toggle_enabled_for_user_mock,
get_azure_app_configuration_client_mock,
get_test_user_ids_mock,
is_test_user_mock,
client: FlaskClient,
Expand All @@ -224,6 +249,7 @@ def test_get_time_entries_by_type_of_user(
current_user_is_tester,
expected_user_ids,
):
is_toggle_enabled_for_user_mock.return_value = True
test_user_id = "id1"
non_test_user_id = "id2"
te1 = TimeEntryCosmosDBModel(
Expand All @@ -239,7 +265,97 @@ def test_get_time_entries_by_type_of_user(
{
"id": '2',
"project_id": "2",
"owner_id": non_test_user_id,
"owner_id": test_user_id,
"tenant_id": '2',
"start_date": "",
}
)

find_all_mock = Mock()
find_all_mock.return_value = [te1, te2]

time_entries_dao.repository.find_all = find_all_mock

is_test_user_mock.return_value = current_user_is_tester

response = client.get(
"/time-entries?user_id=*", headers=valid_header, follow_redirects=True
)

get_test_user_ids_mock.assert_not_called()
find_all_mock.assert_called()

expected_user_ids_in_time_entries = expected_user_ids
actual_user_ids_in_time_entries = [
time_entry["owner_id"] for time_entry in json.loads(response.data)
]
assert expected_user_ids_in_time_entries == actual_user_ids_in_time_entries


@patch(
'time_tracker_api.time_entries.time_entries_dao.TimeEntriesCosmosDBDao.create_event_context',
Mock(),
)
@patch(
'time_tracker_api.time_entries.time_entries_dao.TimeEntriesCosmosDBDao.build_custom_query',
Mock(),
)
@patch(
'time_tracker_api.time_entries.time_entries_dao.TimeEntriesCosmosDBDao.handle_date_filter_args',
Mock(),
)
@patch(
'time_tracker_api.time_entries.time_entries_repository.TimeEntryCosmosDBRepository.create_sql_date_range_filter',
Mock(),
)
@patch(
'commons.data_access_layer.cosmos_db.CosmosDBRepository.generate_params',
Mock(),
)
@patch('msal.ConfidentialClientApplication', Mock())
@patch('utils.azure_users.AzureConnection.get_token', Mock())
@patch('utils.azure_users.AzureConnection.is_test_user')
@patch('utils.azure_users.AzureConnection.get_test_user_ids')
@pytest.mark.parametrize(
'current_user_is_tester, expected_user_ids',
[
(False, ['id1', 'id1']),
],
)
@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.get_azure_app_configuration_client'
)
@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.is_toggle_enabled_for_user'
)
def test_get_time_entries_by_type_of_user_when_is_not_user_tester(
is_toggle_enabled_for_user_mock,
get_azure_app_configuration_client_mock,
get_test_user_ids_mock,
is_test_user_mock,
client: FlaskClient,
valid_header: dict,
time_entries_dao,
current_user_is_tester,
expected_user_ids,
):
is_toggle_enabled_for_user_mock.return_value = True
test_user_id = "id1"
non_test_user_id = "id2"
te1 = TimeEntryCosmosDBModel(
{
"id": '1',
"project_id": "1",
"owner_id": test_user_id,
"tenant_id": '1',
"start_date": "",
}
)
te2 = TimeEntryCosmosDBModel(
{
"id": '2',
"project_id": "2",
"owner_id": test_user_id,
"tenant_id": '2',
"start_date": "",
}
Expand All @@ -257,7 +373,7 @@ def test_get_time_entries_by_type_of_user(
"/time-entries?user_id=*", headers=valid_header, follow_redirects=True
)

is_test_user_mock.assert_called()
get_test_user_ids_mock.assert_called()
find_all_mock.assert_called()

expected_user_ids_in_time_entries = expected_user_ids
Expand Down Expand Up @@ -690,12 +806,21 @@ def test_create_with_valid_uuid_format_should_return_created(
('/time-entries'),
],
)
@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.get_azure_app_configuration_client'
)
@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.is_toggle_enabled_for_user'
)
def test_get_all_passes_date_range_built_from_params_to_find_all(
is_toggle_enabled_for_user_mock,
get_azure_app_configuration_client_mock,
client: FlaskClient,
valid_header: dict,
url: str,
time_entries_dao,
):
is_toggle_enabled_for_user_mock.return_value = True
time_entries_dao.repository.find_all = Mock(return_value=[])

response = client.get(url, headers=valid_header)
Expand Down Expand Up @@ -727,14 +852,24 @@ def test_get_all_passes_date_range_built_from_params_to_find_all(
),
],
)
@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.get_azure_app_configuration_client'
)
@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.is_toggle_enabled_for_user'
)
def test_get_all_passes_date_range_to_find_all_with_default_tz_offset(
is_toggle_enabled_for_user_mock,
get_azure_app_configuration_client_mock,
client: FlaskClient,
valid_header: dict,
time_entries_dao,
url: str,
start_date: str,
end_date: str,
):
is_toggle_enabled_for_user_mock.return_value = True

time_entries_dao.repository.find_all = Mock(return_value=[])

response = client.get(url, headers=valid_header)
Expand Down Expand Up @@ -788,14 +923,23 @@ def test_get_all_passes_date_range_to_find_all_with_default_tz_offset(
),
],
)
@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.get_azure_app_configuration_client'
)
@patch(
'commons.feature_toggles.feature_toggle_manager.FeatureToggleManager.is_toggle_enabled_for_user'
)
def test_get_all_passes_date_range_to_find_all_with_given_tz_offset(
is_toggle_enabled_for_user_mock,
get_azure_app_configuration_client_mock,
client: FlaskClient,
valid_header: dict,
time_entries_dao,
url: str,
start_date: str,
end_date: str,
):
is_toggle_enabled_for_user_mock.return_value = True
time_entries_dao.repository.find_all = Mock(return_value=[])

response = client.get(url, headers=valid_header)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ def test_TimeEntryQueryBuilder_is_subclass_CosmosDBQueryBuilder():
def test_add_sql_date_range_condition_should_update_where_list():
time_entry_query_builder = (
TimeEntryQueryBuilder().add_sql_date_range_condition(
("2021-03-19T05:07:00.000Z", "2021-03-25T10:00:00.000Z")
{
"start_date": "2021-03-19T05:07:00.000Z",
"end_date": "2021-03-25T10:00:00.000Z",
}
)
)
expected_params = [
Expand All @@ -34,7 +37,10 @@ def test_build_with_add_sql_date_range_condition():
time_entry_query_builder = (
TimeEntryQueryBuilder()
.add_sql_date_range_condition(
("2021-03-19T05:00:00.000Z", "2021-03-20T10:00:00.000Z")
{
"start_date": "2021-03-19T05:00:00.000Z",
"end_date": "2021-03-20T10:00:00.000Z",
}
)
.build()
)
Expand Down
Loading