How do I fake a Firestore Flow in Kotlin

Solution for How do I fake a Firestore Flow in Kotlin
is Given Below:

I am trying to test my app with firestore and I don’t know how will I fake the datasource with a Flow to test my repository. I’m trying to follow the pattern from google codelabs but I only convert toObject in the composable. How can I write the repository test?

below is my FirestoreDatasource and my Repository and the FakeDatasource I am trying to write

@Singleton
class FirestoreDatasourceImpl @Inject constructor(
    private val firestore: FirebaseFirestore
) : FirestoreDatasource {

    override suspend fun addUser(user: UserModel) {
        firestore.collection(USERS)
            .document(user.id)
            .set(user, SetOptions.merge())
    }

    @ExperimentalCoroutinesApi
    override fun getAllUsers(userId: String) = callbackFlow {
        val collection = firestore.collection(USERS).whereNotEqualTo("id", userId)

        val snapshotListener = collection.addSnapshotListener() { snapshot, e ->
            this.trySend(snapshot).isSuccess
        }

        awaitClose {
            snapshotListener.remove()
        }
    }
}

@Singleton
class FirestoreRepositoryImpl @Inject constructor(
    private val firestoreClass: FirestoreDatasourceImpl
) : FirestoreRepository{

    override suspend fun addUser(user: UserModel){
        firestoreClass.addUser(user)
    }

    @ExperimentalCoroutinesApi
    override fun getAllUsers(userId: String) : Flow<QuerySnapshot?> {
         return firestoreClass.getAllUsers(userId)
    }
}
internal class FakeFirestoreDatasourceImplTest constructor(
    private var userList: MutableList<UserModel>? = mutableListOf()
) : FirestoreDatasource{


    override suspend fun addUser(user: UserModel) {
        userList?.add(user)
    }

    override fun getAllUsers(userId: String): Flow<QuerySnapshot?> {

    }
}