Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update NetP tests to use Swift concurrency waiter #3632

Merged
merged 1 commit into from
Nov 28, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 18 additions & 19 deletions DuckDuckGoTests/NetworkProtectionStatusViewModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ final class NetworkProtectionStatusViewModelTests: XCTestCase {
}

override func setUpWithError() throws {
throw XCTSkip("Potentially flaky")
try super.setUpWithError()
tunnelController = MockTunnelController()
statusObserver = MockConnectionStatusObserver()
Expand All @@ -57,12 +56,12 @@ final class NetworkProtectionStatusViewModelTests: XCTestCase {
super.tearDown()
}

func testStatusUpdate_connected_setsIsNetPEnabledToTrue() throws {
whenStatusUpdate_connected()
func testStatusUpdate_connected_setsIsNetPEnabledToTrue() async throws {
await whenStatusUpdate_connected()
}

func testStatusUpdate_notConnected_setsIsNetPEnabledToFalse() throws {
whenStatusUpdate_notConnected()
func testStatusUpdate_notConnected_setsIsNetPEnabledToFalse() async throws {
await whenStatusUpdate_notConnected()
}

func testDidToggleNetPToTrue_setsTunnelControllerStateToTrue() async {
Expand All @@ -75,27 +74,27 @@ final class NetworkProtectionStatusViewModelTests: XCTestCase {
XCTAssertEqual(self.tunnelController.didCallStart, false)
}

func testStatusUpdate_connected_setsHeaderTitleToOn() {
func testStatusUpdate_connected_setsHeaderTitleToOn() async {
viewModel.headerTitle = ""
whenStatusUpdate_connected()
await whenStatusUpdate_connected()
XCTAssertEqual(self.viewModel.headerTitle, UserText.netPStatusHeaderTitleOn)
}

func testStatusUpdate_notconnected_setsHeaderTitleToOff() {
func testStatusUpdate_notconnected_setsHeaderTitleToOff() async {
viewModel.headerTitle = ""
whenStatusUpdate_notConnected()
await whenStatusUpdate_notConnected()
XCTAssertEqual(self.viewModel.headerTitle, UserText.netPStatusHeaderTitleOff)
}

func testStatusUpdate_connected_setsStatusImageIDToVPN() {
func testStatusUpdate_connected_setsStatusImageIDToVPN() async {
viewModel.statusImageID = ""
whenStatusUpdate_connected()
await whenStatusUpdate_connected()
XCTAssertEqual(self.viewModel.statusImageID, "VPN")
}

func testStatusUpdate_disconnected_setsStatusImageIDToVPNDisabled() {
func testStatusUpdate_disconnected_setsStatusImageIDToVPNDisabled() async {
viewModel.statusImageID = ""
whenStatusUpdate_notConnected()
await whenStatusUpdate_notConnected()
XCTAssertEqual(self.viewModel.statusImageID, "VPNDisabled")
}

Expand Down Expand Up @@ -183,25 +182,25 @@ final class NetworkProtectionStatusViewModelTests: XCTestCase {

// MARK: - Helpers

private func whenStatusUpdate_connected() {
private func whenStatusUpdate_connected() async {
statusObserver.subject.send(.connected(connectedDate: Date()))
waitFor(condition: self.viewModel.isNetPEnabled)
await waitFor(condition: self.viewModel.isNetPEnabled)
}

private func whenStatusUpdate_notConnected() {
private func whenStatusUpdate_notConnected() async {
let nonConnectedCases: [ConnectionStatus] = [.disconnected, .disconnecting, .notConfigured, .reasserting]
for current in nonConnectedCases {
statusObserver.subject.send(current)
waitFor(condition: !self.viewModel.isNetPEnabled)
await waitFor(condition: !self.viewModel.isNetPEnabled)
}
}

private func waitFor(condition: @escaping @autoclosure () -> Bool) {
private func waitFor(condition: @escaping @autoclosure () -> Bool) async {
let predicate = NSPredicate { _, _ in
condition()
}
let expectation = XCTNSPredicateExpectation(predicate: predicate, object: nil)
wait(for: [expectation], timeout: 20)
await fulfillment(of: [expectation], timeout: 20)
}

private func serverAttributes() -> NetworkProtectionServerInfo.ServerAttributes {
Expand Down
Loading