Поэтому я пытаюсь использовать автономный кеш Cloud Firestore ТОЛЬКО в качестве API для моих инструментальных тестов, чтобы избежать чтения и записи из базы данных сервера во время моих интеграционных тестов.
Во-первых, в моем методе настройки теста я вызываю этот метод
protected fun setFirestoreToOfflineMode() {
Tasks.await(FirebaseFirestore.getInstance().disableNetwork())
}
Затем в начале каждого соответствующего теста я использую
fun givenHasTrips(vararg trips: Trip) {
GlobalScope.launch(Dispatchers.Default) {
trips.forEach {
firestoreTripApi.put(it)
}
}
}
В этом методе put у меня есть следующий код:
try {
Tasks.await(tripCollection().document(tripData.id).set(tripData)),
firestoreApiTimeoutSeconds, TimeUnit.SECONDS)
Either.Right(Unit)
} catch (e: Throwable) {
Either.Left(Failure.ServerError)
}
Я вызываю метод set() и жду успешного результата, чтобы иметь возможность вернуть, что операция прошла успешно, чтобы впоследствии обновить свой пользовательский интерфейс.
Что происходит, так это то, что кеш-БД записывается правильно, НО время ожидания функции set () истекает, потому что база данных находится в автономном режиме. Я читал, что Firestore подтверждает успех только в том случае, если серверная БД была правильно написана. Если это так, я не знаю, возможно ли, чтобы этот вызов не прерывался по тайм-ауту при работе строго в автономном режиме кэширования.
Есть ли решение, чтобы Firestore действовал так, как если бы база данных локального кеша была источником правды, и возвращала успешные результаты, если была помещена в автономный режим, только для тестов?