-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathAgentsTests.swift
90 lines (77 loc) · 2.68 KB
/
AgentsTests.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
86
87
88
89
90
@testable import Coder_Desktop
import Testing
import ViewInspector
import SwiftUI
@Suite(.timeLimit(.minutes(1)))
struct AgentsTests {
let vpn: MockVPNService
let session: MockSession
let sut: Agents<MockVPNService, MockSession>
let view: any View
init() {
vpn = MockVPNService()
session = MockSession()
sut = Agents<MockVPNService, MockSession>()
view = sut.environmentObject(vpn).environmentObject(session)
}
private func createMockAgents(count: Int) -> [Agent] {
return (1 ... count).map {
Agent(
id: UUID(),
name: "a\($0)",
status: .okay,
copyableDNS: "a\($0).example.com",
workspaceName: "w\($0)"
)
}
}
@Test
@MainActor
func agentsWhenVPNOff() throws {
vpn.state = .disabled
#expect(throws: (any Error).self) {
_ = try view.inspect().find(ViewType.ForEach.self)
}
}
@Test
@MainActor
func agentsWhenVPNOn() throws {
vpn.state = .connected
vpn.agents = createMockAgents(count: Theme.defaultVisibleAgents + 2)
let forEach = try view.inspect().find(ViewType.ForEach.self)
#expect(forEach.count == Theme.defaultVisibleAgents)
#expect(throws: Never.self) { try view.inspect().find(link: "a1.coder")}
}
@Test
@MainActor
func showAllToggle() async throws {
vpn.state = .connected
vpn.agents = createMockAgents(count: 7)
try await ViewHosting.host(view) {
try await sut.inspection.inspect { view in
var toggle = try view.find(ViewType.Toggle.self)
#expect(try toggle.labelView().text().string() == "Show All")
#expect(try !toggle.isOn())
try toggle.tap()
toggle = try view.find(ViewType.Toggle.self)
var forEach = try view.find(ViewType.ForEach.self)
#expect(forEach.count == Theme.defaultVisibleAgents + 2)
#expect(try toggle.labelView().text().string() == "Show Less")
try toggle.tap()
toggle = try view.find(ViewType.Toggle.self)
forEach = try view.find(ViewType.ForEach.self)
#expect(try toggle.labelView().text().string() == "Show All")
#expect(forEach.count == Theme.defaultVisibleAgents)
}
}
}
@Test
@MainActor
func noToggleFewAgents() throws {
vpn.state = .connected
vpn.agents = createMockAgents(count: 3)
#expect(throws: (any Error).self) {
_ = try view.inspect().find(ViewType.Toggle.self)
}
}
}