Skip to content

Commit 566fe49

Browse files
authored
chore: 세미나 api 테스트 코드 작성 (#101)
* 세미나 API에 대해 테스트 코드를 추가했습니다. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - Tests - Added comprehensive tests for seminar management, covering creation, retrieval (active, all, by ID), and updates to ensure correct behavior and data integrity. - Introduced reusable test fixtures to standardize test setup and improve consistency. - Expanded coverage across active and inactive scenarios to increase reliability. - Chores - No user-facing changes; improvements focus on test robustness and maintainability. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 parent cfd69e8 commit 566fe49

2 files changed

Lines changed: 165 additions & 0 deletions

File tree

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
from typing import List
2+
3+
import pytest
4+
from sqlalchemy.orm import Session
5+
6+
from wacruit.src.apps.seminar.models import Seminar
7+
from wacruit.src.apps.seminar.models import SeminarType
8+
from wacruit.src.apps.seminar.repositories import SeminarRepository
9+
from wacruit.src.apps.seminar.schemas import CreateSeminarRequest
10+
from wacruit.src.apps.seminar.schemas import UpdateSeminarRequest
11+
from wacruit.src.apps.seminar.services import SeminarService
12+
from wacruit.src.database.connection import Transaction
13+
14+
15+
@pytest.fixture
16+
def created_active_seminar(db_session: Session) -> Seminar:
17+
seminar = Seminar(
18+
seminar_type=SeminarType("FASTAPI"),
19+
curriculum_info="FastAPI curriculum",
20+
prerequisite_info="Python",
21+
is_active=True,
22+
)
23+
db_session.add(seminar)
24+
db_session.commit()
25+
26+
return seminar
27+
28+
29+
@pytest.fixture
30+
def created_not_active_seminar(db_session: Session) -> Seminar:
31+
seminar = Seminar(
32+
seminar_type=SeminarType("SPRING"),
33+
curriculum_info="Spring curriculum",
34+
prerequisite_info="Kotlin",
35+
is_active=False,
36+
)
37+
db_session.add(seminar)
38+
db_session.commit()
39+
40+
return seminar
41+
42+
43+
@pytest.fixture
44+
def created_seminars(db_session: Session) -> List[Seminar]:
45+
seminar_list = []
46+
for i in range(5):
47+
seminar = Seminar(
48+
seminar_type=SeminarType("FASTAPI"),
49+
curriculum_info=f"curriculum {i}",
50+
prerequisite_info=f"{i}",
51+
is_active=True,
52+
)
53+
db_session.add(seminar)
54+
seminar_list.append(seminar)
55+
db_session.commit()
56+
57+
return seminar_list
58+
59+
60+
@pytest.fixture
61+
def create_seminar_dto() -> CreateSeminarRequest:
62+
return CreateSeminarRequest(
63+
seminar_type=SeminarType("FASTAPI"),
64+
curriculum_info="New curriculum",
65+
prerequisite_info="Python",
66+
is_active=True,
67+
)
68+
69+
70+
@pytest.fixture
71+
def update_seminar_dto() -> UpdateSeminarRequest:
72+
return UpdateSeminarRequest(
73+
seminar_type=SeminarType("SPRING"),
74+
curriculum_info="Updated curriculum",
75+
prerequisite_info="Kotlin",
76+
is_active=False,
77+
)
78+
79+
80+
@pytest.fixture
81+
def seminar_service(seminar_repository: SeminarRepository) -> SeminarService:
82+
return SeminarService(seminar_repository=seminar_repository)
83+
84+
85+
@pytest.fixture
86+
def seminar_repository(db_session: Session) -> SeminarRepository:
87+
return SeminarRepository(session=db_session, transaction=Transaction(db_session))
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
from typing import List
2+
3+
import pytest
4+
5+
from wacruit.src.apps.seminar.models import Seminar
6+
from wacruit.src.apps.seminar.models import SeminarType
7+
from wacruit.src.apps.seminar.schemas import CreateSeminarRequest
8+
from wacruit.src.apps.seminar.schemas import UpdateSeminarRequest
9+
from wacruit.src.apps.seminar.services import SeminarService
10+
11+
12+
def test_create_seminar(
13+
create_seminar_dto: CreateSeminarRequest, seminar_service: SeminarService
14+
):
15+
res = seminar_service.create_seminar(create_seminar_dto)
16+
17+
assert res.seminar_type == create_seminar_dto.seminar_type
18+
assert res.curriculum_info == create_seminar_dto.curriculum_info
19+
assert res.prerequisite_info == create_seminar_dto.prerequisite_info
20+
assert res.is_active == create_seminar_dto.is_active
21+
22+
23+
def test_get_active_seminar(
24+
created_active_seminar: Seminar,
25+
created_not_active_seminar: Seminar,
26+
seminar_service: SeminarService,
27+
):
28+
res = seminar_service.get_active_seminar()
29+
30+
assert len(res) == 1
31+
assert res[0].id == created_active_seminar.id
32+
assert res[0].seminar_type == created_active_seminar.seminar_type
33+
assert res[0].curriculum_info == created_active_seminar.curriculum_info
34+
assert res[0].prerequisite_info == created_active_seminar.prerequisite_info
35+
assert res[0].is_active == created_active_seminar.is_active
36+
37+
38+
def test_get_all_seminars(
39+
created_seminars: List[Seminar], seminar_service: SeminarService
40+
):
41+
created_size = len(created_seminars)
42+
res = seminar_service.get_all_seminars()
43+
44+
assert len(res) == created_size
45+
46+
for i in range(created_size):
47+
assert res[i].id == created_seminars[i].id
48+
assert res[i].seminar_type == created_seminars[i].seminar_type
49+
assert res[i].curriculum_info == created_seminars[i].curriculum_info
50+
assert res[i].prerequisite_info == created_seminars[i].prerequisite_info
51+
assert res[i].is_active == created_seminars[i].is_active
52+
53+
54+
def test_get_seminar_by_id(
55+
seminar_service: SeminarService, created_active_seminar: Seminar
56+
):
57+
created_id = created_active_seminar.id
58+
res = seminar_service.get_seminar_by_id(created_id)
59+
60+
assert res.id == created_id
61+
assert res.seminar_type == created_active_seminar.seminar_type
62+
assert res.curriculum_info == created_active_seminar.curriculum_info
63+
assert res.prerequisite_info == created_active_seminar.prerequisite_info
64+
assert res.is_active == created_active_seminar.is_active
65+
66+
67+
def test_update_seminar(
68+
seminar_service: SeminarService,
69+
created_active_seminar: Seminar,
70+
update_seminar_dto: UpdateSeminarRequest,
71+
):
72+
created_id = created_active_seminar.id
73+
res = seminar_service.update_seminar(created_id, update_seminar_dto)
74+
75+
assert res.seminar_type == update_seminar_dto.seminar_type
76+
assert res.curriculum_info == update_seminar_dto.curriculum_info
77+
assert res.prerequisite_info == update_seminar_dto.prerequisite_info
78+
assert res.is_active == update_seminar_dto.is_active

0 commit comments

Comments
 (0)