Triton/Packages/AuthSession/Tests/AuthSessionServiceTests/AuthSessionServiceTests.swift
Otávio 3e878667a1 Add Triton App
Signed-off-by: Otavio Cordeiro <otaviocc@users.noreply.github.com>
2025-12-15 20:39:07 +01:00

106 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 {
// 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()
XCTAssertEqual(
firstValue,
false,
"It should yielded the first value correctly"
)
}
}