Coverage for src/tests/modules/club/test_import_members.py: 100%

33 statements  

« 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.""" 

2 

3from pathlib import Path 

4 

5import pytest 

6 

7from kwai_bc_club.import_members import ( 

8 ImportMembers, 

9 ImportMembersCommand, 

10 MemberImportResult, 

11) 

12from kwai_bc_club.repositories.country_db_repository import CountryDbRepository 

13from kwai_bc_club.repositories.file_upload_db_repository import ( 

14 FileUploadDbRepository, 

15) 

16from kwai_bc_club.repositories.file_upload_preview_repository import ( 

17 FileUploadPreviewRepository, 

18) 

19from kwai_bc_club.repositories.file_upload_repository import ( 

20 DuplicateMemberUploadedException, 

21) 

22from kwai_bc_club.repositories.flemish_member_importer import FlemishMemberImporter 

23from kwai_bc_club.repositories.member_db_repository import MemberDbRepository 

24from kwai_core.db.database import Database 

25from kwai_core.domain.presenter import CountIterableAsyncPresenter 

26from kwai_core.domain.value_objects.owner import Owner 

27 

28 

29async def test_import_members(database: Database, owner: Owner): 

30 """Test the use case Import Members.""" 

31 filename = ( 

32 Path(__file__).parent / "repositories" / "data" / "flemish_members_test.csv" 

33 ) 

34 

35 importer = FlemishMemberImporter( 

36 str(filename), owner, CountryDbRepository(database) 

37 ) 

38 

39 command = ImportMembersCommand(preview=False) 

40 presenter = CountIterableAsyncPresenter[MemberImportResult]() 

41 await ImportMembers( 

42 importer, 

43 FileUploadDbRepository(database), 

44 MemberDbRepository(database), 

45 presenter, 

46 ).execute(command) 

47 

48 assert presenter.count > 0, "There should be a member uploaded." 

49 

50 

51async def test_import_preview_members(database: Database, owner: Owner): 

52 """Test the use case Import Members with preview.""" 

53 filename = ( 

54 Path(__file__).parent / "repositories" / "data" / "flemish_members_test.csv" 

55 ) 

56 

57 importer = FlemishMemberImporter( 

58 str(filename), owner, CountryDbRepository(database) 

59 ) 

60 

61 command = ImportMembersCommand(preview=True) 

62 presenter = CountIterableAsyncPresenter[MemberImportResult]() 

63 await ImportMembers( 

64 importer, 

65 FileUploadPreviewRepository(), 

66 MemberDbRepository(database), 

67 presenter, 

68 ).execute(command) 

69 

70 assert presenter.count > 0, "There should be a member uploaded." 

71 

72 

73async def test_import_duplicate_members(database: Database, owner: Owner): 

74 """Test the use case Import Members.""" 

75 filename = ( 

76 Path(__file__).parent 

77 / "repositories" 

78 / "data" 

79 / "flemish_members_duplicate_test.csv" 

80 ) 

81 

82 importer = FlemishMemberImporter( 

83 str(filename), owner, CountryDbRepository(database) 

84 ) 

85 

86 command = ImportMembersCommand() 

87 presenter = CountIterableAsyncPresenter[MemberImportResult]() 

88 with pytest.raises(DuplicateMemberUploadedException): 

89 await ImportMembers( 

90 importer, 

91 FileUploadDbRepository(database), 

92 MemberDbRepository(database), 

93 presenter, 

94 ).execute(command)