import XCTest @testable import iosApp import ComposeApp @MainActor final class DocumentViewModelTests: XCTestCase { var sut: DocumentViewModel! override func setUp() { super.setUp() sut = DocumentViewModel() } override func tearDown() { sut = nil super.tearDown() } // MARK: - Initialization Tests func testInitialState() { // Then XCTAssertFalse(sut.isLoading) XCTAssertNil(sut.errorMessage) XCTAssertTrue(sut.documents.isEmpty) } // MARK: - Document Loading Tests func testLoadDocumentsWithFilters() { // When sut.loadDocuments( residenceId: 1, documentType: "warranty", isActive: true ) // Then - Should start loading or complete XCTAssertTrue(sut.isLoading || sut.errorMessage != nil || !sut.documents.isEmpty || (!sut.isLoading && sut.documents.isEmpty)) } func testLoadDocumentsWithoutFilters() { // When sut.loadDocuments() // Then - Should not crash XCTAssertNotNil(sut) } // MARK: - Document Creation Tests func testCreateDocumentWithRequiredFields() { // Given let expectation = XCTestExpectation(description: "Create document callback") var resultSuccess: Bool? var resultError: String? // When sut.createDocument( title: "Test Document", documentType: "warranty", residenceId: 1 ) { success, error in resultSuccess = success resultError = error expectation.fulfill() } // Then wait(for: [expectation], timeout: 5.0) XCTAssertNotNil(resultSuccess) } func testCreateDocumentWithWarrantyFields() { // Given let expectation = XCTestExpectation(description: "Create warranty callback") // When sut.createDocument( title: "Test Warranty", documentType: "warranty", residenceId: 1, itemName: "HVAC System", provider: "ACME Corp" ) { success, error in expectation.fulfill() } // Then wait(for: [expectation], timeout: 5.0) XCTAssertNotNil(sut) } // MARK: - Document Update Tests func testUpdateDocumentWithValidId() { // Given let expectation = XCTestExpectation(description: "Update document callback") // When sut.updateDocument( id: 1, title: "Updated Title" ) { success, error in expectation.fulfill() } // Then wait(for: [expectation], timeout: 5.0) XCTAssertNotNil(sut) } // MARK: - Document Deletion Tests func testDeleteDocumentWithValidId() { // When sut.deleteDocument(id: 1) // Then - Should not crash XCTAssertNotNil(sut) } // MARK: - State Management Tests func testMultipleOperationsDontCrash() { // When sut.loadDocuments() sut.loadDocuments(documentType: "warranty") sut.deleteDocument(id: 1) // Then - Should not crash XCTAssertNotNil(sut) } }