Add e2e test for "weiter gehts"-button

This commit is contained in:
Daniel Egger 2022-08-31 18:36:10 +02:00
parent a457a1fff3
commit 26f373afe2
4 changed files with 48 additions and 47 deletions

View File

@ -1,37 +1,37 @@
<script setup lang="ts">
import ItCheckbox from '@/components/ui/ItCheckbox.vue';
import type {LearningContent, LearningSequence} from '@/types';
import {useCircleStore} from '@/stores/circle';
import {computed} from 'vue';
import ItCheckbox from '@/components/ui/ItCheckbox.vue'
import type { LearningContent, LearningSequence } from '@/types'
import { useCircleStore } from '@/stores/circle'
import { computed } from 'vue'
const props = defineProps<{
learningSequence: LearningSequence
}>()
const circleStore = useCircleStore();
const circleStore = useCircleStore()
function toggleCompleted(learningContent: LearningContent) {
circleStore.markCompletion(learningContent, !learningContent.completed);
circleStore.markCompletion(learningContent, !learningContent.completed)
}
const someFinished = computed(() => {
if (props.learningSequence && circleStore.circle) {
return circleStore.circle.someFinishedInLearningSequence(props.learningSequence.translation_key);
return circleStore.circle.someFinishedInLearningSequence(props.learningSequence.translation_key)
}
return false;
return false
})
const allFinished = computed(() => {
if (props.learningSequence && circleStore.circle) {
return circleStore.circle.allFinishedInLearningSequence(props.learningSequence.translation_key);
return circleStore.circle.allFinishedInLearningSequence(props.learningSequence.translation_key)
}
return false;
return false
})
const learningSequenceBorderClass = computed(() => {
let result = [];
let result = []
if (props.learningSequence && circleStore.circle) {
if (allFinished.value) {
result = ['border-l-4', 'border-l-green-500']
@ -42,9 +42,8 @@ const learningSequenceBorderClass = computed(() => {
}
}
return result;
});
return result
})
</script>
<template>
@ -57,15 +56,8 @@ const learningSequenceBorderClass = computed(() => {
<div>{{ learningSequence.minutes }} Minuten</div>
</div>
<div
class="bg-white px-4 lg:px-6 border border-gray-500"
:class="learningSequenceBorderClass"
>
<div
v-for="learningUnit in learningSequence.learningUnits"
:key="learningUnit.id"
class="pt-3 lg:pt-6"
>
<div class="bg-white px-4 lg:px-6 border border-gray-500" :class="learningSequenceBorderClass">
<div v-for="learningUnit in learningSequence.learningUnits" :key="learningUnit.id" class="pt-3 lg:pt-6">
<div class="pb-3 lg:pg-6 flex gap-4 text-blue-900" v-if="learningUnit.title">
<div class="font-semibold">{{ learningUnit.title }}</div>
<div>{{ learningUnit.minutes }} Minuten</div>
@ -79,48 +71,36 @@ const learningSequenceBorderClass = computed(() => {
<ItCheckbox
:modelValue="learningContent.completed"
@click="toggleCompleted(learningContent)"
:data-cy="`lc-${learningContent.slug}`"
:data-cy="`${learningContent.slug}`"
>
<span @click.stop="circleStore.openLearningContent(learningContent)">{{ learningContent.contents[0].type }}: {{ learningContent.title }}</span>
<span @click.stop="circleStore.openLearningContent(learningContent)"
>{{ learningContent.contents[0].type }}: {{ learningContent.title }}</span
>
</ItCheckbox>
</div>
<div
v-if="learningUnit.id"
class="hover:cursor-pointer"
@click="circleStore.openSelfEvaluation(learningUnit)"
>
<div
v-if="circleStore.calcSelfEvaluationStatus(learningUnit)"
class="flex items-center gap-4 pb-3 lg:pb-6"
>
<it-icon-smiley-happy class="w-8 h-8 flex-none"/>
<div v-if="learningUnit.id" class="hover:cursor-pointer" @click="circleStore.openSelfEvaluation(learningUnit)">
<div v-if="circleStore.calcSelfEvaluationStatus(learningUnit)" class="flex items-center gap-4 pb-3 lg:pb-6">
<it-icon-smiley-happy class="w-8 h-8 flex-none" />
<div>Selbsteinschätzung: Ich kann das.</div>
</div>
<div
v-else-if="circleStore.calcSelfEvaluationStatus(learningUnit) === false"
class="flex items-center gap-4 pb-3 lg:pb-6"
>
<it-icon-smiley-thinking class="w-8 h-8 flex-none"/>
<it-icon-smiley-thinking class="w-8 h-8 flex-none" />
<div>Selbsteinschätzung: Muss ich nochmals anschauen</div>
</div>
<div
v-else
class="flex items-center gap-4 pb-3 lg:pb-6"
>
<it-icon-smiley-neutral class="w-8 h-8 flex-none"/>
<div v-else class="flex items-center gap-4 pb-3 lg:pb-6">
<it-icon-smiley-neutral class="w-8 h-8 flex-none" />
<div>Selbsteinschätzung</div>
</div>
</div>
<hr v-if="!learningUnit.last" class="-mx-4 text-gray-500">
<hr v-if="!learningUnit.last" class="-mx-4 text-gray-500" />
</div>
</div>
</div>
</template>
<style scoped>
</style>
<style scoped></style>

View File

@ -53,6 +53,7 @@ onMounted(async () => {
<router-link
:to="`/learn/${props.learningPathSlug}`"
class="btn-text inline-flex items-center px-3 py-4 font-normal"
data-cy="back-to-learning-path-button"
>
<it-icon-arrow-left class="-ml-1 mr-1 h-5 w-5"></it-icon-arrow-left>
<span class="inline">zurück zum Lernpfad</span>

View File

@ -72,6 +72,7 @@ onMounted(async () => {
<router-link
class="mt-4 btn-blue"
:to="`/learn/${learningPathStore.learningPath.slug}/${learningPathStore.learningPath.nextLearningContent.parentCircle.slug}`"
data-cy="continue-button"
translate
>
Los geht's

View File

@ -37,4 +37,23 @@ describe("learningPath page", () => {
cy.url().should("include", "/learn/versicherungsvermittlerin/analyse");
cy.get('[data-cy="circle-title"]').should("contain", "Analyse");
});
it("weiter gehts button will open next circle", () => {
login("admin", "test");
cy.visit("/learn/unit-test-lernpfad");
// first click will open first circle
cy.get('[data-cy="continue-button"]').click();
cy.get('[data-cy="circle-title"]').should("contain", "Basis");
cy.get('[data-cy="back-to-learning-path-button"]').click();
// mark a learning content in second circle
cy.get('[data-cy="circle-unit-test-circle"]').click({ force: true });
cy.get('[data-cy="lc-reiseversicherung-7"] > .cy-checkbox').click();
cy.get('[data-cy="back-to-learning-path-button"]').click();
// click on continue should go to unit-test-circle
cy.get('[data-cy="continue-button"]').click();
cy.get('[data-cy="circle-title"]').should("contain", "Unit-Test Circle");
});
});