Skip to content

Commit 3f9d68e

Browse files
committed
Add tests to test_login and test_items
1 parent 3aad3fb commit 3f9d68e

File tree

6 files changed

+82
-5
lines changed

6 files changed

+82
-5
lines changed

.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,4 @@ SENTRY_DSN=
4242

4343
# Configure these with your own Docker registry images
4444
DOCKER_IMAGE_BACKEND=backend
45-
DOCKER_IMAGE_FRONTEND=frontend
45+
DOCKER_IMAGE_FRONTEND=frontend

backend/app/tests/api/routes/test_items.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from sqlmodel import Session
55

66
from app.core.config import settings
7+
from app.models import User
78
from app.tests.utils.item import create_random_item
89

910

@@ -79,6 +80,22 @@ def test_read_items(
7980
assert len(content["data"]) >= 2
8081

8182

83+
def test_read_items_by_normal_user(
84+
client: TestClient, normal_user_token_headers: dict[str, str], db: Session
85+
) -> None:
86+
r = client.get(f"{settings.API_V1_STR}/users/me", headers=normal_user_token_headers)
87+
user = User(**r.json())
88+
create_random_item(db, user)
89+
create_random_item(db, user)
90+
response = client.get(
91+
f"{settings.API_V1_STR}/items/",
92+
headers=normal_user_token_headers,
93+
)
94+
assert response.status_code == 200
95+
content = response.json()
96+
assert len(content["data"]) >= 2
97+
98+
8299
def test_update_item(
83100
client: TestClient, superuser_token_headers: dict[str, str], db: Session
84101
) -> None:

backend/app/tests/api/routes/test_login.py

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55

66
from app.core.config import settings
77
from app.core.security import verify_password
8-
from app.models import User
8+
from app.crud import update_user
9+
from app.models import User, UserUpdate
10+
from app.tests.utils.user import create_user
911
from app.utils import generate_password_reset_token
1012

1113

@@ -21,6 +23,20 @@ def test_get_access_token(client: TestClient) -> None:
2123
assert tokens["access_token"]
2224

2325

26+
def test_get_access_token_inactive_user(client: TestClient, db: Session) -> None:
27+
password = "secretpassword"
28+
user = create_user(db, password=password)
29+
update_user(session=db, db_user=user, user_in=UserUpdate(is_active=False))
30+
31+
login_data = {
32+
"username": user.email,
33+
"password": password,
34+
}
35+
r = client.post(f"{settings.API_V1_STR}/login/access-token", data=login_data)
36+
assert r.status_code == 400
37+
assert r.json() == {"detail": "Inactive user"}
38+
39+
2440
def test_get_access_token_incorrect_password(client: TestClient) -> None:
2541
login_data = {
2642
"username": settings.FIRST_SUPERUSER,
@@ -88,6 +104,39 @@ def test_reset_password(
88104
assert verify_password(data["new_password"], user.hashed_password)
89105

90106

107+
def test_reset_password_no_such_user_email(
108+
client: TestClient, superuser_token_headers: dict[str, str], db: Session
109+
) -> None:
110+
token = generate_password_reset_token(email="[email protected]")
111+
data = {"new_password": "changethis", "token": token}
112+
r = client.post(
113+
f"{settings.API_V1_STR}/reset-password/",
114+
headers=superuser_token_headers,
115+
json=data,
116+
)
117+
assert r.status_code == 404
118+
assert r.json() == {
119+
"detail": "The user with this email does not exist in the system."
120+
}
121+
122+
123+
def test_reset_password_inactive_user(
124+
client: TestClient, superuser_token_headers: dict[str, str], db: Session
125+
) -> None:
126+
127+
user = create_user(db, email=email)
128+
update_user(session=db, db_user=user, user_in=UserUpdate(is_active=False))
129+
token = generate_password_reset_token(email=email)
130+
data = {"new_password": "changethis", "token": token}
131+
r = client.post(
132+
f"{settings.API_V1_STR}/reset-password/",
133+
headers=superuser_token_headers,
134+
json=data,
135+
)
136+
assert r.status_code == 400
137+
assert r.json() == {"detail": "Inactive user"}
138+
139+
91140
def test_reset_password_invalid_token(
92141
client: TestClient, superuser_token_headers: dict[str, str]
93142
) -> None:

backend/app/tests/utils/item.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
from sqlmodel import Session
22

33
from app import crud
4-
from app.models import Item, ItemCreate
4+
from app.models import Item, ItemCreate, User
55
from app.tests.utils.user import create_random_user
66
from app.tests.utils.utils import random_lower_string
77

88

9-
def create_random_item(db: Session) -> Item:
10-
user = create_random_user(db)
9+
def create_random_item(db: Session, user: User = None) -> Item:
10+
if user is None:
11+
user = create_random_user(db)
1112
owner_id = user.id
1213
assert owner_id is not None
1314
title = random_lower_string()

backend/app/tests/utils/user.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,16 @@ def user_authentication_headers(
1919
return headers
2020

2121

22+
def create_user(db: Session, *, email: str = None, password: str = None) -> User:
23+
if email is None:
24+
email = random_email()
25+
if password is None:
26+
password = random_lower_string()
27+
user_in = UserCreate(email=email, password=password)
28+
user = crud.create_user(session=db, user_create=user_in)
29+
return user
30+
31+
2232
def create_random_user(db: Session) -> User:
2333
email = random_email()
2434
password = random_lower_string()

backend/scripts/tests-start.sh

100644100755
File mode changed.

0 commit comments

Comments
 (0)