mirror of
https://github.com/otaviocc/Triton.git
synced 2026-01-30 04:04:27 +00:00
105 lines
2.6 KiB
Swift
105 lines
2.6 KiB
Swift
import AuthSessionServiceInterface
|
|
import XCTest
|
|
@testable import AuthSessionService
|
|
|
|
final class AuthSessionServiceTests: XCTestCase {
|
|
|
|
// MARK: - Properties
|
|
|
|
private var service: (any AuthSessionServiceProtocol)!
|
|
private var fakeKeychainStore: KeychainStoreProtocol!
|
|
|
|
// MARK: - Lifecycle
|
|
|
|
override func setUp() async throws {
|
|
try await super.setUp()
|
|
|
|
let store = KeychainStoreMother.makeKeychainStore()
|
|
fakeKeychainStore = store
|
|
|
|
service = AuthSessionService(
|
|
keychainStore: store
|
|
)
|
|
}
|
|
|
|
override func tearDown() async throws {
|
|
service = nil
|
|
fakeKeychainStore = nil
|
|
|
|
try await super.tearDown()
|
|
}
|
|
|
|
// MARK: - Tests
|
|
|
|
func testAccessTokenSignIn() async {
|
|
// Given
|
|
let initialState = await service.isLoggedIn
|
|
XCTAssertFalse(initialState, "Should start as logged out")
|
|
|
|
// When
|
|
await service.setAccessToken("1b302f5c-157a-4caf-b450-8e1f7cde01ab")
|
|
|
|
// Then
|
|
let finalState = await service.isLoggedIn
|
|
|
|
XCTAssertTrue(
|
|
finalState,
|
|
"It should be logged in after setting token"
|
|
)
|
|
|
|
XCTAssertEqual(
|
|
fakeKeychainStore.wrappedValue,
|
|
"1b302f5c-157a-4caf-b450-8e1f7cde01ab",
|
|
"It should store the correct access token"
|
|
)
|
|
}
|
|
|
|
func testAccessTokenSignOut() async {
|
|
// Given
|
|
await service.setAccessToken("1b302f5c-157a-4caf-b450-8e1f7cde01ab")
|
|
let loggedInState = await service.isLoggedIn
|
|
|
|
XCTAssertTrue(
|
|
loggedInState,
|
|
"It should be logged in initially"
|
|
)
|
|
|
|
// When
|
|
await service.setAccessToken(nil)
|
|
|
|
// Then
|
|
let loggedOutState = await service.isLoggedIn
|
|
|
|
XCTAssertFalse(
|
|
loggedOutState,
|
|
"it should be logged out after clearing token"
|
|
)
|
|
|
|
XCTAssertNil(
|
|
fakeKeychainStore.wrappedValue,
|
|
"It should clear out the access token"
|
|
)
|
|
}
|
|
|
|
func testObserveLoginStateYieldsCurrentState() async throws {
|
|
// Given
|
|
let initialState = await service.isLoggedIn
|
|
|
|
XCTAssertFalse(
|
|
initialState,
|
|
"it should start logged out"
|
|
)
|
|
|
|
// When
|
|
let stream = service.observeLoginState()
|
|
|
|
// Then
|
|
var iterator = stream.makeAsyncIterator()
|
|
let firstValue = await iterator.next()
|
|
|
|
XCTAssertFalse(
|
|
try XCTUnwrap(firstValue),
|
|
"It should yielded the first value correctly"
|
|
)
|
|
}
|
|
}
|