ProjetsViewModelTest.swift 38 lignes · 1481 octets
import XCTest
@testable import Card2vcf

/// Port of the android `ProjetsViewModelTest` (project creation from mobile).
@MainActor
final class ProjetsViewModelTest: XCTestCase {

    func testCreateProjetInsertsEntityAndSyncOp() async throws {
        let projetDao = InMemoryProjetDao()
        let workflowDao = InMemoryWorkflowDao()
        let syncOpDao = InMemorySyncOpDao()
        var workflow = WorkflowEntity(serverId: "wf-1")
        workflow.nom = "Vente"
        try await workflowDao.upsert(workflow)
        let viewModel = ProjetsViewModel(
            projetDao: projetDao,
            workflowDao: workflowDao,
            syncOpDao: syncOpDao
        )

        await viewModel.createProjetAsync(nom: " Salon ", description: " Stand A ", workflowServerId: "wf-1")

        let projets = try await projetDao.listAll()
        XCTAssertEqual(1, projets.count)
        XCTAssertEqual("Salon", projets[0].nom)
        XCTAssertEqual("Stand A", projets[0].description)
        XCTAssertEqual("wf-1", projets[0].workflowServerId)

        let ops = try await syncOpDao.listAll()
        XCTAssertEqual(1, ops.count)
        XCTAssertEqual("projet", ops[0].entityType)
        XCTAssertEqual("create", ops[0].op)
        XCTAssertEqual(projets[0].localId, ops[0].localId)
        let payload = try SyncJson.decode(CreateProjetRequest.self, from: ops[0].payloadJson)
        XCTAssertEqual("Salon", payload.nom)
        XCTAssertEqual("wf-1", payload.workflowId)
    }
}