Skip to content

Commit 53f3094

Browse files
committed
fix: Today fetchData 테스트 병렬 호출 검증 안정화
1 parent 4607a37 commit 53f3094

2 files changed

Lines changed: 45 additions & 11 deletions

File tree

Application/DevLogPresentation/Tests/Today/TodayFeatureTestAssertions.swift

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,23 @@ func verifyTodayFetchData<Adapter: TodayStateDriving>(
3535
adapter.todos.count == 5
3636
}
3737

38-
#expect(fetchUseCaseSpy.queries.map(\.dueDateFilter) == [.withDueDate, .withoutDueDate])
39-
#expect(fetchUseCaseSpy.queries.map(\.completionFilter) == [.incomplete, .incomplete])
40-
#expect(fetchUseCaseSpy.queries.map(\.sortTarget) == [.dueDate, .updatedAt])
41-
#expect(fetchUseCaseSpy.queries.map(\.sortOrder) == [.oldest, .latest])
42-
#expect(fetchUseCaseSpy.queries.map(\.pageSize) == [20, 20])
43-
#expect(fetchUseCaseSpy.queries.map(\.fetchAllPages) == [true, true])
44-
#expect(fetchUseCaseSpy.cursors.allSatisfy { $0 == nil })
38+
let queries = await fetchUseCaseSpy.calledQueries()
39+
let queriesByDueDateFilter = Dictionary(
40+
uniqueKeysWithValues: queries.map { ($0.dueDateFilter, $0) }
41+
)
42+
let cursors = await fetchUseCaseSpy.calledCursors()
43+
44+
#expect(queries.count == 2)
45+
#expect(Set(queries.map(\.dueDateFilter)) == Set([.withDueDate, .withoutDueDate]))
46+
#expect(queries.allSatisfy { $0.completionFilter == .incomplete })
47+
#expect(queriesByDueDateFilter[.withDueDate]?.sortTarget == .dueDate)
48+
#expect(queriesByDueDateFilter[.withDueDate]?.sortOrder == .oldest)
49+
#expect(queriesByDueDateFilter[.withoutDueDate]?.sortTarget == .updatedAt)
50+
#expect(queriesByDueDateFilter[.withoutDueDate]?.sortOrder == .latest)
51+
#expect(queries.map(\.pageSize).allSatisfy { $0 == 20 })
52+
#expect(queries.map(\.fetchAllPages).allSatisfy { $0 })
53+
#expect(cursors.count == 2)
54+
#expect(cursors.allSatisfy { $0 == nil })
4555
#expect(adapter.todos.map(\.id) == ["focused", "overdue", "due-soon", "later", "unscheduled"])
4656
#expect(adapter.summaryCounts == [
4757
.all: 5,

Application/DevLogPresentation/Tests/Today/TodayFeatureTestSpies.swift

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ import DevLogDomain
1313
final class TodayFetchTodosUseCaseSpy: FetchTodosUseCase {
1414
var pagesByFilter: [TodoQuery.DueDateFilter: TodoPage]
1515
var error: Error?
16-
private(set) var queries = [TodoQuery]()
17-
private(set) var cursors = [TodoCursor?]()
16+
private let recorder = TodayFetchTodosUseCaseCallRecorder()
1817

1918
init(
2019
pagesByFilter: [TodoQuery.DueDateFilter: TodoPage] = [
@@ -26,15 +25,40 @@ final class TodayFetchTodosUseCaseSpy: FetchTodosUseCase {
2625
}
2726

2827
func execute(_ query: TodoQuery, cursor: TodoCursor?) async throws -> TodoPage {
29-
queries.append(query)
30-
cursors.append(cursor)
28+
await recorder.append(query: query, cursor: cursor)
3129

3230
if let error {
3331
throw error
3432
}
3533

3634
return pagesByFilter[query.dueDateFilter] ?? TodoPage(items: [], nextCursor: nil)
3735
}
36+
37+
func calledQueries() async -> [TodoQuery] {
38+
await recorder.queries()
39+
}
40+
41+
func calledCursors() async -> [TodoCursor?] {
42+
await recorder.cursors()
43+
}
44+
}
45+
46+
private actor TodayFetchTodosUseCaseCallRecorder {
47+
var recordedQueries = [TodoQuery]()
48+
var recordedCursors = [TodoCursor?]()
49+
50+
func append(query: TodoQuery, cursor: TodoCursor?) {
51+
recordedQueries.append(query)
52+
recordedCursors.append(cursor)
53+
}
54+
55+
func queries() -> [TodoQuery] {
56+
recordedQueries
57+
}
58+
59+
func cursors() -> [TodoCursor?] {
60+
recordedCursors
61+
}
3862
}
3963

4064
final class TodayFetchTodoByIdUseCaseSpy: FetchTodoByIdUseCase {

0 commit comments

Comments
 (0)