From 1693adce39a7e4c42501668c86fd40ec1768d07f Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Thu, 25 Apr 2024 18:48:13 +0200 Subject: [PATCH] Fix cypress test for due dates page --- .../pages/dashboard/DashboardAsideWidget.vue | 3 +- .../pages/dashboard/DashboardDueDatesPage.vue | 14 +++-- .../pages/dashboard/DashboardPersonsPage.vue | 2 +- cypress/e2e/appointments.cy.js | 41 ------------- cypress/e2e/dueDates.cy.js | 50 ++++++++++++++++ cypress/e2e/login.cy.js | 2 +- server/config/settings/local_daniel.py | 1 + .../course/creators/test_course.py | 58 +++++++++++++++++-- 8 files changed, 117 insertions(+), 54 deletions(-) delete mode 100644 cypress/e2e/appointments.cy.js create mode 100644 cypress/e2e/dueDates.cy.js diff --git a/client/src/pages/dashboard/DashboardAsideWidget.vue b/client/src/pages/dashboard/DashboardAsideWidget.vue index 934fd7eb..39278242 100644 --- a/client/src/pages/dashboard/DashboardAsideWidget.vue +++ b/client/src/pages/dashboard/DashboardAsideWidget.vue @@ -29,7 +29,8 @@ const displayDueDates = computed(() => { -
+ +

{{ $t("a.Termine") }}

diff --git a/client/src/pages/dashboard/DashboardDueDatesPage.vue b/client/src/pages/dashboard/DashboardDueDatesPage.vue index 4f39c7cc..5e96cd61 100644 --- a/client/src/pages/dashboard/DashboardDueDatesPage.vue +++ b/client/src/pages/dashboard/DashboardDueDatesPage.vue @@ -198,6 +198,7 @@ const selectedType = ref(dueDateTypes.value[0]); watch(selectedCourse, async () => { selectedSession.value = courseSessions.value[0]; selectedCircle.value = circles.value[0]; + selectedType.value = dueDateTypes.value[0]; }); @@ -225,37 +226,40 @@ watch(selectedCourse, async () => { >
-
+
+
+

{{ $t("dueDates.noDueDatesAvailable") }}

+
diff --git a/client/src/pages/dashboard/DashboardPersonsPage.vue b/client/src/pages/dashboard/DashboardPersonsPage.vue index 113bf29b..0eb57636 100644 --- a/client/src/pages/dashboard/DashboardPersonsPage.vue +++ b/client/src/pages/dashboard/DashboardPersonsPage.vue @@ -269,7 +269,7 @@ watch(selectedRegion, () => { diff --git a/cypress/e2e/appointments.cy.js b/cypress/e2e/appointments.cy.js deleted file mode 100644 index cc660032..00000000 --- a/cypress/e2e/appointments.cy.js +++ /dev/null @@ -1,41 +0,0 @@ -import { login } from "./helpers"; - -// constants -const COURSE_SELECT = "[data-cy=appointments-course-select]"; -const SESSION_SELECT = "[data-cy=appointments-session-select]"; -const CIRCLE_SELECT = "[data-cy=appointments-circle-select]"; -const APPOINTMENTS = "[data-cy=appointments-list]"; - -describe("appointments.cy.js", () => { - beforeEach(() => { - cy.manageCommand("cypress_reset"); - login("test-student2@example.com", "test"); - cy.visit("/course/test-lehrgang/appointments"); - }); - - it("preselects first course (Test Lehrgang)", () => { - cy.visit("/course/test-lehrgang/appointments"); - cy.get(COURSE_SELECT).should("contain", "Test Lehrgang"); - cy.get(SESSION_SELECT).should("contain", "Bern"); - cy.get(CIRCLE_SELECT).should("contain", "Alle"); - - cy.get(".cy-single-due-date").should("have.length", 5); - }); - - it("can filter by circle", () => { - cy.get(CIRCLE_SELECT).click(); - cy.get(CIRCLE_SELECT).contains("Fahrzeug").click(); - - // THEN - cy.get(APPOINTMENTS).should("not.contain", "Keine Termine"); - }); - - it("can switch course session", () => { - cy.get(SESSION_SELECT).click(); - cy.get(SESSION_SELECT).contains("Zürich").click(); - cy.get(SESSION_SELECT).should("contain", "Zürich"); - - // THEN - cy.get(APPOINTMENTS).should("contain", "Keine Termine"); - }); -}); diff --git a/cypress/e2e/dueDates.cy.js b/cypress/e2e/dueDates.cy.js new file mode 100644 index 00000000..4e9d3287 --- /dev/null +++ b/cypress/e2e/dueDates.cy.js @@ -0,0 +1,50 @@ +import { login } from "./helpers"; + +function selectDropboxItem(dropboxSelector, item) { + cy.get(dropboxSelector).click(); + cy.get(dropboxSelector).contains(item).click(); +} + +describe("appointments.cy.js", () => { + beforeEach(() => { + cy.manageCommand("cypress_reset"); + login("test-student2@example.com", "test"); + cy.visit("/dashboard/due-dates"); + }); + + it("can filter due dates by dropbox selects", () => { + cy.get('[data-cy="due-date-list"]').children().should("have.length", 7); + + // can filter by session + cy.get('[data-cy="select-session"]').click(); + selectDropboxItem('[data-cy="select-session"]', "Zürich"); + cy.get('[data-cy="due-date-list"]').children().should("have.length", 1); + selectDropboxItem('[data-cy="select-session"]', "Bern"); + cy.get('[data-cy="due-date-list"]').children().should("have.length", 6); + selectDropboxItem('[data-cy="select-session"]', "Alle"); + cy.get('[data-cy="due-date-list"]').children().should("have.length", 7); + + // can filter by circle + selectDropboxItem('[data-cy="select-circle"]', "Fahrzeug"); + cy.get('[data-cy="due-date-list"]').children().should("have.length", 6); + selectDropboxItem('[data-cy="select-circle"]', "Reisen"); + cy.get('[data-cy="due-date-list"]').children().should("have.length", 1); + selectDropboxItem('[data-cy="select-circle"]', "Alle"); + cy.get('[data-cy="due-date-list"]').children().should("have.length", 7); + + // can filter by types + selectDropboxItem('[data-cy="select-type"]', "Präsenzkurs"); + cy.get('[data-cy="due-date-list"]').children().should("have.length", 3); + selectDropboxItem('[data-cy="select-type"]', "Bewertung"); + cy.get('[data-cy="due-date-list"]').children().should("have.length", 1); + + // combination + selectDropboxItem('[data-cy="select-session"]', "Bern"); + selectDropboxItem('[data-cy="select-type"]', "Präsenzkurs"); + cy.get('[data-cy="due-date-list"]').children().should("have.length", 2); + selectDropboxItem('[data-cy="select-session"]', "Zürich"); + cy.get('[data-cy="due-date-list"]').children().should("have.length", 1); + selectDropboxItem('[data-cy="select-type"]', "Bewertung"); + cy.get('[data-cy="due-date-list"]').should("contain", "Keine Termine"); + }); +}); diff --git a/cypress/e2e/login.cy.js b/cypress/e2e/login.cy.js index c3321d09..57afc60a 100644 --- a/cypress/e2e/login.cy.js +++ b/cypress/e2e/login.cy.js @@ -28,7 +28,7 @@ describe("login.cy.js", () => { login("test-student1@example.com", "test"); cy.visit("/"); cy.request("/api/core/me").its("status").should("eq", 200); - cy.get('[data-cy="dashboard-title"]').should("contain", "Dashboard"); + cy.get('[data-cy="db-course-title"]').should("contain", "Test Lehrgang"); }); it("login will redirect to requested page", () => { diff --git a/server/config/settings/local_daniel.py b/server/config/settings/local_daniel.py index 55bfc8b2..e463c124 100644 --- a/server/config/settings/local_daniel.py +++ b/server/config/settings/local_daniel.py @@ -1,5 +1,6 @@ # pylint: disable=unused-wildcard-import,wildcard-import,wrong-import-position import os + from environs import Env script_path = os.path.abspath(__file__) diff --git a/server/vbv_lernwelt/course/creators/test_course.py b/server/vbv_lernwelt/course/creators/test_course.py index 2c30840a..59fb6a2e 100644 --- a/server/vbv_lernwelt/course/creators/test_course.py +++ b/server/vbv_lernwelt/course/creators/test_course.py @@ -1,6 +1,6 @@ from datetime import datetime -from dateutil.relativedelta import MO, relativedelta, TH, TU +from dateutil.relativedelta import MO, relativedelta, TH, TU, WE from django.utils import timezone from slugify import slugify from wagtail.rich_text import RichText @@ -164,14 +164,33 @@ def create_test_course( location="Handelsschule KV Bern, Zimmer 123, Eigerstrasse 16, 3012 Bern", trainer="Roland Grossenbacher, roland.grossenbacher@helvetia.ch", ) - tuesday_in_one_week = ( + wednesday_in_four_weeks = ( datetime.now() + relativedelta(weekday=TU) + relativedelta(weeks=1) ) csac.due_date.start = timezone.make_aware( - tuesday_in_one_week.replace(hour=8, minute=30, second=0, microsecond=0) + wednesday_in_four_weeks.replace(hour=8, minute=30, second=0, microsecond=0) ) csac.due_date.end = timezone.make_aware( - tuesday_in_one_week.replace(hour=17, minute=0, second=0, microsecond=0) + wednesday_in_four_weeks.replace(hour=17, minute=0, second=0, microsecond=0) + ) + csac.due_date.save() + + csac = CourseSessionAttendanceCourse.objects.create( + course_session=cs_bern, + learning_content=LearningContentAttendanceCourse.objects.get( + slug="test-lehrgang-lp-circle-reisen-lc-präsenzkurs-reisen" + ), + location="Handelsschule KV Bern, Zimmer 123, Eigerstrasse 16, 3012 Bern", + trainer="Roland Grossenbacher, roland.grossenbacher@helvetia.ch", + ) + wednesday_in_four_weeks = ( + datetime.now() + relativedelta(weekday=TU) + relativedelta(weeks=4) + ) + csac.due_date.start = timezone.make_aware( + wednesday_in_four_weeks.replace(hour=8, minute=15, second=0, microsecond=0) + ) + csac.due_date.end = timezone.make_aware( + wednesday_in_four_weeks.replace(hour=17, minute=30, second=0, microsecond=0) ) csac.due_date.save() @@ -237,6 +256,24 @@ def create_test_course( id=TEST_COURSE_SESSION_ZURICH_ID, start_date=now, ) + csac = CourseSessionAttendanceCourse.objects.create( + course_session=cs_zurich, + learning_content=LearningContentAttendanceCourse.objects.get( + slug="test-lehrgang-lp-circle-fahrzeug-lc-präsenzkurs-fahrzeug" + ), + location="siehe Anzeigetafel, Bildungszentrum Jungholz, Jungholzstrasse 43, 8050 Zürich-Oerlikon", + trainer="Catia Logarzo", + ) + wednesday_in_four_weeks = ( + datetime.now() + relativedelta(weekday=WE) + relativedelta(weeks=1) + ) + csac.due_date.start = timezone.make_aware( + wednesday_in_four_weeks.replace(hour=8, minute=30, second=0, microsecond=0) + ) + csac.due_date.end = timezone.make_aware( + wednesday_in_four_weeks.replace(hour=17, minute=0, second=0, microsecond=0) + ) + csac.due_date.save() region1 = CourseSessionGroup.objects.create( name="Region 1", @@ -603,8 +640,19 @@ def create_test_circle_reisen(lp): content_url="/course/test-lehrgang/media/handlungsfelder/reisen", ) - LearningSequenceFactory(title="Analyse", parent=circle) + LearningSequenceFactory(title="Training", parent=circle) + LearningUnitFactory(title="Präsenzkurs", parent=circle) + LearningContentAttendanceCourseFactory( + title="Präsenzkurs Reisen", + parent=circle, + ) + LearningUnitFactory(title="Unterlagen", parent=circle) + LearningContentPlaceholderFactory( + title="Unterlagen für den Unterricht", + parent=circle, + ) + LearningSequenceFactory(title="Analyse", parent=circle) # analyse lu = LearningUnitFactory( title="Bedarfsanalyse, Ist- und Soll-Situation",