FakeAilianceApi.kt 248 lignes · 12102 octets
package fr.ebii.card2vcf.sync

/**
 * Fake [AilianceApi] configurable par test ; par défaut tout répond Ok vide.
 * Partagé par tous les tests qui en ont besoin.
 *
 * Deux champs permettent de surcharger les réponses critiques pour [SettingsViewModelTest] :
 * - [authCleOverride] : si non null, remplace la réponse par défaut de [authCle].
 * - [getRessourcesCatalogueOverride] : si non null, remplace [getRessourcesCatalogue].
 */
class FakeAilianceApi : AilianceApi {
    /** Si non null, [authCle] retourne cette valeur au lieu du Ok par défaut. */
    var authCleOverride: AilianceApiClient.ApiResult<AuthCleResponse>? = null

    /** Si non null, [getRessourcesCatalogue] retourne cette valeur au lieu du Ok vide par défaut. */
    var getRessourcesCatalogueOverride: AilianceApiClient.ApiResult<RessourcesCatalogueDto>? = null

    var statusResult: AilianceApiClient.ApiResult<SyncStatusResponse> =
        AilianceApiClient.ApiResult.Ok(SyncStatusResponse("1970-01-01T00:00:00Z", SyncChanges(), 0))
    var pullResult: AilianceApiClient.ApiResult<SyncPullResponse> =
        AilianceApiClient.ApiResult.Ok(SyncPullResponse(serverTime = "1970-01-01T00:00:00Z"))
    var createContactResult: AilianceApiClient.ApiResult<String> =
        AilianceApiClient.ApiResult.Ok("""{"id":"srv-generated"}""")
    val createContactCalls = mutableListOf<String>()

    var createReservationResult: AilianceApiClient.ApiResult<String> = AilianceApiClient.ApiResult.Ok("""{"id":"resa-generated"}""")
    var updateReservationResult: AilianceApiClient.ApiResult<String> = AilianceApiClient.ApiResult.Ok("{}")
    val createReservationCalls = mutableListOf<Triple<String, String, String>>()

    var createRdvResult: AilianceApiClient.ApiResult<String> = AilianceApiClient.ApiResult.Ok("""{"id":"rdv-generated"}""")
    val createRdvCalls = mutableListOf<String>()

    var createProjetResult: AilianceApiClient.ApiResult<String> = AilianceApiClient.ApiResult.Ok("""{"id":"projet-generated"}""")
    val createProjetCalls = mutableListOf<String>()

    var statusQueries = mutableListOf<String?>()
    var pullQueries = mutableListOf<String?>()
    val pullSince = mutableListOf<String>()

    override fun authCle(nom: String, motDePasse: String) =
        authCleOverride ?: AilianceApiClient.ApiResult.Ok(AuthCleResponse(nom, "", "", "argon2id", "xchacha20poly1305"))

    override fun syncStatus(sinceIso: String, ressourcesQuery: String?): AilianceApiClient.ApiResult<SyncStatusResponse> {
        statusQueries += ressourcesQuery
        return statusResult
    }

    override fun syncPull(sinceIso: String, ressourcesQuery: String?): AilianceApiClient.ApiResult<SyncPullResponse> {
        pullQueries += ressourcesQuery
        pullSince += sinceIso
        return pullResult
    }

    override fun createContact(jsonBody: String): AilianceApiClient.ApiResult<String> {
        createContactCalls += jsonBody
        return createContactResult
    }

    override fun updateContact(id: String, jsonBody: String) = AilianceApiClient.ApiResult.Ok("{}")
    override fun deleteContact(id: String) = AilianceApiClient.ApiResult.Ok(Unit)
    override fun createEntreprise(jsonBody: String) = AilianceApiClient.ApiResult.Ok("{}")
    override fun updateEntreprise(id: String, jsonBody: String) = AilianceApiClient.ApiResult.Ok("{}")
    override fun deleteEntreprise(id: String) = AilianceApiClient.ApiResult.Ok(Unit)
    override fun createProjet(jsonBody: String): AilianceApiClient.ApiResult<String> {
        createProjetCalls += jsonBody
        return createProjetResult
    }
    override fun updateProjet(id: String, jsonBody: String) = AilianceApiClient.ApiResult.Ok("{}")
    override fun deleteProjet(id: String) = AilianceApiClient.ApiResult.Ok(Unit)
    override fun createTache(projetId: String, jsonBody: String) = AilianceApiClient.ApiResult.Ok("{}")
    override fun updateTache(projetId: String, tacheId: String, jsonBody: String) = AilianceApiClient.ApiResult.Ok("{}")
    override fun deleteTache(projetId: String, tacheId: String) = AilianceApiClient.ApiResult.Ok(Unit)
    override fun moveTache(projetId: String, tacheId: String, jsonBody: String) = AilianceApiClient.ApiResult.Ok("{}")

    /** Bascules reçues : `(projetId, tacheId, sousTacheId)`. */
    val toggleSousTacheCalls = mutableListOf<Triple<String, String, String>>()

    override fun toggleSousTache(
        projetId: String,
        tacheId: String,
        sousTacheId: String,
    ): AilianceApiClient.ApiResult<String> {
        toggleSousTacheCalls += Triple(projetId, tacheId, sousTacheId)
        return AilianceApiClient.ApiResult.Ok("{}")
    }

    var createInteractionResult: AilianceApiClient.ApiResult<String> =
        AilianceApiClient.ApiResult.Ok("""{"id":"interaction-generated"}""")
    val createInteractionCalls = mutableListOf<Pair<String, String>>() // contactId, jsonBody

    override fun createInteraction(contactId: String, jsonBody: String): AilianceApiClient.ApiResult<String> {
        createInteractionCalls += contactId to jsonBody
        return createInteractionResult
    }

    var deleteInteractionResult: AilianceApiClient.ApiResult<Unit> = AilianceApiClient.ApiResult.Ok(Unit)
    val deleteInteractionCalls = mutableListOf<String>() // iid

    override fun deleteInteraction(iid: String): AilianceApiClient.ApiResult<Unit> {
        deleteInteractionCalls += iid
        return deleteInteractionResult
    }

    var relancerTranscriptionInteractionResult: AilianceApiClient.ApiResult<Unit> = AilianceApiClient.ApiResult.Ok(Unit)
    val relancerTranscriptionInteractionCalls = mutableListOf<Pair<String, String>>() // contactServerId, iid

    override fun relancerTranscriptionInteraction(contactServerId: String, iid: String): AilianceApiClient.ApiResult<Unit> {
        relancerTranscriptionInteractionCalls += contactServerId to iid
        return relancerTranscriptionInteractionResult
    }

    var relancerTranscriptionNoteResult: AilianceApiClient.ApiResult<Unit> = AilianceApiClient.ApiResult.Ok(Unit)
    val relancerTranscriptionNoteCalls = mutableListOf<Pair<String, String>>() // projetServerId, nid

    override fun relancerTranscriptionNote(projetServerId: String, nid: String): AilianceApiClient.ApiResult<Unit> {
        relancerTranscriptionNoteCalls += projetServerId to nid
        return relancerTranscriptionNoteResult
    }

    override fun listRdv() = AilianceApiClient.ApiResult.Ok(emptyList<RendezVousDto>())

    override fun createRdv(jsonBody: String): AilianceApiClient.ApiResult<String> {
        createRdvCalls += jsonBody
        return createRdvResult
    }

    override fun getRdv(id: String) = error("not used")
    override fun updateRdv(id: String, jsonBody: String) = AilianceApiClient.ApiResult.Ok("{}")
    override fun deleteRdv(id: String) = AilianceApiClient.ApiResult.Ok(Unit)
    override fun getRessourcesCatalogue() =
        getRessourcesCatalogueOverride ?: AilianceApiClient.ApiResult.Ok(RessourcesCatalogueDto())
    override fun listReservations(genre: String, resourceId: String) = AilianceApiClient.ApiResult.Ok(emptyList<ReservationDto>())

    override fun createReservation(genre: String, resourceId: String, jsonBody: String): AilianceApiClient.ApiResult<String> {
        createReservationCalls += Triple(genre, resourceId, jsonBody)
        return createReservationResult
    }

    override fun updateReservation(genre: String, resourceId: String, reservationId: String, jsonBody: String) =
        updateReservationResult

    val deleteReservationCalls = mutableListOf<Triple<String, String, String>>()

    override fun deleteReservation(genre: String, resourceId: String, reservationId: String): AilianceApiClient.ApiResult<Unit> {
        deleteReservationCalls += Triple(genre, resourceId, reservationId)
        return AilianceApiClient.ApiResult.Ok(Unit)
    }
    override fun listIndisponibilites(genre: String, resourceId: String) =
        AilianceApiClient.ApiResult.Ok(emptyList<IndisponibiliteDto>())

    var uploadCarteResult: AilianceApiClient.ApiResult<String> = AilianceApiClient.ApiResult.Ok("{}")
    var uploadPhotoResult: AilianceApiClient.ApiResult<String> = AilianceApiClient.ApiResult.Ok("{}")
    val uploadCarteCalls = mutableListOf<Pair<String, Int>>()
    val uploadPhotoCalls = mutableListOf<Pair<String, Int>>()
    var downloadCarteResult: AilianceApiClient.ApiResult<ByteArray> =
        AilianceApiClient.ApiResult.Err(404, "absent")
    var downloadPhotoResult: AilianceApiClient.ApiResult<ByteArray> =
        AilianceApiClient.ApiResult.Err(404, "absent")
    val downloadCarteCalls = mutableListOf<String>()
    val downloadPhotoCalls = mutableListOf<String>()

    override fun uploadContactCarte(
        id: String,
        bytes: ByteArray,
        filename: String,
        contentType: String,
    ): AilianceApiClient.ApiResult<String> {
        uploadCarteCalls += id to bytes.size
        return uploadCarteResult
    }

    override fun uploadContactPhoto(
        id: String,
        bytes: ByteArray,
        filename: String,
        contentType: String,
    ): AilianceApiClient.ApiResult<String> {
        uploadPhotoCalls += id to bytes.size
        return uploadPhotoResult
    }

    override fun downloadContactCarte(id: String): AilianceApiClient.ApiResult<ByteArray> {
        downloadCarteCalls += id
        return downloadCarteResult
    }

    override fun downloadContactPhoto(id: String): AilianceApiClient.ApiResult<ByteArray> {
        downloadPhotoCalls += id
        return downloadPhotoResult
    }

    var uploadInteractionAudioResult: AilianceApiClient.ApiResult<String> = AilianceApiClient.ApiResult.Ok("{}")
    val uploadInteractionAudioCalls = mutableListOf<Triple<String, String, Int>>() // contactId, iid, bytes size

    override fun uploadInteractionAudio(
        contactId: String,
        iid: String,
        bytes: ByteArray,
        filename: String,
        contentType: String,
    ): AilianceApiClient.ApiResult<String> {
        uploadInteractionAudioCalls += Triple(contactId, iid, bytes.size)
        return uploadInteractionAudioResult
    }

    override fun downloadInteractionAudio(contactId: String, iid: String): AilianceApiClient.ApiResult<ByteArray> =
        AilianceApiClient.ApiResult.Err(404, "absent")

    var createNoteProjetResult: AilianceApiClient.ApiResult<String> =
        AilianceApiClient.ApiResult.Ok("""{"id":"note-generated"}""")
    val createNoteProjetCalls = mutableListOf<Pair<String, String>>() // projetId, jsonBody

    override fun createNoteProjet(projetId: String, jsonBody: String): AilianceApiClient.ApiResult<String> {
        createNoteProjetCalls += projetId to jsonBody
        return createNoteProjetResult
    }

    val updateNoteProjetCalls = mutableListOf<Triple<String, String, String>>() // projetId, nid, jsonBody

    override fun updateNoteProjet(projetId: String, nid: String, jsonBody: String): AilianceApiClient.ApiResult<String> {
        updateNoteProjetCalls += Triple(projetId, nid, jsonBody)
        return AilianceApiClient.ApiResult.Ok("{}")
    }

    val deleteNoteProjetCalls = mutableListOf<Pair<String, String>>() // projetId, nid

    override fun deleteNoteProjet(projetId: String, nid: String): AilianceApiClient.ApiResult<Unit> {
        deleteNoteProjetCalls += projetId to nid
        return AilianceApiClient.ApiResult.Ok(Unit)
    }

    var uploadNoteAudioResult: AilianceApiClient.ApiResult<String> = AilianceApiClient.ApiResult.Ok("{}")
    val uploadNoteAudioCalls = mutableListOf<Triple<String, String, Int>>() // projetId, nid, bytes size

    override fun uploadNoteAudio(
        projetId: String,
        nid: String,
        bytes: ByteArray,
        filename: String,
        contentType: String,
    ): AilianceApiClient.ApiResult<String> {
        uploadNoteAudioCalls += Triple(projetId, nid, bytes.size)
        return uploadNoteAudioResult
    }

    override fun downloadNoteAudio(projetId: String, nid: String): AilianceApiClient.ApiResult<ByteArray> =
        AilianceApiClient.ApiResult.Err(404, "absent")
}