Skip to content

Commit 8bb5ff0

Browse files
committed
[#59] DeleteFolderUseCase 테스트 코드 검증 방식 변경
1 parent b5b89a9 commit 8bb5ff0

File tree

2 files changed

+164
-7
lines changed

2 files changed

+164
-7
lines changed

Mark-In-Tests/Test/UseCase/DeleteFolderUseCaseTests.swift

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,159 @@ import Testing
1010
@testable import Mark_In
1111

1212
struct 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 {

Mark-In/Sources/App/AuthUserManager.swift

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,17 @@ final class AuthUserManagerImpl: AuthUserManager {
6161
final class StubAuthUserManager: AuthUserManager {
6262
var user: AuthUser?
6363

64-
init(userID: String) {
65-
self.user = .init(
66-
id: userID,
67-
name: userID,
68-
email: "\(userID)@test.com",
69-
provider: .apple
70-
)
64+
init(userID: String?) {
65+
if let userID {
66+
self.user = .init(
67+
id: userID,
68+
name: userID,
69+
email: "\(userID)@test.com",
70+
provider: .apple
71+
)
72+
} else {
73+
self.user = nil
74+
}
7175
}
7276

7377
func save(_ user: AuthUser) { }

0 commit comments

Comments
 (0)