// // Copyright 2025 Element Creations Ltd. // // SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial // Please see LICENSE files in the repository root for full details. // @testable import ElementX import Testing @Suite @MainActor struct TemplateScreenViewModelTests { var viewModel: TemplateScreenViewModelProtocol var context: TemplateScreenViewModelType.Context { viewModel.context } init() { viewModel = TemplateScreenViewModel() } func testInitialState() { #expect(!context.composerText.isEmpty) #expect(context.viewState.counter == 0) } func testTextField() { context.composerText = "123" context.send(viewAction: .textChanged) #expect(context.composerText == "123") } func testCounter() async throws { var deferred = deferFulfillment(context.observe(\.viewState.counter)) { $0 == 1 } context.send(viewAction: .incrementCounter) try await deferred.fulfill() #expect(context.viewState.counter == 1) deferred = deferFulfillment(context.observe(\.viewState.counter)) { $0 == 3 } context.send(viewAction: .incrementCounter) context.send(viewAction: .incrementCounter) try await deferred.fulfill() #expect(context.viewState.counter == 3) deferred = deferFulfillment(context.observe(\.viewState.counter)) { $0 == 2 } context.send(viewAction: .decrementCounter) try await deferred.fulfill() #expect(context.viewState.counter == 2) } }