@lilaquadrat/studio 13.0.0 → 13.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/lib/helpers.d.ts +2 -1
  2. package/lib/helpers.js +2 -1
  3. package/lib/helpers.js.map +1 -1
  4. package/lib/models.d.ts +3 -1
  5. package/lib/models.js +3 -1
  6. package/lib/models.js.map +1 -1
  7. package/lib/services.d.ts +4 -1
  8. package/lib/services.js +4 -1
  9. package/lib/services.js.map +1 -1
  10. package/lib/src/aggegations/genericData.aggregation.js +1 -1
  11. package/lib/src/aggegations/genericData.aggregation.js.map +1 -1
  12. package/lib/src/helpers/escapeRegExp.d.ts +2 -0
  13. package/lib/src/helpers/escapeRegExp.js +5 -0
  14. package/lib/src/helpers/escapeRegExp.js.map +1 -0
  15. package/lib/src/helpers/shiftPlanningSchemas.d.ts +6 -0
  16. package/lib/src/helpers/shiftPlanningSchemas.js +1 -0
  17. package/lib/src/helpers/shiftPlanningSchemas.js.map +1 -1
  18. package/lib/src/interfaces/CategoryBookedTime.d.ts +5 -0
  19. package/lib/src/interfaces/CategoryBookedTime.js +2 -0
  20. package/lib/src/interfaces/CategoryBookedTime.js.map +1 -0
  21. package/lib/src/interfaces/TrackerDailyLimitGroup.d.ts +7 -0
  22. package/lib/src/interfaces/TrackerDailyLimitGroup.js +2 -0
  23. package/lib/src/interfaces/TrackerDailyLimitGroup.js.map +1 -0
  24. package/lib/src/interfaces/TrackerDailyLimitInput.d.ts +8 -0
  25. package/lib/src/interfaces/TrackerDailyLimitInput.js +2 -0
  26. package/lib/src/interfaces/TrackerDailyLimitInput.js.map +1 -0
  27. package/lib/src/interfaces/TrackerStatisticsBucket.d.ts +13 -0
  28. package/lib/src/interfaces/TrackerStatisticsBucket.js +2 -0
  29. package/lib/src/interfaces/TrackerStatisticsBucket.js.map +1 -0
  30. package/lib/src/interfaces/TrackerStatisticsRange.d.ts +6 -0
  31. package/lib/src/interfaces/TrackerStatisticsRange.js +2 -0
  32. package/lib/src/interfaces/TrackerStatisticsRange.js.map +1 -0
  33. package/lib/src/interfaces/TrackerTimeSum.d.ts +4 -0
  34. package/lib/src/interfaces/TrackerTimeSum.js +2 -0
  35. package/lib/src/interfaces/TrackerTimeSum.js.map +1 -0
  36. package/lib/src/models/editor.model.js +2 -0
  37. package/lib/src/models/editor.model.js.map +1 -1
  38. package/lib/src/models/permissions.model.js +10 -0
  39. package/lib/src/models/permissions.model.js.map +1 -1
  40. package/lib/src/models/shift.model.js +1 -1
  41. package/lib/src/models/shift.model.js.map +1 -1
  42. package/lib/src/models/storage.model.js +2 -1
  43. package/lib/src/models/storage.model.js.map +1 -1
  44. package/lib/src/models/timeTrackingProject.model.d.ts +4 -0
  45. package/lib/src/models/timeTrackingProject.model.js +57 -0
  46. package/lib/src/models/timeTrackingProject.model.js.map +1 -0
  47. package/lib/src/models/timeTrackingProjectAllocation.model.d.ts +4 -0
  48. package/lib/src/models/timeTrackingProjectAllocation.model.js +38 -0
  49. package/lib/src/models/timeTrackingProjectAllocation.model.js.map +1 -0
  50. package/lib/src/models/tracker.model.js +18 -2
  51. package/lib/src/models/tracker.model.js.map +1 -1
  52. package/lib/src/services/lists.service.js +33 -0
  53. package/lib/src/services/lists.service.js.map +1 -1
  54. package/lib/src/services/shiftPlans.service.d.ts +1 -1
  55. package/lib/src/services/shiftPlans.service.js +10 -4
  56. package/lib/src/services/shiftPlans.service.js.map +1 -1
  57. package/lib/src/services/shifts.service.d.ts +3 -0
  58. package/lib/src/services/shifts.service.js +25 -6
  59. package/lib/src/services/shifts.service.js.map +1 -1
  60. package/lib/src/services/timeTrackingProjectAllocations.service.d.ts +20 -0
  61. package/lib/src/services/timeTrackingProjectAllocations.service.js +85 -0
  62. package/lib/src/services/timeTrackingProjectAllocations.service.js.map +1 -0
  63. package/lib/src/services/timeTrackingProjects.service.d.ts +18 -0
  64. package/lib/src/services/timeTrackingProjects.service.js +78 -0
  65. package/lib/src/services/timeTrackingProjects.service.js.map +1 -0
  66. package/lib/src/services/tracker.service.d.ts +150 -0
  67. package/lib/src/services/tracker.service.js +732 -0
  68. package/lib/src/services/tracker.service.js.map +1 -0
  69. package/lib/tests/listsSingle.spec.d.ts +1 -0
  70. package/lib/tests/listsSingle.spec.js +56 -0
  71. package/lib/tests/listsSingle.spec.js.map +1 -0
  72. package/lib/tests/shiftPlanning.spec.js +63 -11
  73. package/lib/tests/shiftPlanning.spec.js.map +1 -1
  74. package/lib/tests/shiftPlansList.spec.js +1 -1
  75. package/lib/tests/shiftPlansList.spec.js.map +1 -1
  76. package/lib/tests/storageModel.spec.d.ts +1 -0
  77. package/lib/tests/storageModel.spec.js +12 -0
  78. package/lib/tests/storageModel.spec.js.map +1 -0
  79. package/lib/tests/timeTrackingProjectAllocationModel.spec.d.ts +1 -0
  80. package/lib/tests/timeTrackingProjectAllocationModel.spec.js +54 -0
  81. package/lib/tests/timeTrackingProjectAllocationModel.spec.js.map +1 -0
  82. package/lib/tests/timeTrackingProjectAllocationsService.spec.d.ts +1 -0
  83. package/lib/tests/timeTrackingProjectAllocationsService.spec.js +153 -0
  84. package/lib/tests/timeTrackingProjectAllocationsService.spec.js.map +1 -0
  85. package/lib/tests/timeTrackingProjectModel.spec.d.ts +1 -0
  86. package/lib/tests/timeTrackingProjectModel.spec.js +151 -0
  87. package/lib/tests/timeTrackingProjectModel.spec.js.map +1 -0
  88. package/lib/tests/timeTrackingProjectsService.spec.d.ts +1 -0
  89. package/lib/tests/timeTrackingProjectsService.spec.js +256 -0
  90. package/lib/tests/timeTrackingProjectsService.spec.js.map +1 -0
  91. package/lib/tests/trackerAllUsers.spec.d.ts +1 -0
  92. package/lib/tests/trackerAllUsers.spec.js +46 -0
  93. package/lib/tests/trackerAllUsers.spec.js.map +1 -0
  94. package/lib/tests/trackerAllocationUsage.spec.d.ts +1 -0
  95. package/lib/tests/trackerAllocationUsage.spec.js +36 -0
  96. package/lib/tests/trackerAllocationUsage.spec.js.map +1 -0
  97. package/lib/tests/trackerBookings.spec.d.ts +1 -0
  98. package/lib/tests/trackerBookings.spec.js +67 -0
  99. package/lib/tests/trackerBookings.spec.js.map +1 -0
  100. package/lib/tests/trackerCategories.spec.d.ts +1 -0
  101. package/lib/tests/trackerCategories.spec.js +40 -0
  102. package/lib/tests/trackerCategories.spec.js.map +1 -0
  103. package/lib/tests/trackerDailyLimit.spec.d.ts +1 -0
  104. package/lib/tests/trackerDailyLimit.spec.js +84 -0
  105. package/lib/tests/trackerDailyLimit.spec.js.map +1 -0
  106. package/lib/tests/trackerModel.spec.d.ts +1 -0
  107. package/lib/tests/trackerModel.spec.js +73 -0
  108. package/lib/tests/trackerModel.spec.js.map +1 -0
  109. package/lib/tests/trackerShiftAssignment.spec.d.ts +1 -0
  110. package/lib/tests/trackerShiftAssignment.spec.js +125 -0
  111. package/lib/tests/trackerShiftAssignment.spec.js.map +1 -0
  112. package/lib/tests/trackerShiftBookings.spec.d.ts +1 -0
  113. package/lib/tests/trackerShiftBookings.spec.js +58 -0
  114. package/lib/tests/trackerShiftBookings.spec.js.map +1 -0
  115. package/lib/tests/trackerShiftPlans.spec.d.ts +1 -0
  116. package/lib/tests/trackerShiftPlans.spec.js +251 -0
  117. package/lib/tests/trackerShiftPlans.spec.js.map +1 -0
  118. package/lib/tests/trackerWholePlanStatistics.spec.d.ts +1 -0
  119. package/lib/tests/trackerWholePlanStatistics.spec.js +41 -0
  120. package/lib/tests/trackerWholePlanStatistics.spec.js.map +1 -0
  121. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.service.js","sourceRoot":"","sources":["../../../src/services/tracker.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,56 @@
1
+ import { afterAll, beforeAll, beforeEach, describe, expect, it, jest } from '@jest/globals';
2
+ import { MongoClient, ObjectId } from 'mongodb';
3
+ import listsService from '../src/services/lists.service.js';
4
+ import ListsModel from '../src/models/lists.model.js';
5
+ import PlanModel from '../src/models/shiftPlan.model.js';
6
+ // mongo-mock cannot execute aggregation pipelines; opt in with a dedicated, disposable database.
7
+ const mongoUrl = process.env.MONGODB_TEST_URL;
8
+ const integration = mongoUrl ? describe : describe.skip;
9
+ const options = { company: 'hotel', project: 'hotel-project', user: 'planner', app: 'studio' };
10
+ const scope = { company: options.company, project: options.project };
11
+ integration('list single aggregation', () => {
12
+ const client = new MongoClient(mongoUrl ?? 'mongodb://localhost:27017');
13
+ const database = client.db(`lists-single-tests-${new ObjectId().toHexString()}`);
14
+ const lists = database.collection(ListsModel.collection);
15
+ const plans = database.collection(PlanModel.collection);
16
+ const insertPlan = async (name, extra = {}) => {
17
+ const _id = new ObjectId();
18
+ await plans.insertOne({ _id, ...scope, name, timeZone: 'Europe/Berlin', settingsOverrides: {}, ...extra });
19
+ return _id;
20
+ };
21
+ const insertList = async (extra = {}) => {
22
+ const _id = new ObjectId();
23
+ await lists.insertOne({ _id, ...scope, name: 'Hotel staff', mode: 'contact', state: 'open', agreements: [], categories: [], ...extra });
24
+ return _id;
25
+ };
26
+ beforeAll(async () => {
27
+ await client.connect();
28
+ jest.spyOn(ListsModel, 'db', 'get').mockReturnValue(lists);
29
+ });
30
+ beforeEach(async () => {
31
+ await Promise.all([lists.deleteMany({}), plans.deleteMany({})]);
32
+ });
33
+ afterAll(async () => {
34
+ jest.restoreAllMocks();
35
+ try {
36
+ await database.dropDatabase();
37
+ }
38
+ finally {
39
+ await client.close();
40
+ }
41
+ });
42
+ it('resolves the linked plan name without leaking the lookup array', async () => {
43
+ const plan = await insertPlan('Hotel week');
44
+ const listId = await insertList({ shiftPlan: plan });
45
+ const single = await listsService.single(listId, undefined, options);
46
+ expect(single?.shiftPlanName).toBe('Hotel week');
47
+ expect(single).not.toHaveProperty('shiftPlanLookup');
48
+ });
49
+ it('leaves the name empty when the linked plan is missing or out of scope', async () => {
50
+ const missing = await insertList({ shiftPlan: new ObjectId() });
51
+ const unlinked = await insertList();
52
+ expect((await listsService.single(missing, undefined, options))?.shiftPlanName).toBeNull();
53
+ expect((await listsService.single(unlinked, undefined, options))?.shiftPlanName).toBeNull();
54
+ });
55
+ });
56
+ //# sourceMappingURL=listsSingle.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listsSingle.spec.js","sourceRoot":"","sources":["../../tests/listsSingle.spec.ts"],"names":[],"mappings":"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"}
@@ -73,6 +73,12 @@ async function setupPlan() {
73
73
  await createDays(created._id, options, [{ date: day, areas: areaLinks() }, { date: nextDay, areas: areaLinks() }]);
74
74
  return (await plansService.singlePlan(created._id, options));
75
75
  }
76
+ // Enforcement is derived from the plan's stored state, so tests expecting rule rejections publish their plan.
77
+ async function publishPlan(plan, planOptions = options) {
78
+ return (await plansService.changePlan(plan._id, planInput(plan.list ?? listId, {
79
+ name: plan.name, timeZone: plan.timeZone, settingsOverrides: plan.settingsOverrides, state: 'publish',
80
+ }), planOptions));
81
+ }
76
82
  async function otherProjectPlan(list, projectOptions, settingsOverrides = {}) {
77
83
  const area = await areasService.createWorkArea({ name: 'Housekeeping' }, projectOptions);
78
84
  const created = await plansService.createPlan(planInput(list, { settingsOverrides }), projectOptions);
@@ -412,6 +418,8 @@ describe('shift planning', () => {
412
418
  const memberOptions = { ...options, user: 'anna-account', app: 'members' };
413
419
  const own = await shiftsService.myShifts(customerId, {}, memberOptions);
414
420
  expect(own.all).toBe(1);
421
+ expect((await shiftsService.myShifts(customerId, { plan: plan._id }, memberOptions)).all).toBe(1);
422
+ expect((await shiftsService.myShifts(customerId, { plan: new ObjectId() }, memberOptions)).all).toBe(0);
415
423
  expect(Object.keys(own.data[0]).sort()).toEqual(['_id', 'area', 'breaks', 'day', 'end', 'list', 'plan', 'start', 'title']);
416
424
  expect(own.data[0].area).not.toHaveProperty('categoryIds');
417
425
  expect(own.data[0]).not.toHaveProperty('history');
@@ -465,7 +473,7 @@ describe('shift planning', () => {
465
473
  await shiftsService.createShift(plan._id, shiftInput(plan, planAreas(plan)[0].area), options);
466
474
  });
467
475
  it('records sickness against existing schedules, blocks new assignments and permits a local override', async () => {
468
- const plan = await setupPlan();
476
+ const plan = await publishPlan(await setupPlan());
469
477
  const shift = await shiftsService.createShift(plan._id, shiftInput(plan, planAreas(plan)[0].area), options);
470
478
  const absence = await absencesService.createAbsence({ customer: customerId, type: 'sickness', start: `${day}T00:00:00+02:00`, end: `${nextDay}T00:00:00+02:00` }, options);
471
479
  const existing = (await shiftsService.singleShift(plan._id, shift._id, options));
@@ -490,7 +498,7 @@ describe('shift planning', () => {
490
498
  expect(await HistoryModel.db.findOne({ 'history.parent': absence._id, 'history.reason': 'delete' })).not.toBeNull();
491
499
  });
492
500
  it('enforces qualifying staggered breaks and calculates net day/night working time', async () => {
493
- const plan = await setupPlan();
501
+ const plan = await publishPlan(await setupPlan());
494
502
  const enabled = policy();
495
503
  enabled.breaks.enabled = true;
496
504
  await settingsService.changeSettings({ settings: enabled }, options);
@@ -508,7 +516,7 @@ describe('shift planning', () => {
508
516
  }), options)).rejects.toThrow('SHIFT_PLANNING_RULE_VIOLATION');
509
517
  });
510
518
  it('accepts the exact work threshold but refuses a sufficiently long break taken too late', async () => {
511
- const plan = await setupPlan();
519
+ const plan = await publishPlan(await setupPlan());
512
520
  const settings = policy();
513
521
  settings.breaks.enabled = true;
514
522
  await settingsService.changeSettings({ settings }, options);
@@ -592,7 +600,7 @@ describe('shift planning', () => {
592
600
  expect(shift.workingTime[0]).toMatchObject({ daytimeMinutes: 0, nighttimeMinutes: minutes });
593
601
  });
594
602
  it('counts overnight work on both days for consecutive-day enforcement', async () => {
595
- const plan = await setupPlan();
603
+ const plan = await publishPlan(await setupPlan());
596
604
  const enabled = policy();
597
605
  enabled.maximumConsecutiveWorkingDays = { enabled: true, days: 1 };
598
606
  await settingsService.changeSettings({ settings: enabled }, options);
@@ -613,7 +621,7 @@ describe('shift planning', () => {
613
621
  await settingsService.changeSettings({ settings }, otherOptions);
614
622
  await ListsModel.db.insertOne({ ...list, _id: otherListId, project: otherOptions.project });
615
623
  await ParticipantsModel.db.insertOne({ ...participant, _id: otherParticipantId, list: otherListId, project: otherOptions.project });
616
- const otherPlan = await otherProjectPlan(otherListId, otherOptions);
624
+ const otherPlan = await publishPlan(await otherProjectPlan(otherListId, otherOptions), otherOptions);
617
625
  const next = shiftInput(otherPlan, planAreas(otherPlan)[0].area, { day: nextDay, assignments: [{ participant: otherParticipantId }] });
618
626
  await expect(shiftsService.createShift(otherPlan._id, next, otherOptions)).rejects.toThrow('SHIFT_PLANNING_RULE_VIOLATION');
619
627
  await plansService.changePlan(otherPlan._id, { ...planInput(otherListId),
@@ -622,7 +630,7 @@ describe('shift planning', () => {
622
630
  expect((await shiftsService.createShift(otherPlan._id, next, otherOptions)).violations).toEqual([]);
623
631
  });
624
632
  it('enforces a maximum daily working time per person and lets a plan override it', async () => {
625
- const plan = await setupPlan();
633
+ const plan = await publishPlan(await setupPlan());
626
634
  const area = planAreas(plan)[0].area;
627
635
  const settings = policy();
628
636
  settings.maximumDailyWorkMinutes = { enabled: true, minutes: 300 };
@@ -677,14 +685,14 @@ describe('shift planning', () => {
677
685
  await expect(shiftsService.changeShift(plan._id, new ObjectId(), { area: planAreas(plan)[0].area, day: dayId(plan, day), title: 'Missing', start: `${day}T12:00:00Z`, end: `${day}T13:00:00Z` }, options)).rejects.toThrow('SHIFT_NOT_FOUND');
678
686
  });
679
687
  it('rejects cross-project double booking and enforces the upcoming plan rest policy even when editing an earlier shift', async () => {
680
- const plan = await setupPlan();
688
+ const plan = await publishPlan(await setupPlan());
681
689
  const otherListId = new ObjectId();
682
690
  const otherParticipantId = new ObjectId();
683
691
  const otherOptions = { ...options, project: 'other-project' };
684
692
  await settingsService.changeSettings({ settings: policy() }, otherOptions);
685
693
  await ListsModel.db.insertOne({ ...list, _id: otherListId, project: otherOptions.project });
686
694
  await ParticipantsModel.db.insertOne({ ...participant, _id: otherParticipantId, project: otherOptions.project, list: otherListId });
687
- const otherPlan = await otherProjectPlan(otherListId, otherOptions, { minimumRest: { enabled: true, minutes: 660 } });
695
+ const otherPlan = await publishPlan(await otherProjectPlan(otherListId, otherOptions, { minimumRest: { enabled: true, minutes: 660 } }), otherOptions);
688
696
  const earlier = await shiftsService.createShift(plan._id, shiftInput(plan, planAreas(plan)[0].area), options);
689
697
  const later = await shiftsService.createShift(otherPlan._id, shiftInput(otherPlan, planAreas(otherPlan)[0].area, {
690
698
  day: nextDay, title: 'Next morning', assignments: [{ participant: otherParticipantId }],
@@ -736,7 +744,7 @@ describe('shift planning', () => {
736
744
  expect(assigned.user?.structures).toEqual([]);
737
745
  });
738
746
  it('rejects booking one person into overlapping shifts while allowing adjacency and other people', async () => {
739
- const plan = await setupPlan();
747
+ const plan = await publishPlan(await setupPlan());
740
748
  const area = planAreas(plan)[0].area;
741
749
  const morning = await shiftsService.createShift(plan._id, shiftInput(plan, area), options);
742
750
  expect(morning.violations).toEqual([]);
@@ -756,7 +764,7 @@ describe('shift planning', () => {
756
764
  }, options)).rejects.toThrow('SHIFT_PLANNING_RULE_VIOLATION');
757
765
  });
758
766
  it('rejects worsening an existing rest violation but allows improving it after settings changed', async () => {
759
- const plan = await setupPlan();
767
+ const plan = await publishPlan(await setupPlan());
760
768
  const earlier = await shiftsService.createShift(plan._id, shiftInput(plan, planAreas(plan)[0].area, { end: `${day}T20:00:00+02:00` }), options);
761
769
  await shiftsService.createShift(plan._id, shiftInput(plan, planAreas(plan)[0].area, {
762
770
  day: nextDay, start: `${nextDay}T08:00:00+02:00`, end: `${nextDay}T12:00:00+02:00`,
@@ -851,7 +859,7 @@ describe('shift planning', () => {
851
859
  const restaurant = await setupPlan();
852
860
  const eventsCreated = await plansService.createPlan(planInput(listId, { name: 'Events' }), options);
853
861
  await createDays(eventsCreated._id, options, [{ date: day, areas: areaLinks() }, { date: nextDay, areas: areaLinks() }]);
854
- const events = (await plansService.singlePlan(eventsCreated._id, options));
862
+ const events = await publishPlan((await plansService.singlePlan(eventsCreated._id, options)));
855
863
  const restaurantShift = await shiftsService.createShift(restaurant._id, shiftInput(restaurant, housekeepingAreaId), options);
856
864
  const eventsShift = await shiftsService.createShift(events._id, shiftInput(events, housekeepingAreaId, {
857
865
  assignments: [{ participant: secondParticipantId }],
@@ -897,6 +905,50 @@ describe('shift planning', () => {
897
905
  }] }, options);
898
906
  expect(await HistoryModel.db.countDocuments({ 'history.parent': shift._id })).toBe(count);
899
907
  });
908
+ describe('plan state rule enforcement', () => {
909
+ it('accepts and persists a rule-violating shift on a draft plan', async () => {
910
+ const plan = await setupPlan();
911
+ await shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId), options);
912
+ const conflicting = await shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId, {
913
+ start: `${day}T10:00:00+02:00`, end: `${day}T14:00:00+02:00`,
914
+ }), options);
915
+ expect(conflicting.violations).toContainEqual(expect.objectContaining({ rule: 'overlap' }));
916
+ expect(await ShiftModel.db.findOne({ _id: conflicting._id })).not.toBeNull();
917
+ });
918
+ it('accepts and persists a rule-violating assignment replacement on a draft plan', async () => {
919
+ const plan = await setupPlan();
920
+ const shift = await shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId, { assignments: [] }), options);
921
+ await shiftsService.createShift(plan._id, shiftInput(plan, receptionAreaId), options);
922
+ const replaced = await shiftsService.replaceAssignments(plan._id, shift._id, { assignments: [{ participant: participantId }] }, options);
923
+ expect(replaced.violations).toContainEqual(expect.objectContaining({ rule: 'overlap' }));
924
+ expect((await ShiftModel.db.findOne({ _id: shift._id })).assignments).toHaveLength(1);
925
+ });
926
+ it('still rejects a rule-violating shift on a published plan', async () => {
927
+ const plan = await publishPlan(await setupPlan());
928
+ await shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId), options);
929
+ await expect(shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId, {
930
+ start: `${day}T10:00:00+02:00`, end: `${day}T14:00:00+02:00`,
931
+ }), options)).rejects.toThrow('SHIFT_PLANNING_RULE_VIOLATION');
932
+ expect(await ShiftModel.db.countDocuments({ plan: plan._id })).toBe(1);
933
+ });
934
+ it('validates the whole plan on entering publish and persists the transition once resolved', async () => {
935
+ const plan = await setupPlan();
936
+ await shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId), options);
937
+ await shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId, {
938
+ start: `${day}T10:00:00+02:00`, end: `${day}T14:00:00+02:00`,
939
+ }), options);
940
+ const rejection = await plansService.changePlan(plan._id, planInput(listId, { name: plan.name, timeZone: plan.timeZone, state: 'publish' }), options)
941
+ .catch((error) => error);
942
+ expect(rejection.message).toBe('SHIFT_PLANNING_RULE_VIOLATION');
943
+ expect(rejection.errors?.[0].instancePath).toBe('/state');
944
+ expect((await ShiftPlanModel.db.findOne({ _id: plan._id })).state).not.toBe('publish');
945
+ const conflicts = await ShiftModel.db.find({ plan: plan._id }).sort({ start: 1, _id: 1 }).toArray();
946
+ await shiftsService.removeShift(plan._id, conflicts[1]._id, options);
947
+ const published = await plansService.changePlan(plan._id, planInput(listId, { name: plan.name, timeZone: plan.timeZone, state: 'publish' }), options);
948
+ expect(published.state).toBe('publish');
949
+ expect((await ShiftPlanModel.db.findOne({ _id: plan._id })).state).toBe('publish');
950
+ });
951
+ });
900
952
  describe('read-only shift autofill', () => {
901
953
  async function setupAutofill(changes = {}) {
902
954
  const plan = await setupPlan();