Skip to content

Commit

Permalink
Merge pull request #41 from SwEnt-Group13/chore/association-viewmodel
Browse files Browse the repository at this point in the history
chore(association): add generic functions to the repository of the associations.
  • Loading branch information
Zafouche authored Oct 10, 2024
2 parents 3841715 + cd5b070 commit c45f92e
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,22 @@ interface AssociationRepository {
onSuccess: (Association) -> Unit,
onFailure: (Exception) -> Unit
)

fun addAssociation(
association: Association,
onSuccess: () -> Unit,
onFailure: (Exception) -> Unit
)

fun updateAssociation(
association: Association,
onSuccess: () -> Unit,
onFailure: (Exception) -> Unit
)

fun deleteAssociationById(
associationId: String,
onSuccess: () -> Unit,
onFailure: (Exception) -> Unit
)
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.android.unio.model.association

import android.util.Log
import com.android.unio.model.firestore.FirestorePaths.ASSOCIATION_PATH
import com.android.unio.model.firestore.FirestorePaths.USER_PATH
import com.android.unio.model.firestore.FirestoreReferenceList
import com.android.unio.model.user.UserRepositoryFirestore
import com.google.android.gms.tasks.Task
import com.google.firebase.Firebase
import com.google.firebase.auth.auth
import com.google.firebase.firestore.DocumentSnapshot
Expand Down Expand Up @@ -52,6 +54,55 @@ class AssociationRepositoryFirestore(private val db: FirebaseFirestore) : Associ
.addOnFailureListener { exception -> onFailure(exception) }
}

override fun addAssociation(
association: Association,
onSuccess: () -> Unit,
onFailure: (Exception) -> Unit
) {
performFirestoreOperation(
db.collection(ASSOCIATION_PATH).document(association.uid).set(association),
onSuccess,
onFailure)
}

override fun updateAssociation(
association: Association,
onSuccess: () -> Unit,
onFailure: (Exception) -> Unit
) {
performFirestoreOperation(
db.collection(ASSOCIATION_PATH).document(association.uid).set(association),
onSuccess,
onFailure)
}

override fun deleteAssociationById(
associationId: String,
onSuccess: () -> Unit,
onFailure: (Exception) -> Unit
) {
performFirestoreOperation(
db.collection(ASSOCIATION_PATH).document(associationId).delete(), onSuccess, onFailure)
}

/** Performs a Firestore operation and calls the appropriate callback based on the result. */
private fun performFirestoreOperation(
task: Task<Void>,
onSuccess: () -> Unit,
onFailure: (Exception) -> Unit
) {
task.addOnCompleteListener {
if (it.isSuccessful) {
onSuccess()
} else {
it.exception?.let { e ->
Log.e("AssociationRepositoryFirestore", "Error performing Firestore operation", e)
onFailure(e)
}
}
}
}

companion object {
fun hydrate(doc: DocumentSnapshot): Association {
val memberUids = doc.get("members") as? List<String> ?: emptyList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.android.unio.model.firestore.FirestoreReferenceList
import com.android.unio.model.user.UserRepositoryFirestore
import com.google.android.gms.tasks.OnSuccessListener
import com.google.android.gms.tasks.Task
import com.google.android.gms.tasks.Tasks
import com.google.firebase.FirebaseApp
import com.google.firebase.firestore.CollectionReference
import com.google.firebase.firestore.DocumentReference
Expand All @@ -22,6 +23,7 @@ import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.any
import org.mockito.kotlin.eq
import org.mockito.kotlin.verify
import org.robolectric.RobolectricTestRunner

@RunWith(RobolectricTestRunner::class)
Expand Down Expand Up @@ -168,4 +170,64 @@ class AssociationRepositoryFirestoreTest {
},
onFailure = { exception -> assert(false) })
}

@Test
fun testAddAssociationSuccess() {
`when`(documentReference.set(association1)).thenReturn(Tasks.forResult(null))

repository.addAssociation(
association1, onSuccess = { assert(true) }, onFailure = { assert(false) })

verify(documentReference).set(association1)
}

@Test
fun testAddAssociationFailure() {
`when`(documentReference.set(association1)).thenReturn(Tasks.forException(Exception()))

repository.addAssociation(
association1, onSuccess = { assert(false) }, onFailure = { assert(true) })

verify(documentReference).set(association1)
}

@Test
fun testUpdateAssociationSuccess() {
`when`(documentReference.set(association1)).thenReturn(Tasks.forResult(null))

repository.updateAssociation(
association1, onSuccess = { assert(true) }, onFailure = { assert(false) })

verify(documentReference).set(association1)
}

@Test
fun testUpdateAssociationFailure() {
`when`(documentReference.set(association1)).thenReturn(Tasks.forException(Exception()))

repository.updateAssociation(
association1, onSuccess = { assert(false) }, onFailure = { assert(true) })

verify(documentReference).set(association1)
}

@Test
fun testDeleteAssociationByIdSuccess() {
`when`(documentReference.delete()).thenReturn(Tasks.forResult(null))

repository.deleteAssociationById(
association1.uid, onSuccess = { assert(true) }, onFailure = { assert(false) })

verify(documentReference).delete()
}

@Test
fun testDeleteAssociationByIdFailure() {
`when`(documentReference.delete()).thenReturn(Tasks.forException(Exception()))

repository.deleteAssociationById(
association1.uid, onSuccess = { assert(false) }, onFailure = { assert(true) })

verify(documentReference).delete()
}
}

0 comments on commit c45f92e

Please sign in to comment.