-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
ReportProjectFormViewModelTests.swift
85 lines (65 loc) · 2.32 KB
/
ReportProjectFormViewModelTests.swift
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
@testable import KsApi
@testable import Library
import XCTest
final class ReportProjectFormViewModelTests: TestCase {
// MARK: Computed Properties
private var userEmailSuccessMockService: MockService {
let fetchUserEmailQueryData = GraphAPI.FetchUserEmailQuery
.Data(unsafeResultMap: GraphUserEnvelopeTemplates.userJSONDict)
guard let envelope = UserEnvelope<GraphUserEmail>.userEnvelope(from: fetchUserEmailQueryData) else {
return MockService()
}
let mockService = MockService(
fetchGraphUserEmailResult: .success(envelope)
)
return mockService
}
func testEmailText_AfterFetchingUsersEmail() {
let vm = ReportProjectFormViewModel()
vm.projectID = "123"
vm.projectFlaggingKind = GraphAPI.FlaggingKind.commentDoxxing
withEnvironment(apiService: self.userEmailSuccessMockService) {
let userEmail = CombineTestObserver<String?, Never>()
userEmail.observe(vm.$retrievedEmail)
XCTAssertEqual(userEmail.events.count, 1)
if case let .value(value) = userEmail.events.last {
XCTAssertEqual(value, nil)
}
vm.inputs.viewDidLoad()
self.scheduler.advance()
XCTAssertEqual(userEmail.events.count, 2)
if case let .value(value) = userEmail.events.last {
XCTAssertEqual(value, "nativesquad@ksr.com")
} else {
XCTFail()
}
}
}
func test_submitIsDisabled_untilDetailTextIsNotEmpty() {
let vm = ReportProjectFormViewModel()
vm.projectID = "123"
vm.projectFlaggingKind = GraphAPI.FlaggingKind.commentDoxxing
let saveButtonEnabled = CombineTestObserver<Bool, Never>()
saveButtonEnabled.observe(vm.$saveButtonEnabled)
XCTAssertEqual(saveButtonEnabled.events.count, 1)
if case let .value(value) = saveButtonEnabled.events.last {
XCTAssertEqual(value, false)
} else {
XCTFail()
}
vm.detailsText = "This is my report. I don't like this project very much."
XCTAssertEqual(saveButtonEnabled.events.count, 2)
if case let .value(value) = saveButtonEnabled.events.last {
XCTAssertEqual(value, true)
} else {
XCTFail()
}
vm.detailsText = ""
XCTAssertEqual(saveButtonEnabled.events.count, 3)
if case let .value(value) = saveButtonEnabled.events.last {
XCTAssertEqual(value, false)
} else {
XCTFail()
}
}
}