Spaces:
Sleeping
Sleeping
| const assert = require('node:assert/strict'); | |
| const test = require('node:test'); | |
| const { importModule } = require('./support/load-browser-modules'); | |
| const { duplicateNameEmployees, employee, shift } = require('./support/fixtures'); | |
| // Presentation tests lock down the transport-to-timeline conversion layer. | |
| test('shift presentation builds a day-aligned horizon for overnight schedules', async () => { | |
| const { buildShiftPresentation } = await importModule('static/app/schedule/presentation.mjs'); | |
| const presentation = buildShiftPresentation( | |
| [ | |
| shift({ | |
| start: '2024-01-01T22:00:00', | |
| end: '2024-01-02T06:00:00', | |
| location: 'ICU', | |
| }), | |
| ], | |
| [employee('employee-1', 'Jordan')], | |
| 'employeeIdx', | |
| ); | |
| assert.equal(presentation.axis.columns.length, 2); | |
| assert.deepEqual( | |
| Array.from(presentation.axis.columns, (column) => column.label), | |
| ['Mon 1 Jan', 'Tue 2 Jan'], | |
| ); | |
| assert.equal(presentation.axis.horizonMinutes, 2880); | |
| assert.equal(presentation.rows[0].startOffsetMinutes, 1320); | |
| assert.equal(presentation.rows[0].endOffsetMinutes, 1800); | |
| assert.equal(presentation.rows[0].durationMinutes, 480); | |
| }); | |
| test('shift presentation preserves stable employee identity for duplicate names', async () => { | |
| const { buildShiftPresentation } = await importModule('static/app/schedule/presentation.mjs'); | |
| const presentation = buildShiftPresentation( | |
| [ | |
| shift({ id: 'shift-1', employeeIdx: 0 }), | |
| shift({ | |
| id: 'shift-2', | |
| start: '2024-01-01T22:00:00', | |
| end: '2024-01-02T06:00:00', | |
| location: 'ICU', | |
| employeeIdx: 1, | |
| }), | |
| ], | |
| duplicateNameEmployees(), | |
| 'employeeIdx', | |
| ); | |
| assert.equal(presentation.rows.length, 2); | |
| assert.equal(presentation.rows[0].employeeLabel, 'Alex'); | |
| assert.equal(presentation.rows[1].employeeLabel, 'Alex'); | |
| assert.notEqual(presentation.rows[0].employeeKey, presentation.rows[1].employeeKey); | |
| }); | |