Skip to content

Commit 059ae0b

Browse files
committed
feat: TT-365 Methos POST activity and create function serverless
1 parent 1d65c1d commit 059ae0b

34 files changed

+379
-286
lines changed

.gitignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ htmlcov/
2323
# virtual environments
2424
.venv
2525

26+
# Dependency directories
27+
node_modules
28+
29+
# Serverless directories
30+
.serverless/
31+
32+
# Azure Functions json config
33+
host.json
34+
local.settings.json
35+
2636
# Files generated for development
2737
.env
2838
timetracker-api-postman-collection.json

V2/serverless.yml

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
service: azure-time-tracker
2+
3+
frameworkVersion: "2"
4+
5+
provider:
6+
name: azure
7+
region: westus2
8+
runtime: python3.8
9+
os: linux
10+
resourceGroup: time-tracker-wus2-dev-nodejs-functions-rg
11+
stage: dev
12+
functionApp:
13+
name: sls-time-tracker
14+
15+
appInsights:
16+
name: sls-time-tracker-ai
17+
18+
storageAccount:
19+
name: slstimetracker
20+
21+
plugins:
22+
- serverless-azure-functions
23+
24+
package:
25+
patterns:
26+
- "!env/**"
27+
- "!.env/**"
28+
- "!local.settings.json"
29+
- "!.vscode/**"
30+
- "!__pycache__/**"
31+
- "!node_modules/**"
32+
- "!.python_packages/**"
33+
- "!.funcignore"
34+
- "!package.json"
35+
- "!package-lock.json"
36+
- "!.gitignore"
37+
- "!.git/**"
38+
39+
functions:
40+
get_activities:
41+
handler: time_entries/interface.get_activities
42+
events:
43+
- http: true
44+
x-azure-settings:
45+
methods:
46+
- GET
47+
route: activities/{id:?}
48+
authLevel: anonymous
49+
50+
create_activity:
51+
handler: time_entries/interface.create_activity
52+
events:
53+
- http: true
54+
x-azure-settings:
55+
methods:
56+
- POST
57+
route: activities/
58+
authLevel: anonymous

V2/source/activities_data.json

Lines changed: 0 additions & 66 deletions
This file was deleted.

V2/source/entry_points/flask_api/__init__.py

Lines changed: 0 additions & 30 deletions
This file was deleted.

V2/source/entry_points/flask_api/activities_endpoints.py

Lines changed: 0 additions & 31 deletions
This file was deleted.

V2/tests/api/api_fixtures.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import json
2+
import pytest
3+
import shutil
4+
5+
6+
@pytest.fixture
7+
def create_temp_activities(tmpdir_factory):
8+
temporary_directory = tmpdir_factory.mktemp("tmp")
9+
json_file = temporary_directory.join("activities.json")
10+
activities = [
11+
{
12+
'id': 'c61a4a49-3364-49a3-a7f7-0c5f2d15072b',
13+
'name': 'Development',
14+
'description': 'Development',
15+
'deleted': 'b4327ba6-9f96-49ee-a9ac-3c1edf525172',
16+
'status': 'active',
17+
'tenant_id': 'cc925a5d-9644-4a4f-8d99-0bee49aadd05',
18+
},
19+
{
20+
'id': '94ec92e2-a500-4700-a9f6-e41eb7b5507c',
21+
'name': 'Management',
22+
'description': 'Description of management',
23+
'deleted': '7cf6efe5-a221-4fe4-b94f-8945127a489a',
24+
'status': 'active',
25+
'tenant_id': 'cc925a5d-9644-4a4f-8d99-0bee49aadd05',
26+
},
27+
{
28+
'id': 'd45c770a-b1a0-4bd8-a713-22c01a23e41b',
29+
'name': 'Operations',
30+
'description': 'Operation activities performed.',
31+
'deleted': '7cf6efe5-a221-4fe4-b94f-8945127a489a',
32+
'status': 'active',
33+
'tenant_id': 'cc925a5d-9644-4a4f-8d99-0bee49aadd05',
34+
},
35+
]
36+
37+
with open(json_file, 'w') as outfile:
38+
json.dump(activities, outfile)
39+
40+
yield activities, json_file
41+
shutil.rmtree(temporary_directory)
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
from time_entries._application._activities import _get_activities , _create_activity
2+
from faker import Faker
3+
4+
import azure.functions as func
5+
import json
6+
7+
8+
def test__activity_azure_endpoint__returns_all_activities(
9+
create_temp_activities,
10+
):
11+
activities_json, tmp_directory = create_temp_activities
12+
_get_activities.JSON_PATH = tmp_directory
13+
req = func.HttpRequest(method='GET', body=None, url='/api/activities')
14+
15+
response = _get_activities.get_activities(req)
16+
activities_json_data = response.get_body().decode("utf-8")
17+
18+
assert response.status_code == 200
19+
assert activities_json_data == json.dumps(activities_json)
20+
21+
22+
def test__activity_azure_endpoint__returns_an_activity__when_activity_matches_its_id(
23+
create_temp_activities,
24+
):
25+
activities_json, tmp_directory = create_temp_activities
26+
_get_activities.JSON_PATH = tmp_directory
27+
req = func.HttpRequest(
28+
method='GET',
29+
body= None,
30+
url='/api/activities/',
31+
route_params={"id": activities_json[0]['id']},
32+
)
33+
34+
response = _get_activities.get_activities(req)
35+
activitiy_json_data = response.get_body().decode("utf-8")
36+
37+
assert response.status_code == 200
38+
assert activitiy_json_data == json.dumps(activities_json[0])
39+
40+
41+
def test__activity_azure_endpoint__creates_an_activity__when_activity_has_all_attributes(
42+
create_temp_activities,
43+
):
44+
activities_json, tmp_directory = create_temp_activities
45+
_create_activity.JSON_PATH = tmp_directory
46+
47+
activity_body = {'id': Faker().uuid4(), 'name': Faker().user_name(), 'description': Faker().sentence(),'deleted': Faker().uuid4() ,'status': 'active', 'tenant_id': Faker().uuid4()}
48+
body = json.dumps(activity_body).encode("utf-8")
49+
req = func.HttpRequest(
50+
method='POST',
51+
body= body,
52+
url='/api/activities/',
53+
)
54+
55+
response = _create_activity.create_activity(req)
56+
activitiy_json_data = response.get_body()
57+
58+
assert response.status_code == 200
59+
assert activitiy_json_data == body
60+

V2/tests/api/flask/activity_endpoints_test.py

Lines changed: 0 additions & 86 deletions
This file was deleted.

V2/tests/conftest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from tests.api.api_fixtures import create_temp_activities

0 commit comments

Comments
 (0)