81 lines
2.9 KiB
Swift
81 lines
2.9 KiB
Swift
import Foundation
|
|
import TeleTuiIOSCore
|
|
|
|
@main
|
|
struct TeleTuiIOSSmokeTests {
|
|
static func main() async throws {
|
|
try await authFlowMatchesAllInteractiveStates()
|
|
try await chatListLoadsDeterministicFakeDataAndFilters()
|
|
try await chatDetailLoadsAndSendsMessage()
|
|
try await profileLoadsFromSelectedChat()
|
|
appStorageUsesApplicationSupportStyleAccountPaths()
|
|
print("TeleTuiIOS smoke tests passed")
|
|
}
|
|
|
|
@MainActor
|
|
private static func authFlowMatchesAllInteractiveStates() async throws {
|
|
let account = Account(id: "fake", displayName: "Fake", databasePath: URL(fileURLWithPath: "/tmp/fake"))
|
|
let store = SessionStore(account: account, bridge: FakeSessionBridge())
|
|
let viewModel = AuthViewModel(store: store)
|
|
|
|
await store.refreshAuthState()
|
|
precondition(store.authState == .waitPhoneNumber)
|
|
|
|
viewModel.phone = "+10000000000"
|
|
await viewModel.submitCurrentStep()
|
|
precondition(store.authState == .waitCode)
|
|
|
|
viewModel.code = "12345"
|
|
await viewModel.submitCurrentStep()
|
|
precondition(store.authState == .waitPassword)
|
|
|
|
viewModel.password = "secret"
|
|
await viewModel.submitCurrentStep()
|
|
precondition(store.authState == .ready)
|
|
}
|
|
|
|
@MainActor
|
|
private static func chatListLoadsDeterministicFakeDataAndFilters() async throws {
|
|
let bridge = FakeSessionBridge(auth: .ready)
|
|
let viewModel = ChatListViewModel(bridge: bridge)
|
|
|
|
await viewModel.load()
|
|
precondition(viewModel.chats.map(\.title) == ["Saved Messages", "iOS Team"])
|
|
|
|
viewModel.searchText = "team"
|
|
precondition(viewModel.filteredChats.map(\.title) == ["iOS Team"])
|
|
}
|
|
|
|
@MainActor
|
|
private static func chatDetailLoadsAndSendsMessage() async throws {
|
|
let bridge = FakeSessionBridge(auth: .ready)
|
|
let chat = try await bridge.loadChats(folderId: nil)[0]
|
|
let viewModel = ChatViewModel(chat: chat, bridge: bridge)
|
|
|
|
await viewModel.load()
|
|
precondition(viewModel.messages.count == 1)
|
|
|
|
viewModel.composeText = "Hi from SwiftUI"
|
|
await viewModel.send()
|
|
precondition(viewModel.messages.last?.text == "Hi from SwiftUI")
|
|
precondition(viewModel.composeText.isEmpty)
|
|
}
|
|
|
|
@MainActor
|
|
private static func profileLoadsFromSelectedChat() async throws {
|
|
let bridge = FakeSessionBridge(auth: .ready)
|
|
let viewModel = ProfileViewModel(bridge: bridge)
|
|
|
|
await viewModel.load(chatId: 1)
|
|
precondition(viewModel.profile?.title == "Saved Messages")
|
|
precondition(viewModel.profile?.username == "saved")
|
|
}
|
|
|
|
private static func appStorageUsesApplicationSupportStyleAccountPaths() {
|
|
let root = URL(fileURLWithPath: "/tmp/TeleTuiIOS")
|
|
let paths = AppStoragePaths(root: root)
|
|
|
|
precondition(paths.databasePath(for: "work").path == "/tmp/TeleTuiIOS/Accounts/work/tdlib")
|
|
}
|
|
}
|