Triton/Packages/AuthSession/Tests/AuthSessionServiceTests/AuthSessionServiceTests.swift
Otavio Cordeiro ee174ab836 Add SwiftLint
2026-01-14 12:30:53 -03:00

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"
)
}
}