Skip to content

Commit bf2b24d

Browse files
authored
fix: TT-257 Fixed customer name null on get a specific project (#295)
1 parent 6e51301 commit bf2b24d

File tree

4 files changed

+57
-16
lines changed

4 files changed

+57
-16
lines changed

tests/time_tracker_api/projects/projects_model_test.py

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
from unittest.mock import Mock, patch
2-
import pytest
3-
2+
from commons.data_access_layer.cosmos_db import CosmosDBDao
43
from commons.data_access_layer.database import EventContext
4+
from time_tracker_api.customers.customers_model import (
5+
CustomerCosmosDBModel,
6+
CustomerCosmosDBDao,
7+
)
58
from time_tracker_api.projects.projects_model import (
69
ProjectCosmosDBRepository,
710
ProjectCosmosDBModel,
11+
create_dao,
812
)
913

1014

@@ -39,3 +43,37 @@ def test_find_all_projects_new_version(
3943
project = result[0]
4044
assert isinstance(project, ProjectCosmosDBModel)
4145
assert project.__dict__ == expected_item
46+
47+
48+
def test_get_project_with_their_customer(
49+
mocker,
50+
):
51+
project_data = {
52+
'customer_id': 'dsakldh12ASD',
53+
'id': 'JDKASDH12837',
54+
'name': 'testing',
55+
'description': 'do some testing',
56+
'project_type_id': "id2",
57+
'tenant_id': 'tenantid1',
58+
}
59+
60+
customer_data = {
61+
"id": "dsakldh12ASD",
62+
"name": 'IOET inc.',
63+
"description": 'nomatter',
64+
"tenant_id": 'nomatter',
65+
}
66+
67+
cosmos_db_get_mock = mocker.patch.object(CosmosDBDao, 'get')
68+
customer_db_get_mock = mocker.patch.object(CustomerCosmosDBDao, 'get')
69+
70+
expected_customer = CustomerCosmosDBModel(customer_data)
71+
expected_project = ProjectCosmosDBModel(project_data)
72+
73+
cosmos_db_get_mock.return_value = expected_project
74+
customer_db_get_mock.return_value = expected_customer
75+
76+
project = create_dao().get('nomatterid')
77+
78+
assert isinstance(project, ProjectCosmosDBModel)
79+
assert project.__dict__['customer_name'] == customer_data['name']

tests/time_tracker_api/projects/projects_namespace_test.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
from flask_restplus._http import HTTPStatus
77
from pytest_mock import MockFixture
88

9+
from time_tracker_api.projects.projects_model import ProjectCosmosDBDao
10+
911
fake = Faker()
1012

1113
valid_project_data = {
@@ -103,20 +105,17 @@ def test_list_all_active_projects(
103105
def test_get_project_should_succeed_with_valid_id(
104106
client: FlaskClient, mocker: MockFixture, valid_header: dict
105107
):
106-
from time_tracker_api.projects.projects_namespace import project_dao
107-
108108
valid_id = fake.random_int(1, 9999)
109-
repository_find_mock = mocker.patch.object(
110-
project_dao.repository, 'find', return_value=fake_project
111-
)
109+
110+
project_dao_get = mocker.patch.object(ProjectCosmosDBDao, 'get')
111+
project_dao_get.return_value = fake_project
112112

113113
response = client.get(
114114
"/projects/%s" % valid_id, headers=valid_header, follow_redirects=True
115115
)
116116

117117
assert HTTPStatus.OK == response.status_code
118-
fake_project == json.loads(response.data)
119-
repository_find_mock.assert_called_once_with(str(valid_id), ANY)
118+
project_dao_get.assert_called_with(str(valid_id))
120119

121120

122121
def test_get_project_should_return_not_found_with_invalid_id(

time_tracker_api/customers/customers_model.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ def __str___(self):
4444
return "the customer \"%s\"" % self.name # pragma: no cover
4545

4646

47+
class CustomerCosmosDBDao(APICosmosDBDao, CustomerDao):
48+
def __init__(self, repository):
49+
CosmosDBDao.__init__(self, repository)
50+
51+
4752
def create_dao() -> CustomerDao:
4853
repository = CosmosDBRepository.from_definition(
4954
container_definition, mapper=CustomerCosmosDBModel
5055
)
51-
52-
class CustomerCosmosDBDao(APICosmosDBDao, CustomerDao):
53-
def __init__(self):
54-
CosmosDBDao.__init__(self, repository)
55-
56-
return CustomerCosmosDBDao()
56+
return CustomerCosmosDBDao(repository)

time_tracker_api/projects/projects_model.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,11 @@ def get(self, id) -> ProjectCosmosDBModel:
115115
Get one project an active client
116116
:param (str) id: project's id
117117
"""
118-
return super().get(id)
118+
project = super().get(id)
119+
customer_dao = customers_create_dao()
120+
customer = customer_dao.get(project.customer_id)
121+
setattr(project, 'customer_name', customer.name)
122+
return project
119123

120124
@add_custom_attribute_in_list('customer', customers_create_dao)
121125
@add_custom_attribute_in_list('project_type', project_types_create_dao)

0 commit comments

Comments
 (0)