-
Notifications
You must be signed in to change notification settings - Fork 80
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
PIA-1002: Handle select server from regions list (#64)
* PIA-1002: Connect to selected server * PIA-1002: Navigate back to dashboard view after selecting a server to connect to * PIA-1002: Connect to selected region unit tests
- Loading branch information
1 parent
11c9e89
commit 81a7e19
Showing
13 changed files
with
232 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
30 changes: 30 additions & 0 deletions
30
PIA VPN-tvOS/Shared/Utils/PIALibrary+Protocols/ClientPreferences+Protocols.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
// | ||
// ClientPreferences+Protocols.swift | ||
// PIA VPN-tvOS | ||
// | ||
// Created by Laura S on 1/18/24. | ||
// Copyright © 2024 Private Internet Access Inc. All rights reserved. | ||
// | ||
|
||
import Foundation | ||
import PIALibrary | ||
|
||
protocol ClientPreferencesType { | ||
var selectedServer: ServerType { get set } | ||
} | ||
|
||
extension Client.Preferences: ClientPreferencesType { | ||
var selectedServer: ServerType { | ||
get { | ||
return displayedServer | ||
} | ||
set { | ||
guard let newServer = newValue as? Server else { return } | ||
displayedServer = newServer | ||
// TODO: Verify whether this is necessary | ||
let pendingPreferences = Client.preferences.editable() | ||
pendingPreferences.commit() | ||
} | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
32 changes: 32 additions & 0 deletions
32
PIA VPN-tvOSTests/RegionsList/Mocks/RegionsListUseCaseMock.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
// | ||
// RegionsListUseTypeMock.swift | ||
// PIA VPN-tvOSTests | ||
// | ||
// Created by Laura S on 1/18/24. | ||
// Copyright © 2024 Private Internet Access Inc. All rights reserved. | ||
// | ||
|
||
import Foundation | ||
@testable import PIA_VPN_tvOS | ||
|
||
class RegionsListUseCaseMock: RegionsListUseCaseType { | ||
var getCurrentServersCalled = false | ||
var getCurrentServersCalledAttempt = 0 | ||
var getCurrentServersResult: [ServerType] = [] | ||
func getCurrentServers() -> [ServerType] { | ||
getCurrentServersCalled = true | ||
getCurrentServersCalledAttempt += 1 | ||
return getCurrentServersResult | ||
} | ||
|
||
var selectServerCalled = false | ||
var selectServerCalledAttempt = 0 | ||
var selectServerCalledWithArgument: ServerType? | ||
func select(server: ServerType) { | ||
selectServerCalled = true | ||
selectServerCalledAttempt += 1 | ||
selectServerCalledWithArgument = server | ||
} | ||
|
||
|
||
} |
64 changes: 64 additions & 0 deletions
64
PIA VPN-tvOSTests/RegionsList/RegionsListViewModelTests.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
// | ||
// RegionsListViewModelTests.swift | ||
// PIA VPN-tvOSTests | ||
// | ||
// Created by Laura S on 1/18/24. | ||
// Copyright © 2024 Private Internet Access Inc. All rights reserved. | ||
// | ||
|
||
import Foundation | ||
import XCTest | ||
@testable import PIA_VPN_tvOS | ||
|
||
class RegionsListViewModelTests: XCTestCase { | ||
class Fixture { | ||
let regionsListUseCaseMock = RegionsListUseCaseMock() | ||
let appRouterSpy = AppRouterSpy() | ||
} | ||
|
||
var fixture: Fixture! | ||
var sut: RegionsListViewModel! | ||
|
||
func instantiateSut(with routerAction: AppRouter.Actions) { | ||
sut = RegionsListViewModel(useCase: fixture.regionsListUseCaseMock, onServerSelectedRouterAction: routerAction) | ||
} | ||
|
||
override func setUp() { | ||
fixture = Fixture() | ||
} | ||
|
||
override func tearDown() { | ||
fixture = nil | ||
} | ||
|
||
|
||
func test_regionServer_didSelect() { | ||
// GIVEN that the Regions list is created | ||
instantiateSut(with: .pop(router: fixture.appRouterSpy)) | ||
|
||
// THEN the useCase is called once to fetch the current servers | ||
XCTAssertTrue(fixture.regionsListUseCaseMock.getCurrentServersCalled) | ||
XCTAssertEqual(fixture.regionsListUseCaseMock.getCurrentServersCalledAttempt, 1) | ||
|
||
// AND the useCase is NOT called to select any server | ||
XCTAssertFalse(fixture.regionsListUseCaseMock.selectServerCalled) | ||
|
||
// AND the AppRouter does not contain any request | ||
XCTAssertEqual(fixture.appRouterSpy.requests, []) | ||
|
||
let selectedServer = ServerMock(name: "server-name", identifier: "server-id", regionIdentifier: "region-id", country: "ES", geo: false) | ||
|
||
// WHEN a server is selected | ||
sut.didSelectRegionServer(selectedServer) | ||
|
||
// THEN the RegionsListUseCase is called once to select the expected server | ||
XCTAssertTrue(fixture.regionsListUseCaseMock.selectServerCalled) | ||
XCTAssertEqual(fixture.regionsListUseCaseMock.selectServerCalledAttempt, 1) | ||
XCTAssertEqual(fixture.regionsListUseCaseMock.selectServerCalledWithArgument!.identifier, selectedServer.identifier) | ||
|
||
// AND the AppRouter is called to pop the current view | ||
XCTAssertEqual(fixture.appRouterSpy.requests, [.pop]) | ||
|
||
} | ||
|
||
} |
Oops, something went wrong.