[ADD] Test de lancer partie pour kahoot mais test ne passe pas (semble mal observer le state)

Android
Renaud BEURET 1 year ago
parent 59168a1ecc
commit 2d0e9022dd

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/ScienceQuest.iml" filepath="$PROJECT_DIR$/.idea/ScienceQuest.iml" />
</modules>
</component>
</project>

@ -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"))

@ -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 <T : ViewModel> create(
modelClass: Class<T>
): T {
val repo = QuestionStubRepository()
repo.setQuestionsStub(arrayListOf(
StubQuestionWithReponses.ToModel(),
StubQuestionWithReponses2.ToModel()
))
return KahootViewModel(
QuestionAPIRepository()
repo
) as T
}
}

@ -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<Looper> {
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())
}
}

@ -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

Loading…
Cancel
Save