1
1
import pytest
2
2
import json
3
- import uuid
4
3
from faker import Faker
5
4
6
5
import azure .functions as func
7
6
import sqlalchemy
8
7
from sqlalchemy .sql .sqltypes import Integer
9
8
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
13
12
14
13
ACTIVITY_URL = '/api/activities/'
15
14
18
17
'id' : 1 ,
19
18
'name' : 'Activity Demo create' ,
20
19
'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 ,
24
22
},
25
23
{
26
24
'id' : 2 ,
27
25
'name' : 'Activity Demo create' ,
28
26
'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 ,
32
29
},
33
30
]
34
31
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
52
40
53
41
def test__activity_azure_endpoint__returns_all_activities (
54
- create_fake_database ,
42
+ create_fake_database , activity_factory , insert_activity
55
43
):
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__ ]
58
47
48
+ azure_activities ._get_activities .DATABASE = fake_database
49
+ req = func .HttpRequest (method = 'GET' , body = None , url = ACTIVITY_URL )
59
50
response = azure_activities ._get_activities .get_activities (req )
60
51
activities_json_data = response .get_body ().decode ("utf-8" )
61
52
62
53
assert response .status_code == 200
63
- assert activities_json_data == json .dumps (DEMO_DATA )
54
+ assert activities_json_data == json .dumps (inserted_activities )
64
55
65
56
66
57
def test__activity_azure_endpoint__returns_an_activity__when_activity_matches_its_id (
67
- create_fake_database ,
58
+ create_fake_database , activity_factory , insert_activity
68
59
):
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
70
65
req = func .HttpRequest (
71
66
method = 'GET' ,
72
67
body = None ,
73
68
url = ACTIVITY_URL ,
74
- route_params = {"id" : str ( DEMO_DATA [ 0 ][ 'id' ]) },
69
+ route_params = {"id" : inserted_activity [ "id" ] },
75
70
)
76
71
77
72
response = azure_activities ._get_activities .get_activities (req )
78
73
activitiy_json_data = response .get_body ().decode ("utf-8" )
79
74
80
75
assert response .status_code == 200
81
- assert activitiy_json_data == json .dumps (DEMO_DATA [ 0 ] )
76
+ assert activitiy_json_data == json .dumps (inserted_activity )
82
77
83
78
84
79
def 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
88
87
req = func .HttpRequest (
89
88
method = 'DELETE' ,
90
89
body = None ,
91
90
url = ACTIVITY_URL ,
92
- route_params = {"id" : str ( DEMO_DATA [ 0 ][ 'id' ]) },
91
+ route_params = {"id" : inserted_activity [ "id" ] },
93
92
)
94
93
95
94
response = azure_activities ._delete_activity .delete_activity (req )
96
95
activity_json_data = json .loads (response .get_body ().decode ("utf-8" ))
97
96
98
97
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
100
100
101
101
102
102
def 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
104
104
):
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
106
110
activity_body = {"description" : Faker ().sentence ()}
107
111
req = func .HttpRequest (
108
112
method = 'PUT' ,
109
113
body = json .dumps (activity_body ).encode ("utf-8" ),
110
114
url = ACTIVITY_URL ,
111
- route_params = {"id" : str ( DEMO_DATA [ 0 ][ 'id' ]) },
115
+ route_params = {"id" : inserted_activity [ "id" ] },
112
116
)
113
117
114
118
response = azure_activities ._update_activity .update_activity (req )
115
119
activitiy_json_data = response .get_body ().decode ("utf-8" )
116
- new_activity = { ** DEMO_DATA [ 0 ], ** activity_body }
120
+ inserted_activity . update ( activity_body )
117
121
118
122
assert response .status_code == 200
119
- assert activitiy_json_data == json .dumps (new_activity )
123
+ assert activitiy_json_data == json .dumps (inserted_activity )
124
+
120
125
121
126
def test__activity_azure_endpoint__creates_an_activity__when_activity_has_all_attributes (
122
127
create_fake_database ,
123
128
):
124
129
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 }
127
131
body = json .dumps (activity_body ).encode ("utf-8" )
128
132
req = func .HttpRequest (
129
133
method = 'POST' ,
130
134
body = body ,
131
135
url = ACTIVITY_URL ,
132
136
)
133
137
134
-
135
138
response = azure_activities ._create_activity .create_activity (req )
136
139
activitiy_json_data = json .loads (response .get_body ())
137
140
activity_body ['id' ] = activitiy_json_data ['id' ]
141
+
138
142
assert response .status_code == 201
139
143
assert activitiy_json_data == activity_body
0 commit comments