Coverage for src/tests/modules/club/test_import_members.py: 100%
45 statements
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
1"""Module for testing the use case Import Members."""
3from pathlib import Path
4from typing import Self
6import pytest
8from kwai_bc_club.import_members import (
9 ImportMembers,
10 ImportMembersCommand,
11 MemberImportResult,
12)
13from kwai_bc_club.repositories.country_db_repository import CountryDbRepository
14from kwai_bc_club.repositories.file_upload_db_repository import (
15 FileUploadDbRepository,
16)
17from kwai_bc_club.repositories.file_upload_preview_repository import (
18 FileUploadPreviewRepository,
19)
20from kwai_bc_club.repositories.file_upload_repository import (
21 DuplicateMemberUploadedException,
22)
23from kwai_bc_club.repositories.flemish_member_importer import FlemishMemberImporter
24from kwai_bc_club.repositories.member_db_repository import MemberDbRepository
25from kwai_core.db.database import Database
26from kwai_core.domain.presenter import AsyncPresenter, IterableResult
27from kwai_core.domain.value_objects.owner import Owner
30class DummyPresenter(AsyncPresenter[IterableResult[MemberImportResult]]):
31 """A dummy presenter."""
33 def __init__(self):
34 super().__init__()
35 self._count = 0
37 @property
38 def count(self):
39 """Return the count."""
40 return self._count
42 async def present(
43 self, use_case_result: IterableResult[MemberImportResult]
44 ) -> Self:
45 """Process the result of the use case."""
46 self._count += 1
47 async for _ in use_case_result.iterator:
48 ...
49 return self
52async def test_import_members(database: Database, owner: Owner):
53 """Test the use case Import Members."""
54 filename = (
55 Path(__file__).parent / "repositories" / "data" / "flemish_members_test.csv"
56 )
58 importer = FlemishMemberImporter(
59 str(filename), owner, CountryDbRepository(database)
60 )
62 command = ImportMembersCommand(preview=False)
63 presenter = DummyPresenter()
64 await ImportMembers(
65 importer,
66 FileUploadDbRepository(database),
67 MemberDbRepository(database),
68 presenter,
69 ).execute(command)
71 assert presenter.count > 0, "There should be a member uploaded."
74async def test_import_preview_members(database: Database, owner: Owner):
75 """Test the use case Import Members with preview."""
76 filename = (
77 Path(__file__).parent / "repositories" / "data" / "flemish_members_test.csv"
78 )
80 importer = FlemishMemberImporter(
81 str(filename), owner, CountryDbRepository(database)
82 )
84 command = ImportMembersCommand(preview=True)
85 presenter = DummyPresenter()
86 await ImportMembers(
87 importer,
88 FileUploadPreviewRepository(),
89 MemberDbRepository(database),
90 presenter,
91 ).execute(command)
93 assert presenter.count > 0, "There should be a member uploaded."
96async def test_import_duplicate_members(database: Database, owner: Owner):
97 """Test the use case Import Members."""
98 filename = (
99 Path(__file__).parent
100 / "repositories"
101 / "data"
102 / "flemish_members_duplicate_test.csv"
103 )
105 importer = FlemishMemberImporter(
106 str(filename), owner, CountryDbRepository(database)
107 )
109 command = ImportMembersCommand()
110 presenter = DummyPresenter()
111 with pytest.raises(DuplicateMemberUploadedException):
112 await ImportMembers(
113 importer,
114 FileUploadDbRepository(database),
115 MemberDbRepository(database),
116 presenter,
117 ).execute(command)