Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 31a021c

Browse files
feat: add unit tests and make new schema for updation
1 parent 7a207c4 commit 31a021c

File tree

7 files changed

+100
-6
lines changed

7 files changed

+100
-6
lines changed

‎main.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from fastapi import FastAPI
22

33
from routes.posts import router
4-
from schemas.schemas import HealthResponse
4+
from schemas.models import HealthResponse
55

66
app = FastAPI()
77

‎requirements.txt‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ aniso8601==7.0.0
33
appdirs==1.4.4
44
async-exit-stack==1.0.1
55
async-generator==1.10
6+
atomicwrites==1.4.0
7+
attrs==20.3.0
68
black==20.8b1
79
certifi==2020年12月5日
810
chardet==4.0.0
@@ -17,15 +19,23 @@ graphql-relay==2.0.1
1719
greenlet==1.0.0
1820
h11==0.12.0
1921
idna==2.10
22+
iniconfig==1.1.1
23+
isort==5.8.0
2024
itsdangerous==1.1.0
2125
Jinja2==2.11.3
2226
MarkupSafe==1.1.1
2327
mypy-extensions==0.4.3
2428
orjson==3.5.2
29+
packaging==20.9
2530
pathspec==0.8.1
31+
pluggy==0.13.1
2632
promise==2.3
2733
psycopg2==2.8.6
34+
py==1.10.0
2835
pydantic==1.8.1
36+
pyparsing==2.4.7
37+
pytest==6.2.3
38+
pytest-dependency==0.5.1
2939
python-decouple==3.4
3040
python-dotenv==0.17.0
3141
python-multipart==0.0.5
@@ -34,7 +44,7 @@ regex==2021年4月4日
3444
requests==2.25.1
3545
Rx==1.6.1
3646
six==1.15.0
37-
SQLAlchemy==1.4.10
47+
SQLAlchemy==1.4.11
3848
starlette==0.13.6
3949
toml==0.10.2
4050
typed-ast==1.4.3

‎routes/posts.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from sqlalchemy.orm import Session
55

66
from database.connection import get_db
7-
from schemas.schemas import DeletePostResponse, Post
7+
from schemas.models import DeletePostResponse, Post, UpdatePost
88
from utils.post_crud import (
99
post_create,
1010
post_delete,
@@ -45,5 +45,5 @@ def delete_post(id, db: Session = Depends(get_db)):
4545

4646

4747
@router.patch("/update", status_code=status.HTTP_200_OK, response_model=Post)
48-
def update_post(post: Post, db: Session = Depends(get_db)):
48+
def update_post(post: UpdatePost, db: Session = Depends(get_db)):
4949
return post_update(db=db, post=post)

‎schemas/schemas.py‎ renamed to ‎schemas/models.py‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,12 @@ class Config:
1919

2020
class DeletePostResponse(BaseModel):
2121
detail: str
22+
23+
24+
class UpdatePost(BaseModel):
25+
id: UUID
26+
title: str
27+
description: str
28+
29+
class Config:
30+
orm_mode = True

‎tests/__init__.py‎

Whitespace-only changes.

‎tests/test_posts.py‎

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import pytest
2+
from fastapi import status
3+
from fastapi.testclient import TestClient
4+
5+
from main import app
6+
7+
client = TestClient(app)
8+
9+
initial_post_title = "Hello"
10+
initial_post_description = "World"
11+
changed_post_description = "From the other side"
12+
13+
14+
@pytest.mark.dependency()
15+
def test_create_post(request):
16+
response = client.post(
17+
"/posts/create",
18+
json={"title": initial_post_title, "description": initial_post_description},
19+
)
20+
assert response.status_code == status.HTTP_201_CREATED
21+
assert response.json()["title"] == "Hello"
22+
assert response.json()["description"] == "World"
23+
request.config.cache.set("post_id", response.json()["id"])
24+
25+
26+
@pytest.mark.dependency(depends=["test_create_post"])
27+
def test_get_all_posts():
28+
response = client.get("/posts/list/all")
29+
assert response.status_code == status.HTTP_200_OK
30+
assert response.json() is not None
31+
32+
33+
@pytest.mark.dependency(depends=["test_create_post"])
34+
def test_get_one_post(request):
35+
post_id = request.config.cache.get("post_id", None)
36+
response = client.get(f"/posts/get/{post_id}")
37+
assert response.status_code == status.HTTP_200_OK
38+
assert response.json()["id"] == post_id
39+
assert response.json()["title"] == initial_post_title
40+
assert (
41+
response.json()["description"] == initial_post_description
42+
or changed_post_description
43+
)
44+
45+
46+
@pytest.mark.dependency(depends=["test_create_post", "test_get_one_post"])
47+
def test_patch_post(request):
48+
post_id = request.config.cache.get("post_id", None)
49+
response = client.patch(
50+
"/posts/update",
51+
json={
52+
"id": post_id,
53+
"title": initial_post_title,
54+
"description": changed_post_description,
55+
},
56+
)
57+
assert response.status_code == status.HTTP_200_OK
58+
assert response.json()["id"] == post_id
59+
assert response.json()["title"] == initial_post_title
60+
assert response.json()["description"] == changed_post_description
61+
62+
63+
@pytest.mark.dependency(
64+
depends=[
65+
"test_create_post",
66+
"test_get_one_post",
67+
"test_patch_post",
68+
"test_get_all_posts",
69+
]
70+
)
71+
def test_delete_post(request):
72+
post_id = request.config.cache.get("post_id", None)
73+
response = client.delete(f"/posts/delete/{post_id}")
74+
assert response.status_code == status.HTTP_200_OK
75+
assert response.json()["detail"] == "Post Deleted"

‎utils/post_crud.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from sqlalchemy.orm import Session
44

55
from database.models import Posts
6-
from schemas.schemas import DeletePostResponse, Post
6+
from schemas.models import DeletePostResponse, Post, UpdatePost
77

88

99
def post_create(db: Session, post: Post):
@@ -22,7 +22,7 @@ def post_get_one(db: Session, id: UUID):
2222
return db.query(Posts).filter_by(id=id).one()
2323

2424

25-
def post_update(db: Session, post: Post):
25+
def post_update(db: Session, post: UpdatePost):
2626
update_query = {Posts.title: post.title, Posts.description: post.description}
2727
db.query(Posts).filter_by(id=post.id).update(update_query)
2828
db.commit()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /