From 2d0e9022ddfa2ba23449f773b29b9d86517cca74 Mon Sep 17 00:00:00 2001 From: "renaud.beuret" Date: Wed, 3 Apr 2024 00:48:37 +0200 Subject: [PATCH] [ADD] Test de lancer partie pour kahoot mais test ne passe pas (semble mal observer le state) --- .idea/modules.xml | 8 --- android/app/build.gradle.kts | 1 + .../viewModels/KahootViewModel.kt | 16 ++++-- .../kahoot/KahootLancerPartieTest.kt | 55 +++++++++++++++++++ android/build.gradle.kts | 2 +- 5 files changed, 67 insertions(+), 15 deletions(-) delete mode 100644 .idea/modules.xml create mode 100644 android/app/src/test/java/fr/iut/sciencequest/viewModel/kahoot/KahootLancerPartieTest.kt diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index c5871cc..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 7142491..9c0df68 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -68,6 +68,7 @@ dependencies { implementation(platform("androidx.compose:compose-bom:2023.08.00")) testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3") testImplementation("junit:junit:4.13.2") + testImplementation("io.mockk:mockk:1.13.10") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation(platform("androidx.compose:compose-bom:2023.08.00")) diff --git a/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt index b61ef95..dae73c4 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt @@ -6,8 +6,12 @@ import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope +import fr.iut.sciencequest.model.dto.extensions.ToModel import fr.iut.sciencequest.model.repositories.question.IQuestionRepository import fr.iut.sciencequest.model.repositories.question.QuestionAPIRepository +import fr.iut.sciencequest.model.repositories.question.QuestionStubRepository +import fr.iut.sciencequest.stub.StubQuestionWithReponses +import fr.iut.sciencequest.stub.StubQuestionWithReponses2 import fr.iut.sciencequest.viewModels.uixStates.KahootUIState import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -25,7 +29,6 @@ class KahootViewModel( fun lancerPartie() { viewModelScope.launch { questionRepo.fetchQuestions(2) - Log.d("KahootViewModel","J'ai trouvé ${questionRepo.questions.value.size} questions") _uiState.value = KahootUIState( questionRepo.questions.value.get(0), @@ -36,7 +39,6 @@ class KahootViewModel( for (index: Int in 1..questionRepo.questions.value.size) { handler.postDelayed( { - Log.d("KahootViewModel", "J'actualise les questions") _uiState.value = KahootUIState( questionRepo.questions.value.get(index), duréePartie = uiState.value.duréePartie, @@ -52,9 +54,7 @@ class KahootViewModel( // NOTE : tpsReponse en ms fun ajouterPoints(tpsReponse: Long) { - Log.d("KahootViewModel","Je reçois une réponse") if (uiState.value.reponseChoisie) { - Log.d("KahootViewModel","Le joueur a déjà répondu") return } val nbPoints: Int = (10_000 - tpsReponse).toInt() @@ -62,7 +62,6 @@ class KahootViewModel( duréePartie = uiState.value.duréePartie, nbPoints = uiState.value.nbPoints + nbPoints, reponseChoisie = true) - Log.d("KahootViewModel","Le joueur à ${uiState.value.nbPoints}") } companion object { @@ -71,8 +70,13 @@ class KahootViewModel( override fun create( modelClass: Class ): T { + val repo = QuestionStubRepository() + repo.setQuestionsStub(arrayListOf( + StubQuestionWithReponses.ToModel(), + StubQuestionWithReponses2.ToModel() + )) return KahootViewModel( - QuestionAPIRepository() + repo ) as T } } diff --git a/android/app/src/test/java/fr/iut/sciencequest/viewModel/kahoot/KahootLancerPartieTest.kt b/android/app/src/test/java/fr/iut/sciencequest/viewModel/kahoot/KahootLancerPartieTest.kt new file mode 100644 index 0000000..b8fb90c --- /dev/null +++ b/android/app/src/test/java/fr/iut/sciencequest/viewModel/kahoot/KahootLancerPartieTest.kt @@ -0,0 +1,55 @@ +package fr.iut.sciencequest.viewModel.kahoot + +import android.os.Looper +import androidx.compose.runtime.collectAsState +import fr.iut.sciencequest.model.dto.extensions.ToModel +import fr.iut.sciencequest.model.repositories.question.QuestionStubRepository +import fr.iut.sciencequest.stub.StubQuestionWithReponses +import fr.iut.sciencequest.stub.StubQuestionWithReponses2 +import fr.iut.sciencequest.testRules.MainDispatcherRule +import fr.iut.sciencequest.viewModels.KahootViewModel +import io.mockk.every +import io.mockk.mockk +import io.mockk.mockkStatic +import kotlinx.coroutines.test.runTest +import org.junit.Assert +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import kotlin.time.Duration + +class KahootLancerPartieTest { + + @get:Rule + val mainDispatcherRule = MainDispatcherRule() + + @Before + fun setup() { + mockkStatic(Looper::class) + + val looper = mockk { + every { thread } returns Thread.currentThread() + } + + every { Looper.getMainLooper() } returns looper + } + + @Test + fun KahootLancerPartieTest() = runTest (timeout = Duration.parse("15s")) { + val question = StubQuestionWithReponses.ToModel() + val repo = QuestionStubRepository() + repo.setQuestionsStub(arrayListOf( + StubQuestionWithReponses.ToModel(), + StubQuestionWithReponses2.ToModel() + )) + val viewModel = KahootViewModel(repo) + Assert.assertEquals(StubQuestionWithReponses.id, viewModel.uiState.value.question.id) + Assert.assertEquals(StubQuestionWithReponses.question, viewModel.uiState.value.question.question) + Assert.assertEquals(StubQuestionWithReponses.reponses.count(), viewModel.uiState.value.question.reponses.count()) + // On simule l'attente de la fin de la question + Thread.sleep(12_000) + Assert.assertEquals(StubQuestionWithReponses2.id, viewModel.uiState.value.question.id) + Assert.assertEquals(StubQuestionWithReponses2.question, viewModel.uiState.value.question.question) + Assert.assertEquals(StubQuestionWithReponses2.reponses.count(), viewModel.uiState.value.question.reponses.count()) + } +} \ No newline at end of file diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 4645626..bb1c9aa 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -1,4 +1,4 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. + // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id("com.android.application") version "8.2.2" apply false id("org.jetbrains.kotlin.android") version "1.9.0" apply false