From 6f2c49026ad6d490c5d1f82291dbcd99569d81b2 Mon Sep 17 00:00:00 2001 From: Yisroel Baum Date: Wed, 19 Aug 2026 22:43:35 +0300 Subject: [PATCH] test sparse placement controls --- .../website/cypress/e2e/set-scheduling.cy.ts | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/frontend/website/cypress/e2e/set-scheduling.cy.ts b/frontend/website/cypress/e2e/set-scheduling.cy.ts index 25a5b4a..d7114d0 100644 --- a/frontend/website/cypress/e2e/set-scheduling.cy.ts +++ b/frontend/website/cypress/e2e/set-scheduling.cy.ts @@ -67,6 +67,13 @@ const overloadedBibleLayout = { ), } +const sparseBibleLayout = { + ...bibleLayout, + levels: bibleLayout.levels.map((level) => + level.id === 3 ? { ...level, elementCount: 4 } : level, + ), +} + const scheduleDetail = { schedule: { id: 73, @@ -201,7 +208,7 @@ describe('set scheduling', () => { levelId: 3, startDate: '2026-08-10', targetDate: '2026-08-12', - workloadPlacement: 'middle', + workloadPlacement: 'spread', }) request.reply({ statusCode: 201, body: scheduleDetail }) }).as('createSchedule') @@ -286,6 +293,42 @@ describe('set scheduling', () => { cy.wait('@createSchedule') }) + it('packs sparse assignment days where the user chooses', () => { + cy.intercept('GET', '**/api/sets/41', { + statusCode: 200, + body: sparseBibleLayout, + }).as('layout') + cy.intercept('POST', '**/api/schedules', (request) => { + expect(request.body).to.deep.equal({ + setId: 41, + levelId: 3, + startDate: '2026-08-10', + targetDate: '2026-08-15', + workloadPlacement: 'end', + }) + request.reply({ statusCode: 201, body: scheduleDetail }) + }).as('createSchedule') + + cy.visit('/sets/41/schedules/new') + cy.wait('@me') + cy.wait('@layout') + cy.get('#schedule-level').select('3') + cy.get('#schedule-start-date').type('2026-08-10') + cy.get('#schedule-target-date').type('2026-08-15') + + cy.get('[data-workload-placement]').should('be.visible').within(() => { + cy.contains('legend', 'Assignment days').should('be.visible') + cy.contains('Spread evenly').should('be.visible') + cy.contains('At the start').should('be.visible') + cy.contains('In the middle').should('be.visible') + cy.contains('At the end').should('be.visible') + cy.get('input[value="spread"]').should('be.checked') + cy.get('input[value="end"]').check() + }) + cy.get('form').submit() + cy.wait('@createSchedule') + }) + it('validates the schedule form before submitting', () => { cy.intercept('GET', '**/api/sets/41', { statusCode: 200,