Skip to content

complete the task with update the python file #9

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 67 additions & 2 deletions app.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

from flask import Flask, jsonify, request, Response
import mockdb.mockdb_interface as db
from mockdb.dummy_data import initial_db_state

db_state = initial_db_state


app = Flask(__name__)

Expand All @@ -10,7 +14,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
Expand Down Expand Up @@ -52,8 +56,69 @@ def mirror(name):
return create_response(data)


# TODO: Implement the rest of the API here!
@app.get("/users")
def getAllUsers():
team = request.args.get("team")
if team:
return create_response(
{"users": list(filter(lambda x: x["team"] == team, db.get("users")))}
)
return create_response({"users": db.get("users")})


@app.get("/users/<int:id>")
def getUserById(id):
data = {"user": db.getById("users", id)}
if data["user"]:
return create_response(data)
return create_response(None, 404, "id:{id} is not exist".format(id=id))


@app.post("/users")
def addUser():
data = request.get_json()
state = list(filter(lambda x: x not in data, ["name", "team", "age"]))
if not bool(state):
state = list(
filter(
lambda x: x in ["name", "team", "age"] and bool(data[x]) == False, data
)
)
if not bool(state):
req = {"newUser": db.create("users", request.get_json())}
db.updateUsersData()
return create_response(req, 201)
return create_response(
None,
422,
"Name, age and team must be entered and the following data was not entered:{state}".format(
state=state
),
)


@app.put("/users/<int:id>")
def updateUser(id):
data = request.get_json()
req = {"user": db.updateById("users", id, data)}
if req["user"]:
db.updateUsersData()
return create_response(req)
return create_response(None, 404, "id:{id} is not exist".format(id=id))


@app.delete("/users/<int:id>")
def deleteUser(id):
if db.getById("users", id):
data = {"users": db.deleteById("users", id)}
db.updateUsersData()
return create_response(
None, 200, "The user with id:{id} was deleted".format(id=id)
)
return create_response(None, 404, "id:{id} is not exist".format(id=id))


# TODO: Implement the rest of the API here!
"""
~~~~~~~~~~~~ END API ~~~~~~~~~~~~
"""
Expand Down
2 changes: 1 addition & 1 deletion conftest.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pytest


@pytest.fixture("session")
@pytest.fixture
def client():
from app import app

Expand Down
9 changes: 1 addition & 8 deletions mockdb/dummy_data.py
Original file line number Diff line number Diff line change
@@ -1,8 +1 @@
initial_db_state = {
"users": [
{"id": 1, "name": "Aria", "age": 19, "team": "LWB"},
{"id": 2, "name": "Tim", "age": 20, "team": "LWB"},
{"id": 3, "name": "Varun", "age": 23, "team": "NNB"},
{"id": 4, "name": "Alex", "age": 24, "team": "C2TC"},
]
}
initial_db_state={'users': [{'id': 1, 'name': 'Aria', 'age': 30, 'team': 'LWB'}, {'id': 2, 'name': 'Tim', 'age': 20, 'team': 'LWB'}, {'id': 3, 'name': 'Varun', 'age': 23, 'team': 'NNB'}, {'age': 20, 'name': 'Aria', 'team': 'LWB', 'id': 5}, {'age': 30, 'name': 'Aria', 'team': 'LWB', 'id': 6}, {'age': 19, 'name': 'Aria', 'team': 'LWB', 'id': 7}]}
5 changes: 5 additions & 0 deletions mockdb/mockdb_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,8 @@ def updateById(type, id, update_values):

def deleteById(type, id):
db_state[type] = [i for i in get(type) if i["id"] != id]


def updateUsersData():
with open("./mockdb/dummy_data.py", "w") as file:
file.write("initial_db_state=" + str(db_state))
79 changes: 73 additions & 6 deletions test_app.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@

# pytest automatically injects fixtures
# that are defined in conftest.py
# in this case, client is injected
from flask import json


def test_index(client):
res = client.get("/")
assert res.status_code == 200
Expand All @@ -17,25 +19,90 @@ def test_mirror(client):
def test_get_users(client):
res = client.get("/users")
assert res.status_code == 200

res_users = res.json["result"]["users"]
assert len(res_users) == 4
assert res_users[0]["name"] == "Aria"


def tests_get_users_with_team(client):
res = client.get("/users?team=LWB")
assert res.status_code == 200

res_users = res.json["result"]["users"]
assert len(res_users) == 2
assert res_users[1]["name"] == "Tim"


def test_get_user_id(client):
res = client.get("/users/1")
assert res.status_code == 200

res_user = res.json["result"]["user"]
assert res_user["name"] == "Aria"
assert res_user["age"] == 19


def test_get_user_id_not_exist(client):
res = client.get("/users/6")
assert res.status_code == 404
assert res.json["result"] == None
assert res.json["message"] == "id:6 is not exist"
assert res.json["success"] == False


def test_add_user(client):
res = client.post(
"/users",
headers={"Content-Type": "application/json"},
data=json.dumps({"age": 20, "name": "Aria", "team": "LWB"}),
)
assert res.status_code == 201
res_user = res.json["result"]["newUser"]
assert res_user["name"] == "Aria"
assert res_user["age"] == 20


def test_add_user_Missing_or_incorrect_data(client):
res = client.post(
"/users",
headers={"Content-Type": "application/json"},
data=json.dumps({"name": "Aria", "team": "LWB"}),
)
assert res.status_code == 422
assert res.json["result"] == None
assert bool(res.json["message"])


def test_update_user_id(client):
res = client.put(
"users/1",
headers={"Content-Type": "application/json"},
data=json.dumps({"age": 30}),
)
assert res.status_code == 200
res_user = res.json["result"]["user"]
assert res_user["age"] == 30
assert res_user["name"] == "Aria"


def test_update_user_id_not_exist(client):
res = client.put(
"/users/6",
headers={"Content-Type": "application/json"},
data=json.dumps({"age": 30}),
)
assert res.status_code == 404
assert res.json["result"] == None
assert res.json["message"] == "id:6 is not exist"
assert res.json["success"] == False


def test_delete_user_id(client):
res = client.delete("/users/4")
assert res.status_code == 200
assert res.json["success"] == True
assert res.json["message"] == "The user with id:4 was deleted"


def test_delete_user_id_not_exist(client):
res = client.delete("/users/10")
assert res.status_code == 404
assert res.json["result"] == None
assert res.json["message"] == "id:10 is not exist"
assert res.json["success"] == False