-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDeleteWebPageTests.swift
More file actions
121 lines (104 loc) · 5.16 KB
/
Copy pathDeleteWebPageTests.swift
File metadata and controls
121 lines (104 loc) · 5.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//
// DeleteWebPageTests.swift
// DevLogPresentationTests
//
// Created by opfic on 4/6/26.
//
import Testing
import Foundation
import DevLogDomain
@testable import DevLogPresentation
@MainActor
struct DeleteWebPageTests {
@Test("웹페이지를 삭제하면 항목이 즉시 숨겨지고 되돌리기 토스트가 표시되며 삭제 유스케이스가 호출된다")
func 웹페이지를_삭제하면_항목이_즉시_숨겨지고_되돌리기_토스트가_표시되며_삭제_유스케이스가_호출된다() async throws {
let fetchTodoCategoryPreferencesUseCaseSpy = FetchTodoCategoryPreferencesUseCaseSpy()
let updateTodoCategoryPreferencesUseCaseSpy = UpdateTodoCategoryPreferencesUseCaseSpy()
let addWebPageUseCaseSpy = AddWebPageUseCaseSpy()
let deleteWebPageUseCaseSpy = DeleteWebPageUseCaseSpy()
let undoDeleteWebPageUseCaseSpy = UndoDeleteWebPageUseCaseSpy()
let upsertTodoUseCaseSpy = UpsertTodoUseCaseSpy()
let fetchTodosUseCaseSpy = FetchTodosUseCaseSpy()
let fetchWebPagesUseCaseSpy = FetchWebPagesUseCaseSpy(
webPages: [
WebPage(
title: "OpenAI",
url: URL(string: "https://openai.com")!,
displayURL: URL(string: "https://openai.com")!,
imageURL: nil
)
]
)
let observeNetworkConnectivityUseCaseSpy = ObserveNetworkConnectivityUseCaseSpy()
let homeViewModel = HomeViewModel(
fetchPreferencesUseCase: fetchTodoCategoryPreferencesUseCaseSpy,
updatePreferencesUseCase: updateTodoCategoryPreferencesUseCaseSpy,
addWebPageUseCase: addWebPageUseCaseSpy,
deleteWebPageUseCase: deleteWebPageUseCaseSpy,
undoDeleteWebPageUseCase: undoDeleteWebPageUseCaseSpy,
upsertTodoUseCase: upsertTodoUseCaseSpy,
fetchTodosUseCase: fetchTodosUseCaseSpy,
fetchWebPagesUseCase: fetchWebPagesUseCaseSpy,
networkConnectivityUseCase: observeNetworkConnectivityUseCaseSpy
)
homeViewModel.send(.loadInitialData)
await waitUntil {
!homeViewModel.state.webPages.isEmpty
}
let webPageItem = try #require(homeViewModel.state.webPages.first)
homeViewModel.send(.deleteWebPage(webPageItem))
#expect(homeViewModel.state.webPages.filter { !$0.isHidden }.isEmpty)
#expect(homeViewModel.state.showToast)
await waitUntil {
deleteWebPageUseCaseSpy.calledUrlStrings == ["https://openai.com"]
}
#expect(deleteWebPageUseCaseSpy.calledUrlStrings == ["https://openai.com"])
}
@Test("웹페이지 삭제를 되돌리면 되돌리기 유스케이스가 호출되고 숨김 상태가 해제된다")
func 웹페이지_삭제를_되돌리면_되돌리기_유스케이스가_호출되고_숨김_상태가_해제된다() async throws {
let fetchTodoCategoryPreferencesUseCaseSpy = FetchTodoCategoryPreferencesUseCaseSpy()
let updateTodoCategoryPreferencesUseCaseSpy = UpdateTodoCategoryPreferencesUseCaseSpy()
let addWebPageUseCaseSpy = AddWebPageUseCaseSpy()
let deleteWebPageUseCaseSpy = DeleteWebPageUseCaseSpy()
let undoDeleteWebPageUseCaseSpy = UndoDeleteWebPageUseCaseSpy()
let upsertTodoUseCaseSpy = UpsertTodoUseCaseSpy()
let fetchTodosUseCaseSpy = FetchTodosUseCaseSpy()
let fetchWebPagesUseCaseSpy = FetchWebPagesUseCaseSpy(
webPages: [
WebPage(
title: "OpenAI",
url: URL(string: "https://openai.com")!,
displayURL: URL(string: "https://openai.com")!,
imageURL: nil
)
]
)
let observeNetworkConnectivityUseCaseSpy = ObserveNetworkConnectivityUseCaseSpy()
let homeViewModel = HomeViewModel(
fetchPreferencesUseCase: fetchTodoCategoryPreferencesUseCaseSpy,
updatePreferencesUseCase: updateTodoCategoryPreferencesUseCaseSpy,
addWebPageUseCase: addWebPageUseCaseSpy,
deleteWebPageUseCase: deleteWebPageUseCaseSpy,
undoDeleteWebPageUseCase: undoDeleteWebPageUseCaseSpy,
upsertTodoUseCase: upsertTodoUseCaseSpy,
fetchTodosUseCase: fetchTodosUseCaseSpy,
fetchWebPagesUseCase: fetchWebPagesUseCaseSpy,
networkConnectivityUseCase: observeNetworkConnectivityUseCaseSpy
)
homeViewModel.send(.loadInitialData)
await waitUntil {
!homeViewModel.state.webPages.isEmpty
}
let webPageItem = try #require(homeViewModel.state.webPages.first)
homeViewModel.send(.deleteWebPage(webPageItem))
homeViewModel.send(.undoDeleteWebPage)
await waitUntil {
undoDeleteWebPageUseCaseSpy.calledUrlStrings == ["https://openai.com"]
}
let restoredWebPageItem = try #require(homeViewModel.state.webPages.first {
$0.url.absoluteString == "https://openai.com"
})
#expect(undoDeleteWebPageUseCaseSpy.calledUrlStrings == ["https://openai.com"])
#expect(!restoredWebPageItem.isHidden)
}
}