@@ -10,6 +10,159 @@ import Testing
1010@testable import Mark_In
1111
1212struct DeleteFolderUseCaseTests {
13+
14+ @Test
15+ func test_인증된_유저_정보가_없을_때_unauthenticated_에러를_반환한다( ) async throws {
16+ // Given: 준비
17+ let stubAuthUserManager = StubAuthUserManager ( userID: nil )
18+ let mockLinkRepository = MockLinkRepository ( )
19+ let mockFolderRepository = MockFolderRepository ( )
20+
21+ let sut = DeleteFolderUseCaseImpl (
22+ authUserManager: stubAuthUserManager,
23+ linkRepository: mockLinkRepository,
24+ folderRepository: mockFolderRepository
25+ )
26+
27+ // When: 실행
28+ var thrownError : Error ?
29+ do {
30+ try await sut. execute ( folderID: " " , includingChildren: false )
31+ } catch {
32+ thrownError = error
33+ }
34+
35+ // Then: 검증
36+ #expect( thrownError as? AuthError == AuthError . unauthenticated)
37+
38+ // TearDown: 해제
39+
40+ }
41+
42+ @Test
43+ func test_인증된_유저_정보가_있다면_에러를_반환하지_않는다( ) async throws {
44+ // Given: 준비
45+ let stubAuthUserManager = StubAuthUserManager ( userID: " testUser " )
46+ let mockLinkRepository = MockLinkRepository ( )
47+ let mockFolderRepository = MockFolderRepository ( )
48+
49+ let sut = DeleteFolderUseCaseImpl (
50+ authUserManager: stubAuthUserManager,
51+ linkRepository: mockLinkRepository,
52+ folderRepository: mockFolderRepository
53+ )
54+
55+ // When: 실행
56+ var thrownError : Error ?
57+ do {
58+ try await sut. execute ( folderID: " " , includingChildren: false )
59+ } catch {
60+ thrownError = error
61+ }
62+
63+ // Then: 검증
64+ #expect( thrownError as? AuthError == nil )
65+
66+ // TearDown: 해제
67+
68+ }
69+
70+ @Test
71+ func test_includeChildren이_true이면_linkRepository의_deleteAllInFolder를_호출한다( ) async throws {
72+ // Given: 준비
73+ let stubAuthUserManager = StubAuthUserManager ( userID: " testUser " )
74+ let mockLinkRepository = MockLinkRepository ( )
75+ let mockFolderRepository = MockFolderRepository ( )
76+
77+ let sut = DeleteFolderUseCaseImpl (
78+ authUserManager: stubAuthUserManager,
79+ linkRepository: mockLinkRepository,
80+ folderRepository: mockFolderRepository
81+ )
82+
83+ // When: 실행
84+ try await sut. execute ( folderID: " " , includingChildren: true )
85+
86+ // Then: 검증
87+ let deleteAllInFolderCallCount = mockLinkRepository. deleteAllInFolderCallCount
88+ #expect( deleteAllInFolderCallCount == 1 )
89+
90+ // TearDown: 해제
91+
92+ }
93+
94+ @Test
95+ func test_includeChildren이_false이면_linkRepository의_moveLinksInFolder를_호출한다( ) async throws {
96+ // Given: 준비
97+ let stubAuthUserManager = StubAuthUserManager ( userID: " testUser " )
98+ let mockLinkRepository = MockLinkRepository ( )
99+ let mockFolderRepository = MockFolderRepository ( )
100+
101+ let sut = DeleteFolderUseCaseImpl (
102+ authUserManager: stubAuthUserManager,
103+ linkRepository: mockLinkRepository,
104+ folderRepository: mockFolderRepository
105+ )
106+
107+ // When: 실행
108+ try await sut. execute ( folderID: " " , includingChildren: false )
109+
110+ // Then: 검증
111+ let moveLinksInFolderCallCount = mockLinkRepository. moveLinksInFolderCallCount
112+ #expect( moveLinksInFolderCallCount == 1 )
113+
114+ // TearDown: 해제
115+
116+ }
117+
118+ @Test
119+ func test_폴더ID가_존재할_경우_folderRepository의_delete를_호출한다( ) async throws {
120+ // Given: 준비
121+ let stubAuthUserManager = StubAuthUserManager ( userID: " testUser " )
122+ let mockLinkRepository = MockLinkRepository ( )
123+ let mockFolderRepository = MockFolderRepository ( )
124+
125+ let sut = DeleteFolderUseCaseImpl (
126+ authUserManager: stubAuthUserManager,
127+ linkRepository: mockLinkRepository,
128+ folderRepository: mockFolderRepository
129+ )
130+
131+ // When: 실행
132+ try await sut. execute ( folderID: " testFolder " , includingChildren: false )
133+
134+ // Then: 검증
135+ let deleteCallCount = mockFolderRepository. deleteCallCount
136+ #expect( deleteCallCount == 1 )
137+
138+ // TearDown: 해제
139+
140+ }
141+
142+ @Test
143+ func test_폴더ID가_존재하지_않을_경우_folderRepository의_delete를_호출하지_않는다( ) async throws {
144+ // Given: 준비
145+ let stubAuthUserManager = StubAuthUserManager ( userID: " testUser " )
146+ let mockLinkRepository = MockLinkRepository ( )
147+ let mockFolderRepository = MockFolderRepository ( )
148+
149+ let sut = DeleteFolderUseCaseImpl (
150+ authUserManager: stubAuthUserManager,
151+ linkRepository: mockLinkRepository,
152+ folderRepository: mockFolderRepository
153+ )
154+
155+ // When: 실행
156+ try await sut. execute ( folderID: nil , includingChildren: false )
157+
158+ // Then: 검증
159+ let deleteCallCount = mockFolderRepository. deleteCallCount
160+ #expect( deleteCallCount == 0 )
161+
162+ // TearDown: 해제
163+
164+ }
165+
13166
14167 @Test
15168 func test_includingChildren이_true면_링크들을_삭제한다( ) async throws {
0 commit comments