From 0d8a9d59086714e1745c8565725f4939eddce08e Mon Sep 17 00:00:00 2001 From: Shaindy Borzikowsky Date: Thu, 18 May 2023 14:25:43 +0300 Subject: [PATCH] upload code --- app.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++-- conftest.py | 2 +- test_app.py | 38 +++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 3 deletions(-) diff --git a/app.py b/app.py index 314e633..5e93ad0 100644 --- a/app.py +++ b/app.py @@ -10,7 +10,7 @@ def create_response( data: dict = None, status: int = 200, message: str = "" ) -> Tuple[Response, int]: """Wraps response in a consistent format throughout the API. - + Format inspired by https://medium.com/@shazow/how-i-design-json-api-responses-71900f00f2db Modifications included: - make success a boolean since there's only 2 values @@ -41,6 +41,11 @@ def create_response( """ +def update_db(): + with open('mockdb/dummy_data.py', 'w')as f: + f.writelines("initial_db_state = "+str(db.db_state)) + + @app.route("/") def hello_world(): return create_response({"content": "hello world!"}) @@ -52,7 +57,55 @@ def mirror(name): return create_response(data) -# TODO: Implement the rest of the API here! +@app.route("/users", methods=['GET']) +def all_users(): + data = db.get("users") + if (request.args.get('team')): + team = request.args.get('team') + data = (list(filter(lambda x: x["team"] == team, data))) + return create_response({"users": data}) + + +@app.route("/users/") +def user_by_id(id): + data = db.getById("users", int(id)) + if (data == None): + return create_response(status=404, message="The user does not exist yet") + return create_response({"user": data}) + + +@app.route("/users", methods=['POST']) +def create_new_user(): + user_data = request.get_json() + required_fields = ["name", "age", "team"] + if not all(field in user_data for field in required_fields): + return create_response({"error": "Missing required fields"}, 400) + data = db.create("users", user_data) + update_db() + return create_response(data) + + +@app.route("/users//", methods=['PUT']) +def update_user(id): + user_data = request.get_json() + required_fields = ["name", "age", "team"] + if not all(field in user_data for field in required_fields): + return create_response({"error": "Missing required fields"}, 400) + data = db.updateById("users", int(id), user_data) + if (data == None): + return create_response(status=404, message="The user does not exist yet") + update_db() + return create_response(data) + + +@app.route("/users/", methods=['DELETE']) +def delete_user(id): + if (db.getById("users", int(id)) == None): + return create_response(status=404, message="The user does not exist yet") + db.deleteById("users", int(id)) + update_db() + return create_response(message="User deleted successfully!") + """ ~~~~~~~~~~~~ END API ~~~~~~~~~~~~ diff --git a/conftest.py b/conftest.py index e919768..aa0ad9c 100644 --- a/conftest.py +++ b/conftest.py @@ -1,7 +1,7 @@ import pytest -@pytest.fixture("session") +@pytest.fixture(scope="session") def client(): from app import app diff --git a/test_app.py b/test_app.py index 586aba5..c2fddb8 100644 --- a/test_app.py +++ b/test_app.py @@ -39,3 +39,41 @@ def test_get_user_id(client): res_user = res.json["result"]["user"] assert res_user["name"] == "Aria" assert res_user["age"] == 19 + + +def test_create_new_user(client): + user_data = { + "name": "John", + "age": 30, + "team": "LWB" + } + res = client.post("/users", json=user_data) + assert res.status_code == 200 + + res_data = res.json["result"] + assert res_data["name"] == "John" + assert res_data["age"] == 30 + assert res_data["team"] == "LWB" + + +def test_create_new_user(client): + user_data = { + "name": "John", + "age": 30, + "team": "LWB" + } + res = client.post("/users", json=user_data) + assert res.status_code == 200 + + res_data = res.json["result"] + assert res_data["name"] == "John" + assert res_data["age"] == 30 + assert res_data["team"] == "LWB" + + +def test_delete_user(client): + res = client.delete("/users/1") + assert res.status_code == 200 + + res_data = res.json + assert res_data["message"] == "User deleted successfully!"