11import pytest
22import json
3- import uuid
43from faker import Faker
54
65import azure .functions as func
76import sqlalchemy
87from sqlalchemy .sql .sqltypes import Integer
98
10- import time_entries ._application ._activities as azure_activities
11- import time_entries ._domain as domain
12- import time_entries ._infrastructure as infrastructure
9+ import time_tracker . activities ._application ._activities as azure_activities
10+ import time_tracker . activities ._domain as domain
11+ import time_tracker . activities ._infrastructure as infrastructure
1312
1413ACTIVITY_URL = '/api/activities/'
1514
1817 'id' : 1 ,
1918 'name' : 'Activity Demo create' ,
2019 'description' : 'test demo create an new activity' ,
21- 'deleted' : 'b4327ba6-9f96-49ee-a9ac-3c1edf525172' ,
22- 'status' : 'active' ,
23- 'tenant_id' : 'cc925a5d-9644-4a4f-8d99-0bee49aadd05' ,
20+ 'deleted' : None ,
21+ 'status' : None ,
2422 },
2523 {
2624 'id' : 2 ,
2725 'name' : 'Activity Demo create' ,
2826 'description' : 'test demo create an new activity' ,
29- 'deleted' : 'b4327ba6-9f96-49ee-a9ac-3c1edf525172' ,
30- 'status' : 'active' ,
31- 'tenant_id' : 'cc925a5d-9644-4a4f-8d99-0bee49aadd05' ,
27+ 'deleted' : None ,
28+ 'status' : None ,
3229 },
3330 ]
3431
35- @pytest .fixture (name = 'create_fake_database' )
36- def _create_fake_database () -> domain .ActivitiesDao :
37- db_fake = infrastructure .DB ('sqlite:///:memory:' )
38-
39- activity = sqlalchemy .Table ('activity' , db_fake .metadata ,
40- sqlalchemy .Column ('id' ,sqlalchemy .Integer , primary_key = True ,autoincrement = True ),
41- sqlalchemy .Column ('name' , sqlalchemy .String ),
42- sqlalchemy .Column ('description' , sqlalchemy .String ),
43- sqlalchemy .Column ('deleted' , sqlalchemy .String ),
44- sqlalchemy .Column ('status' , sqlalchemy .String ),
45- sqlalchemy .Column ('tenant_id' , sqlalchemy .String ),
46- extend_existing = True ,
47- )
48-
49- query = activity .insert ()
50- db_fake .get_session ().execute (query , DEMO_DATA )
51- return db_fake
32+
33+ @pytest .fixture (name = 'insert_activity' )
34+ def _insert_activity () -> domain .Activity :
35+ def _new_activity (activity : dict , database : infrastructure .DB ):
36+ dao = infrastructure .ActivitiesSQLDao (database )
37+ new_activity = dao .create (activity )
38+ return new_activity
39+ return _new_activity
5240
5341def test__activity_azure_endpoint__returns_all_activities (
54- create_fake_database ,
42+ create_fake_database , activity_factory , insert_activity
5543):
56- azure_activities ._get_activities .DATABASE = create_fake_database
57- req = func .HttpRequest (method = 'GET' , body = None , url = ACTIVITY_URL )
44+ fake_database = create_fake_database
45+ existent_activities = [activity_factory (DEMO_DATA [0 ]), activity_factory (DEMO_DATA [1 ])]
46+ inserted_activities = [insert_activity (existent_activities [0 ].__dict__ , fake_database ).__dict__ , insert_activity (existent_activities [1 ].__dict__ , fake_database ).__dict__ ]
5847
48+ azure_activities ._get_activities .DATABASE = fake_database
49+ req = func .HttpRequest (method = 'GET' , body = None , url = ACTIVITY_URL )
5950 response = azure_activities ._get_activities .get_activities (req )
6051 activities_json_data = response .get_body ().decode ("utf-8" )
6152
6253 assert response .status_code == 200
63- assert activities_json_data == json .dumps (DEMO_DATA )
54+ assert activities_json_data == json .dumps (inserted_activities )
6455
6556
6657def test__activity_azure_endpoint__returns_an_activity__when_activity_matches_its_id (
67- create_fake_database ,
58+ create_fake_database , activity_factory , insert_activity
6859):
69- azure_activities ._get_activities .DATABASE = create_fake_database
60+ fake_database = create_fake_database
61+ existent_activity = activity_factory (DEMO_DATA [0 ])
62+ inserted_activity = insert_activity (existent_activity .__dict__ , fake_database ).__dict__
63+
64+ azure_activities ._get_activities .DATABASE = fake_database
7065 req = func .HttpRequest (
7166 method = 'GET' ,
7267 body = None ,
7368 url = ACTIVITY_URL ,
74- route_params = {"id" : str ( DEMO_DATA [ 0 ][ 'id' ]) },
69+ route_params = {"id" : inserted_activity [ "id" ] },
7570 )
7671
7772 response = azure_activities ._get_activities .get_activities (req )
7873 activitiy_json_data = response .get_body ().decode ("utf-8" )
7974
8075 assert response .status_code == 200
81- assert activitiy_json_data == json .dumps (DEMO_DATA [ 0 ] )
76+ assert activitiy_json_data == json .dumps (inserted_activity )
8277
8378
8479def test__activity_azure_endpoint__returns_an_activity_with_inactive_status__when_an_activity_matching_its_id_is_found (
85- create_fake_database ,
86- ):
87- azure_activities ._delete_activity .DATABASE = create_fake_database
80+ create_fake_database ,activity_factory , insert_activity
81+ ):
82+ fake_database = create_fake_database
83+ existent_activity = activity_factory (DEMO_DATA [0 ])
84+ inserted_activity = insert_activity (existent_activity .__dict__ , fake_database ).__dict__
85+
86+ azure_activities ._delete_activity .DATABASE = fake_database
8887 req = func .HttpRequest (
8988 method = 'DELETE' ,
9089 body = None ,
9190 url = ACTIVITY_URL ,
92- route_params = {"id" : str ( DEMO_DATA [ 0 ][ 'id' ]) },
91+ route_params = {"id" : inserted_activity [ "id" ] },
9392 )
9493
9594 response = azure_activities ._delete_activity .delete_activity (req )
9695 activity_json_data = json .loads (response .get_body ().decode ("utf-8" ))
9796
9897 assert response .status_code == 200
99- assert activity_json_data ['status' ] == 'inactive'
98+ assert activity_json_data ['status' ] == 0
99+ assert activity_json_data ['deleted' ] == True
100100
101101
102102def test__update_activity_azure_endpoint__returns_an_activity__when_found_an_activity_to_update (
103- create_fake_database ,
103+ create_fake_database , activity_factory , insert_activity
104104):
105- azure_activities ._update_activity .DATABASE = create_fake_database
105+ fake_database = create_fake_database
106+ existent_activity = activity_factory (DEMO_DATA [0 ])
107+ inserted_activity = insert_activity (existent_activity .__dict__ , fake_database ).__dict__
108+
109+ azure_activities ._update_activity .DATABASE = fake_database
106110 activity_body = {"description" : Faker ().sentence ()}
107111 req = func .HttpRequest (
108112 method = 'PUT' ,
109113 body = json .dumps (activity_body ).encode ("utf-8" ),
110114 url = ACTIVITY_URL ,
111- route_params = {"id" : str ( DEMO_DATA [ 0 ][ 'id' ]) },
115+ route_params = {"id" : inserted_activity [ "id" ] },
112116 )
113117
114118 response = azure_activities ._update_activity .update_activity (req )
115119 activitiy_json_data = response .get_body ().decode ("utf-8" )
116- new_activity = { ** DEMO_DATA [ 0 ], ** activity_body }
120+ inserted_activity . update ( activity_body )
117121
118122 assert response .status_code == 200
119- assert activitiy_json_data == json .dumps (new_activity )
123+ assert activitiy_json_data == json .dumps (inserted_activity )
124+
120125
121126def test__activity_azure_endpoint__creates_an_activity__when_activity_has_all_attributes (
122127 create_fake_database ,
123128 ):
124129 azure_activities ._create_activity .DATABASE = create_fake_database
125-
126- activity_body = {'id' : None , 'name' : Faker ().user_name (), 'description' : Faker ().sentence (),'deleted' : Faker ().uuid4 () ,'status' : 'active' , 'tenant_id' : Faker ().uuid4 ()}
130+ activity_body = {'id' : None , 'name' : Faker ().user_name (), 'description' : Faker ().sentence (),'deleted' : False ,'status' : 1 }
127131 body = json .dumps (activity_body ).encode ("utf-8" )
128132 req = func .HttpRequest (
129133 method = 'POST' ,
130134 body = body ,
131135 url = ACTIVITY_URL ,
132136 )
133137
134-
135138 response = azure_activities ._create_activity .create_activity (req )
136139 activitiy_json_data = json .loads (response .get_body ())
137140 activity_body ['id' ] = activitiy_json_data ['id' ]
141+
138142 assert response .status_code == 201
139143 assert activitiy_json_data == activity_body
0 commit comments