Skip to content

Commit 9ac9d0a

Browse files
improve tests for like endpoint
1 parent 1b6fbf0 commit 9ac9d0a

File tree

2 files changed

+24
-33
lines changed

2 files changed

+24
-33
lines changed

app/routers/news/routes.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1+
import os
12
from typing import Annotated
23

4+
import jwt
35
from fastapi import APIRouter, Depends, Request, status
46
from fastapi.params import Header
57
from pydantic import BaseModel
68

9+
import app.services.database.orm.news as orm_news
710
from app.routers.authentication import get_current_active_community
811
from app.schemas import News
912
from app.services.database.models import Community as DBCommunity
10-
import app.services.database.orm.news as orm_news
11-
12-
import os
13-
import jwt
1413

1514
SECRET_KEY = os.getenv("SECRET_KEY", "default_fallback_key")
1615
ALGORITHM = os.getenv("ALGORITHM", "HS256")
@@ -28,13 +27,16 @@ class NewsGetResponse(BaseModel):
2827
class NewsLikeResponse(BaseModel):
2928
total_likes: int | None
3029

30+
3131
class LikeRequest(BaseModel):
3232
email: str
3333

34+
3435
def encode_email(email: str) -> str:
3536
"""Encodes the email to be safely stored in database."""
3637
return jwt.encode({"email": email}, SECRET_KEY, algorithm=ALGORITHM)
3738

39+
3840
def setup():
3941
router = APIRouter(prefix="/news", tags=["news"])
4042

tests/test_news.py

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ async def test_news_integration(
288288

289289

290290
@pytest.mark.asyncio
291-
async def test_insert_news_likes_endpoint(
291+
async def test_news_likes_endpoint(
292292
session: AsyncSession,
293293
async_client: AsyncClient,
294294
community: Community,
@@ -312,63 +312,52 @@ async def test_insert_news_likes_endpoint(
312312
assert stored_news is not None
313313
assert stored_news.likes == 0
314314

315-
email = "like@test.com"
315+
emails = ["like@test.com", "like2@test.com"]
316316

317+
# Add likes
317318
response = await async_client.post(
318319
f"/api/news/{stored_news.id}/like",
319-
json={"email": email},
320+
json={"email": emails[0]},
320321
headers=valid_auth_headers,
321322
)
322323
assert response.status_code == status.HTTP_200_OK
323324
statement = select(News).where(News.title == news_data["title"])
324325
result = await session.exec(statement)
325326
stored_news = result.first()
326327
assert stored_news.likes == 1
327-
assert stored_news.user_email_list == f"['{encode_email(email)}']"
328+
assert stored_news.user_email_list == f"['{encode_email(emails[0])}']"
328329

329-
330-
@pytest.mark.asyncio
331-
async def test_delete_news_likes_endpoint(
332-
session: AsyncSession,
333-
async_client: AsyncClient,
334-
community: Community,
335-
valid_auth_headers: Mapping[str, str],
336-
):
337-
news_data = {
338-
"title": "Test News",
339-
"content": "Test news content.",
340-
"category": "test_category",
341-
"tags": "test_tag",
342-
"source_url": "https://example.com/test-news",
343-
"social_media_url": "https://test.com/test_news",
344-
}
345330
response = await async_client.post(
346-
"/api/news", json=news_data, headers=valid_auth_headers
331+
f"/api/news/{stored_news.id}/like",
332+
json={"email": emails[1]},
333+
headers=valid_auth_headers,
347334
)
348335
assert response.status_code == status.HTTP_200_OK
349336
statement = select(News).where(News.title == news_data["title"])
350337
result = await session.exec(statement)
351338
stored_news = result.first()
352-
assert stored_news is not None
353-
assert stored_news.likes == 0
354-
355-
email = "like@test.com"
339+
assert stored_news.likes == 2
340+
assert (
341+
stored_news.user_email_list
342+
== f"['{encode_email(emails[0])}', '{encode_email(emails[1])}']"
343+
)
356344

357-
response = await async_client.post(
345+
# Remove likes
346+
response = await async_client.delete(
358347
f"/api/news/{stored_news.id}/like",
359-
json={"email": email},
348+
params={"email": emails[0]},
360349
headers=valid_auth_headers,
361350
)
362351
assert response.status_code == status.HTTP_200_OK
363352
statement = select(News).where(News.title == news_data["title"])
364353
result = await session.exec(statement)
365354
stored_news = result.first()
366355
assert stored_news.likes == 1
367-
assert stored_news.user_email_list == f"['{encode_email(email)}']"
356+
assert stored_news.user_email_list == f"['{encode_email(emails[1])}']"
368357

369358
response = await async_client.delete(
370359
f"/api/news/{stored_news.id}/like",
371-
params={"email": email},
360+
params={"email": emails[1]},
372361
headers=valid_auth_headers,
373362
)
374363
assert response.status_code == status.HTTP_200_OK

0 commit comments

Comments
 (0)