diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/repositories/kahootPartie/KahootStubRepository.kt b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/kahootPartie/KahootStubRepository.kt new file mode 100644 index 0000000..277a781 --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/model/repositories/kahootPartie/KahootStubRepository.kt @@ -0,0 +1,69 @@ +package fr.iut.sciencequest.model.repositories.kahootPartie + +import fr.iut.sciencequest.model.dto.extensions.ToModel +import fr.iut.sciencequest.model.dto.partie.NouvellePartieDTO +import fr.iut.sciencequest.model.metier.Difficulte +import fr.iut.sciencequest.model.metier.Thematique +import fr.iut.sciencequest.model.metier.joueur.JoueurSimple +import fr.iut.sciencequest.model.metier.partie.Partie +import fr.iut.sciencequest.model.metier.partie.PartieKahoot +import fr.iut.sciencequest.model.metier.question.QuestionPartie +import fr.iut.sciencequest.model.metier.question.QuestionWithSimpleReponse +import fr.iut.sciencequest.stub.StubQuestionWithReponses +import fr.iut.sciencequest.stub.StubQuestionWithReponses2 +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toInstant + +class KahootStubRepository : IKahootPartieRepository { + + private val _partie = MutableStateFlow(PartieKahoot(0,"", emptyList(), emptyList(), Difficulte(0,""))) + override val partie: StateFlow + get() = _partie.asStateFlow() + + private val _question = MutableStateFlow(QuestionPartie(StubQuestionWithReponses.ToModel(), + LocalDateTime(1,1,1,1,1 ).toInstant( + TimeZone.UTC))) + override val question: StateFlow + get() = TODO("Not yet implemented") + + private val _isStarted = MutableStateFlow(false) + override val isStarted: StateFlow + get() = _isStarted.asStateFlow() + + private val _isResponseValid = MutableStateFlow(false) + override val isReponseValid: StateFlow + get() = _isResponseValid.asStateFlow() + + override suspend fun createPartie(nvPartie: NouvellePartieDTO) { + _partie.value = PartieKahoot( + 0, + "AAAAA", + listOf(Thematique(nvPartie.thematiques.get(0),"")), + listOf(JoueurSimple(nvPartie.idJoueur,"pseudo")), + Difficulte(0,"") + ) + } + + override suspend fun startPartie(code: String) { + _isStarted.value = true + } + + override suspend fun getQuestion(code: String) { + _question.value = QuestionPartie( + StubQuestionWithReponses2.ToModel(), + _question.value.date + ) + } + + override suspend fun postReponse(code: String, idJoueur: Int, idReponse: Int) { + if (idReponse == 1) { + _isResponseValid.value = true + } else { + _isResponseValid.value = false + } + } +} \ No newline at end of file diff --git a/android/app/src/test/java/fr/iut/sciencequest/extension/DifficulteExtensionTest.kt b/android/app/src/test/java/fr/iut/sciencequest/extension/DifficulteExtensionTest.kt new file mode 100644 index 0000000..5898ae1 --- /dev/null +++ b/android/app/src/test/java/fr/iut/sciencequest/extension/DifficulteExtensionTest.kt @@ -0,0 +1,43 @@ +package fr.iut.sciencequest.extension + +import fr.iut.sciencequest.model.dto.difficulte.DifficulteDTO +import fr.iut.sciencequest.model.dto.extensions.ToModel +import fr.iut.sciencequest.model.dto.question.QuestionDTO +import fr.iut.sciencequest.model.dto.reponse.ReponseDTO +import fr.iut.sciencequest.model.metier.Difficulte +import fr.iut.sciencequest.stub.StubScientifique1 +import fr.iut.sciencequest.stub.StubScientifique2 +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized + +@RunWith(Parameterized::class) +class DifficulteExtensionTest ( + val id: Int, + val libelle: String +) { + @Test + fun toModelTest() { + val DTO = DifficulteDTO(id,libelle) + val model = DTO.ToModel() + + Assert.assertEquals(id, model.id) + Assert.assertEquals(libelle, model.libelle) + } + + companion object { + @JvmStatic + @Parameterized.Parameters( + name = "Convertir dto to model" + ) + fun getTestActionData(): Iterable> { + return arrayListOf( + arrayOf(1, ""), + arrayOf(0, ""), + arrayOf(1, "reponse"), + arrayOf(0, "une autre reponse") + ) + } + } +} \ No newline at end of file diff --git a/android/app/src/test/java/fr/iut/sciencequest/extension/JeuExtensionTest.kt b/android/app/src/test/java/fr/iut/sciencequest/extension/JeuExtensionTest.kt new file mode 100644 index 0000000..fe72325 --- /dev/null +++ b/android/app/src/test/java/fr/iut/sciencequest/extension/JeuExtensionTest.kt @@ -0,0 +1,42 @@ +package fr.iut.sciencequest.extension + +import fr.iut.sciencequest.model.dto.JeuDTO +import fr.iut.sciencequest.model.dto.difficulte.DifficulteDTO +import fr.iut.sciencequest.model.dto.extensions.ToModel +import fr.iut.sciencequest.model.dto.extensions.toModel +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized + +@RunWith(Parameterized::class) +class JeuExtensionTest ( + val id: Int, + val nbPartie: UInt, + val libelle: String +) { + @Test + fun toModelTest() { + val DTO = JeuDTO(id,libelle,nbPartie) + val model = DTO.toModel() + + Assert.assertEquals(id, model.id) + Assert.assertEquals(libelle, model.nom) + Assert.assertEquals(nbPartie, model.nbrParties) + } + + companion object { + @JvmStatic + @Parameterized.Parameters( + name = "Convertir dto to model" + ) + fun getTestActionData(): Iterable> { + return arrayListOf( + arrayOf(1, 1, ""), + arrayOf(0, 1, ""), + arrayOf(1, 2, "reponse"), + arrayOf(0, 2, "une autre reponse") + ) + } + } +} \ No newline at end of file diff --git a/android/app/src/test/java/fr/iut/sciencequest/extension/ReponseDTOToModelTest.kt b/android/app/src/test/java/fr/iut/sciencequest/extension/ReponseDTOToModelTest.kt new file mode 100644 index 0000000..2119140 --- /dev/null +++ b/android/app/src/test/java/fr/iut/sciencequest/extension/ReponseDTOToModelTest.kt @@ -0,0 +1,49 @@ +package fr.iut.sciencequest.extension + +import fr.iut.sciencequest.model.dto.ScientifiqueDTOs.ScientifiqueDTO +import fr.iut.sciencequest.model.dto.extensions.ToModel +import fr.iut.sciencequest.model.dto.question.QuestionDTO +import fr.iut.sciencequest.model.dto.reponse.ReponseDTO +import fr.iut.sciencequest.model.metier.Scientifique +import fr.iut.sciencequest.model.metier.question.Question +import fr.iut.sciencequest.model.metier.reponse.Reponse +import fr.iut.sciencequest.stub.StubScientifique1 +import fr.iut.sciencequest.stub.StubScientifique2 +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized + +@RunWith(Parameterized::class) +class ReponseDTOToModelTest ( + val id: Int, + val reponse: String, + val question: QuestionDTO, + val scientifique: ScientifiqueDTO +) { + @Test + fun toModelTest() { + val DTO = ReponseDTO(id,reponse,question,scientifique) + val model = DTO.ToModel() + + Assert.assertEquals(id, model.id) + Assert.assertEquals(reponse, model.reponse) + Assert.assertEquals(question.id, model.question.id) + Assert.assertEquals(scientifique.id, model.scientifique.id) + } + + companion object { + @JvmStatic + @Parameterized.Parameters( + name = "Convertir dto to model" + ) + fun getTestActionData(): Iterable> { + return arrayListOf( + arrayOf(1, "", QuestionDTO(1,"", emptyList()),StubScientifique1), + arrayOf(0, "", QuestionDTO(1,"", emptyList()),StubScientifique2), + arrayOf(1, "reponse",QuestionDTO(2,"", emptyList()),StubScientifique1), + arrayOf(0, "une autre reponse",QuestionDTO(2,"", emptyList()),StubScientifique2) + ) + } + } +} \ No newline at end of file diff --git a/android/app/src/test/java/fr/iut/sciencequest/extension/joueur/JoueurSimpleExtensionTest.kt b/android/app/src/test/java/fr/iut/sciencequest/extension/joueur/JoueurSimpleExtensionTest.kt new file mode 100644 index 0000000..c8a46d9 --- /dev/null +++ b/android/app/src/test/java/fr/iut/sciencequest/extension/joueur/JoueurSimpleExtensionTest.kt @@ -0,0 +1,53 @@ +package fr.iut.sciencequest.extension.joueur + +import fr.iut.sciencequest.model.dto.extensions.toModel +import fr.iut.sciencequest.model.dto.joueur.JoueurSimpleDTO +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized + +@RunWith(Parameterized::class) +class JoueurSimpleExtensionTest ( + val id: Int, + val nom: String +) { + @Test + fun toModelTest() { + val DTO = JoueurSimpleDTO(id,nom) + val model = DTO.toModel() + + Assert.assertEquals(id, model.id) + Assert.assertEquals(nom, model.pseudo) + } + + @Test + fun listetoModelTest() { + val DTO = listOf( + JoueurSimpleDTO(id,nom), + JoueurSimpleDTO(id + 1,nom + "1"), + JoueurSimpleDTO(id + 2,nom + "2") + ) + val model = DTO.toModel() + + for (index in 0..model.size) { + Assert.assertEquals(id + index, model[index].id) + Assert.assertEquals(nom + index.toString(), model[index].pseudo) + } + } + + companion object { + @JvmStatic + @Parameterized.Parameters( + name = "Convertir dto to model" + ) + fun getTestActionData(): Iterable> { + return arrayListOf( + arrayOf(1, ""), + arrayOf(0, ""), + arrayOf(1, "pseudo"), + arrayOf(0, "un autre pseudo") + ) + } + } +} \ No newline at end of file diff --git a/android/app/src/test/java/fr/iut/sciencequest/model/JeuTest.kt b/android/app/src/test/java/fr/iut/sciencequest/model/JeuTest.kt new file mode 100644 index 0000000..e2ce32e --- /dev/null +++ b/android/app/src/test/java/fr/iut/sciencequest/model/JeuTest.kt @@ -0,0 +1,39 @@ +package fr.iut.sciencequest.model + +import fr.iut.sciencequest.model.metier.Difficulte +import fr.iut.sciencequest.model.metier.Jeu +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized + +@RunWith(Parameterized::class) +class JeuTest ( + private val id: Int, + private val nbParties: UInt, + private val libelle: String +) { + @Test + fun constructorTest() { + val jeu = Jeu(id,libelle,nbParties) + + Assert.assertEquals(id, jeu.id) + Assert.assertEquals(libelle, jeu.nom) + Assert.assertEquals(nbParties, jeu.nbrParties) + } + + companion object { + @JvmStatic + @Parameterized.Parameters( + name = "Creation d'un jeu d'id {0}, de nom {2} et avec {1} parties" + ) + fun getTestActionData(): Iterable> { + return arrayListOf( + arrayOf(1, 0, ""), + arrayOf(0, 0, ""), + arrayOf(1, 1, "jeu"), + arrayOf(0, 1, "un autre jeu") + ) + } + } +} \ No newline at end of file diff --git a/android/app/src/test/java/fr/iut/sciencequest/viewModel/kahoot/KahootAjouterPointTest.kt b/android/app/src/test/java/fr/iut/sciencequest/viewModel/kahoot/KahootAjouterPointTest.kt index 472220b..b28e513 100644 --- a/android/app/src/test/java/fr/iut/sciencequest/viewModel/kahoot/KahootAjouterPointTest.kt +++ b/android/app/src/test/java/fr/iut/sciencequest/viewModel/kahoot/KahootAjouterPointTest.kt @@ -2,6 +2,7 @@ package fr.iut.sciencequest.viewModel.kahoot import android.os.Looper import fr.iut.sciencequest.model.dto.extensions.ToModel +import fr.iut.sciencequest.model.repositories.kahootPartie.KahootStubRepository import fr.iut.sciencequest.model.repositories.question.QuestionStubRepository import fr.iut.sciencequest.stub.StubQuestionWithReponses import fr.iut.sciencequest.stub.StubQuestionWithReponses2 @@ -37,30 +38,27 @@ class KahootAjouterPointTest( } every { Looper.getMainLooper() } returns looper - val repo = QuestionStubRepository() - repo.setQuestionsStub(arrayListOf( - StubQuestionWithReponses.ToModel() - )) + val repo = KahootStubRepository() viewModel = KahootViewModel(repo) } @Test fun ajouterPointsJustes() { - viewModel.ajouterPoints(duree.toLong()) + viewModel.ajouterPoints(duree.toLong(),1) Assert.assertEquals(expectedPoints, viewModel.uiState.value.nbPoints) } @Test fun ajouterPointsAvecTempsNegatif() { Assert.assertThrows(IllegalArgumentException::class.java) { - viewModel.ajouterPoints(-1) + viewModel.ajouterPoints(-1,1) } } @Test fun ajouterPointsAvecTempsTropLent() { Assert.assertThrows(IllegalArgumentException::class.java) { - viewModel.ajouterPoints(11_000) + viewModel.ajouterPoints(11_000,1) } } diff --git a/android/app/src/test/java/fr/iut/sciencequest/viewModel/kahoot/KahootJoinViewModelTest.kt b/android/app/src/test/java/fr/iut/sciencequest/viewModel/kahoot/KahootJoinViewModelTest.kt new file mode 100644 index 0000000..03c2bbf --- /dev/null +++ b/android/app/src/test/java/fr/iut/sciencequest/viewModel/kahoot/KahootJoinViewModelTest.kt @@ -0,0 +1,42 @@ +package fr.iut.sciencequest.viewModel.kahoot + +import fr.iut.sciencequest.viewModels.KahootJoinViewModel +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized + +@RunWith(Parameterized::class) +class KahootJoinViewModelTest( + val code: String +) { + + @Test + fun TestSetGoodCode() { + val vm = KahootJoinViewModel() + vm.setCode(code) + if (code.length <= 5) { + Assert.assertEquals(code, vm.uiState.value.code) + } else { + Assert.assertEquals("", vm.uiState.value.code) + } + } + + companion object { + @JvmStatic + @Parameterized.Parameters( + name = "Quand le joueur rentre le code {0}" + ) + fun getTestActionData(): Iterable> { + return arrayListOf( + arrayOf("AAA"), + arrayOf("A"), + arrayOf("AA"), + arrayOf("A54"), + arrayOf("B87AB"), + arrayOf("B87ABaaa"), + arrayOf("a7bB") + ) + } + } +} \ No newline at end of file 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 index 4af7af7..9f602f7 100644 --- 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 @@ -3,6 +3,7 @@ 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.kahootPartie.KahootStubRepository import fr.iut.sciencequest.model.repositories.question.QuestionStubRepository import fr.iut.sciencequest.stub.StubQuestionWithReponses import fr.iut.sciencequest.stub.StubQuestionWithReponses2 @@ -38,19 +39,15 @@ class KahootLancerPartieTest { every { Looper.getMainLooper() } returns looper val question = StubQuestionWithReponses.ToModel() - val repo = QuestionStubRepository() - repo.setQuestionsStub(arrayListOf( - StubQuestionWithReponses.ToModel(), - StubQuestionWithReponses2.ToModel() - )) + val repo = KahootStubRepository() 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()) + Assert.assertEquals(StubQuestionWithReponses.id, viewModel.uiState.value.questionPartie.question!!.id) + Assert.assertEquals(StubQuestionWithReponses.question, viewModel.uiState.value.questionPartie.question!!.question) + Assert.assertEquals(StubQuestionWithReponses.reponses.count(), viewModel.uiState.value.questionPartie.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()) + Assert.assertEquals(StubQuestionWithReponses2.id, viewModel.uiState.value.questionPartie.question!!.id) + Assert.assertEquals(StubQuestionWithReponses2.question, viewModel.uiState.value.questionPartie.question!!.question) + Assert.assertEquals(StubQuestionWithReponses2.reponses.count(), viewModel.uiState.value.questionPartie.question!!.reponses.count()) } } \ No newline at end of file