Skip to content

Commit b23a99c

Browse files
authored
Merge pull request #24 from PythonFloripa:feature/#11
Feature/#11
2 parents 1ec18e5 + 18ba320 commit b23a99c

File tree

7 files changed

+110
-22
lines changed

7 files changed

+110
-22
lines changed
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from app.services.database.models.communities import Community
22
from app.services.database.models.libraries import Library
3+
from app.services.database.models.news import News
34
from app.services.database.models.subscriptions import Subscription
45

5-
__all__ = ["Community", "Library", "Subscription"]
6+
7+
__all__ = ["Community", "Library","News", "Subscription"]

app/services/database/models/news.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from datetime import datetime
2+
from typing import Optional
3+
4+
from sqlmodel import Field, SQLModel
5+
6+
7+
class News(SQLModel, table=True):
8+
__tablename__ = "news"
9+
10+
# Campos obrigatórios e suas definições
11+
id: Optional[int] = Field(default=None, primary_key=True)
12+
title: str
13+
content: str
14+
category: str
15+
user_email: str
16+
source_url: str
17+
tags: str
18+
social_media_url: str
19+
likes: int = Field(default=0)
20+
21+
# Chaves estrangeiras
22+
community_id: Optional[int] = Field(
23+
default=None,
24+
foreign_key="communities.id")
25+
# library_id: Optional[int]=Field(default=None, foreign_key="libraries.id")
26+
27+
# Campos de data/hora
28+
created_at: Optional[datetime] = Field(default_factory=datetime.now)
29+
updated_at: Optional[datetime] = Field(
30+
default_factory=datetime.now,
31+
sa_column_kwargs={"onupdate": datetime.now}
32+
)

tests/conftest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,13 @@ async def get_db_session_test() -> AsyncGenerator[AsyncSession, None]:
4040
async def setup_database():
4141
async with test_engine.begin() as conn:
4242
await conn.run_sync(SQLModel.metadata.create_all)
43+
yield test_engine
4344

4445

4546
@pytest_asyncio.fixture(scope="function")
4647
async def session() -> AsyncGenerator[AsyncSession, None]:
4748
async_session_generator = get_db_session_test()
48-
session = await anext(async_session_generator)
49+
session = await anext(async_session_generator) # noqa: F821
4950
yield session
5051
await session.close()
5152

tests/test_communities.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
import pytest
2-
2+
from services.database.models import Community
33
from sqlmodel import select
44
from sqlmodel.ext.asyncio.session import AsyncSession
55

6-
from services.database.models import Community
7-
86

97
@pytest.mark.asyncio
108
async def test_insert_communities(session: AsyncSession):

tests/test_database.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1-
# Test cases for database SQLite using in memory database fixture from conftest.py
2-
#
1+
"""
2+
Test cases for database SQLite using in memory
3+
database fixture from conftest.py
4+
"""

tests/test_libraries.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import pytest
22
import pytest_asyncio
3-
3+
from services.database.models import Community, Library
44
from sqlmodel import select
55
from sqlmodel.ext.asyncio.session import AsyncSession
66

7-
from services.database.models import Community
8-
from services.database.models import Library
97

108
@pytest_asyncio.fixture
119
async def community(session: AsyncSession):
@@ -15,25 +13,26 @@ async def community(session: AsyncSession):
1513
await session.refresh(community)
1614
return community
1715

16+
1817
@pytest.mark.asyncio
1918
async def test_insert_libraries(session: AsyncSession, community: Community):
20-
library = Library(
19+
library = Library(
2120
library_name="DevOps",
2221
user_email="[email protected]",
2322
releases_url="http://teste.com",
2423
logo="logo",
2524
community_id=community.id,
2625
)
27-
session.add(library)
28-
await session.commit()
26+
session.add(library)
27+
await session.commit()
2928

30-
statement = select(Library).where(Library.library_name == "DevOps")
31-
result = await session.exec(statement)
32-
found = result.first()
29+
statement = select(Library).where(Library.library_name == "DevOps")
30+
result = await session.exec(statement)
31+
found = result.first()
3332

34-
assert found is not None
35-
assert found.library_name == "DevOps"
36-
assert found.user_email == "[email protected]"
37-
assert found.releases_url == "http://teste.com"
38-
assert found.logo == "logo"
39-
assert found.community_id == community.id
33+
assert found is not None
34+
assert found.library_name == "DevOps"
35+
assert found.user_email == "[email protected]"
36+
assert found.releases_url == "http://teste.com"
37+
assert found.logo == "logo"
38+
assert found.community_id == community.id

tests/test_news.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,64 @@
1+
from datetime import datetime
12
from typing import Mapping
23

34
import pytest
5+
import pytest_asyncio
46
from fastapi import status
57
from httpx import AsyncClient
8+
from services.database.models import Community, News
9+
from sqlmodel import select
10+
from sqlmodel.ext.asyncio.session import AsyncSession
611

712

13+
@pytest_asyncio.fixture
14+
async def community(session: AsyncSession):
15+
community = Community(username="admin", email="[email protected]", password="123")
16+
session.add(community)
17+
await session.commit()
18+
await session.refresh(community)
19+
return community
20+
21+
22+
@pytest.mark.asyncio
23+
async def test_insert_news(session: AsyncSession, community: Community):
24+
"""
25+
Testa a inserção de uma notícia no banco de dados.
26+
"""
27+
news = News(
28+
title="Python 3.12 Lançado!",
29+
content="A nova versão do Python traz melhorias ...",
30+
category="release",
31+
user_email="[email protected]",
32+
source_url="https://python.org/news",
33+
tags="python, release, programming",
34+
social_media_url="https://linkedin.com/pythonista",
35+
community_id=community.id, # Usando o ID da comunidade do fixture
36+
)
37+
session.add(news)
38+
await session.commit()
39+
40+
statement = select(News).where(News.title == "Python 3.12 Lançado!")
41+
result = await session.exec(statement)
42+
found_news = result.first()
43+
44+
assert found_news is not None
45+
assert found_news.title == "Python 3.12 Lançado!"
46+
assert found_news.content == "A nova versão do Python traz melhorias ..."
47+
assert found_news.category == "release"
48+
assert found_news.user_email == "[email protected]"
49+
assert found_news.source_url == "https://python.org/news"
50+
assert found_news.tags == "python, release, programming"
51+
assert found_news.social_media_url == "https://linkedin.com/pythonista"
52+
assert found_news.likes == 0
53+
assert found_news.community_id == community.id
54+
assert isinstance(found_news.created_at, datetime)
55+
assert isinstance(found_news.updated_at, datetime)
56+
assert found_news.created_at <= datetime.now()
57+
assert found_news.updated_at >= found_news.created_at
58+
59+
60+
# ADD like test case for News model
61+
862
@pytest.mark.asyncio
963
async def test_news_endpoint(
1064
async_client: AsyncClient, mock_headers: Mapping[str, str]

0 commit comments

Comments
 (0)