@lilaquadrat/studio 12.2.0 → 13.0.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 (66) hide show
  1. package/lib/src/helpers/shiftPlanAllocation.d.ts +53 -0
  2. package/lib/src/helpers/shiftPlanAllocation.js +110 -0
  3. package/lib/src/helpers/shiftPlanAllocation.js.map +1 -0
  4. package/lib/src/helpers/shiftPlanCoverage.d.ts +2 -0
  5. package/lib/src/helpers/shiftPlanCoverage.js +4 -0
  6. package/lib/src/helpers/shiftPlanCoverage.js.map +1 -0
  7. package/lib/src/helpers/shiftPlanningTime.js +26 -2
  8. package/lib/src/helpers/shiftPlanningTime.js.map +1 -1
  9. package/lib/src/helpers/shiftPlanningValidation.d.ts +8 -2
  10. package/lib/src/helpers/shiftPlanningValidation.js +16 -0
  11. package/lib/src/helpers/shiftPlanningValidation.js.map +1 -1
  12. package/lib/src/helpers/structureMatch.js +3 -1
  13. package/lib/src/helpers/structureMatch.js.map +1 -1
  14. package/lib/src/interfaces/ListPlanningParticipant.d.ts +17 -0
  15. package/lib/src/interfaces/ListPlanningParticipant.js +2 -0
  16. package/lib/src/interfaces/ListPlanningParticipant.js.map +1 -0
  17. package/lib/src/interfaces/PlanCoveragePreparation.d.ts +17 -0
  18. package/lib/src/interfaces/PlanCoveragePreparation.js +2 -0
  19. package/lib/src/interfaces/PlanCoveragePreparation.js.map +1 -0
  20. package/lib/src/interfaces/PlanningParticipantsResult.d.ts +12 -0
  21. package/lib/src/interfaces/PlanningParticipantsResult.js +2 -0
  22. package/lib/src/interfaces/PlanningParticipantsResult.js.map +1 -0
  23. package/lib/src/interfaces/ShiftAutofillResult.d.ts +6 -0
  24. package/lib/src/interfaces/ShiftAutofillResult.js +2 -0
  25. package/lib/src/interfaces/ShiftAutofillResult.js.map +1 -0
  26. package/lib/src/interfaces/ShiftReportContextOptions.d.ts +9 -0
  27. package/lib/src/interfaces/ShiftReportContextOptions.js +2 -0
  28. package/lib/src/interfaces/ShiftReportContextOptions.js.map +1 -0
  29. package/lib/src/models/lists.model.js +2 -1
  30. package/lib/src/models/lists.model.js.map +1 -1
  31. package/lib/src/services/customers.service.d.ts +2 -2
  32. package/lib/src/services/customers.service.js +2 -2
  33. package/lib/src/services/customers.service.js.map +1 -1
  34. package/lib/src/services/listParticipants.service.d.ts +45 -8
  35. package/lib/src/services/listParticipants.service.js +320 -39
  36. package/lib/src/services/listParticipants.service.js.map +1 -1
  37. package/lib/src/services/lists.service.d.ts +2 -0
  38. package/lib/src/services/lists.service.js +28 -1
  39. package/lib/src/services/lists.service.js.map +1 -1
  40. package/lib/src/services/shiftPlanDays.service.d.ts +2 -0
  41. package/lib/src/services/shiftPlanDays.service.js +12 -0
  42. package/lib/src/services/shiftPlanDays.service.js.map +1 -1
  43. package/lib/src/services/shiftPlans.service.d.ts +2 -2
  44. package/lib/src/services/shiftPlans.service.js +67 -9
  45. package/lib/src/services/shiftPlans.service.js.map +1 -1
  46. package/lib/src/services/shifts.service.d.ts +20 -1
  47. package/lib/src/services/shifts.service.js +180 -26
  48. package/lib/src/services/shifts.service.js.map +1 -1
  49. package/lib/tests/listParticipantsPlanning.spec.js +406 -10
  50. package/lib/tests/listParticipantsPlanning.spec.js.map +1 -1
  51. package/lib/tests/listsServiceCreateExternalProducts.spec.js +18 -0
  52. package/lib/tests/listsServiceCreateExternalProducts.spec.js.map +1 -1
  53. package/lib/tests/shiftPlanCoverage.spec.d.ts +1 -0
  54. package/lib/tests/shiftPlanCoverage.spec.js +189 -0
  55. package/lib/tests/shiftPlanCoverage.spec.js.map +1 -0
  56. package/lib/tests/shiftPlanning.spec.js +430 -38
  57. package/lib/tests/shiftPlanning.spec.js.map +1 -1
  58. package/lib/tests/shiftPlanningTime.spec.d.ts +1 -0
  59. package/lib/tests/shiftPlanningTime.spec.js +90 -0
  60. package/lib/tests/shiftPlanningTime.spec.js.map +1 -0
  61. package/lib/tests/shiftPlansList.spec.d.ts +1 -0
  62. package/lib/tests/shiftPlansList.spec.js +161 -0
  63. package/lib/tests/shiftPlansList.spec.js.map +1 -0
  64. package/lib/tests/structureMatch.spec.js +42 -0
  65. package/lib/tests/structureMatch.spec.js.map +1 -1
  66. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- import { afterAll, beforeAll, beforeEach, describe, expect, it } from '@jest/globals';
1
+ import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, jest } from '@jest/globals';
2
2
  import mongodb from 'mongo-mock';
3
3
  import { ObjectId } from 'mongodb';
4
4
  import Models from '../src/classes/models.class.js';
@@ -6,9 +6,19 @@ import ListParticipantsModel from '../src/models/listsParticipants.model.js';
6
6
  import ListsModel from '../src/models/lists.model.js';
7
7
  import CustomersModel from '../src/models/customers.model.js';
8
8
  import StructureModel from '../src/models/structure.model.js';
9
+ import ShiftModel from '../src/models/shift.model.js';
10
+ import ShiftPlanModel from '../src/models/shiftPlan.model.js';
11
+ import SettingsModel from '../src/models/shiftPlanningSettings.model.js';
12
+ import AbsenceModel from '../src/models/employeeAbsence.model.js';
13
+ import AreaModel from '../src/models/workAreas.model.js';
9
14
  import listParticipantsService from '../src/services/listParticipants.service.js';
15
+ import CustomersService from '../src/services/customers.service.js';
16
+ import StructureService from '../src/services/structures.service.js';
10
17
  const options = { user: 'studio-account', app: 'editor-app', company: 'company', project: 'project' };
18
+ const planningOptions = { ...options, skip: 0, limit: 20, sort: { _id: 1 } };
11
19
  const listId = new ObjectId();
20
+ const shiftId = new ObjectId();
21
+ const workAreaId = new ObjectId();
12
22
  const categoryId = new ObjectId();
13
23
  const otherCategoryId = new ObjectId();
14
24
  const listStructureId = new ObjectId();
@@ -22,6 +32,15 @@ const conditions = () => [
22
32
  { structure: listStructureId.toString(), constraint: 'required', value: 'yes' },
23
33
  { structure: customerStructureId.toString(), grade: 'positive' },
24
34
  ];
35
+ const policy = () => ({
36
+ daytime: { start: '06:00', end: '22:00' }, nighttime: { start: '22:00', end: '06:00' },
37
+ maximumConsecutiveWorkingDays: { enabled: false, days: 6 },
38
+ maximumDailyWorkMinutes: { enabled: false, minutes: 480 },
39
+ minimumRest: { enabled: false, minutes: 660 },
40
+ breaks: { enabled: false, maximumContinuousWorkMinutes: 360, minimumQualifyingBreakMinutes: 15,
41
+ requirements: [{ afterWorkMinutes: 360, minimumTotalBreakMinutes: 30 }] },
42
+ absenceEnforcement: false,
43
+ });
25
44
  const participant = (id, user, state, category, answer = {}) => ({ _id: id, list: listId, user, company: options.company, project: options.project, state, category, agreements: [], ...answer });
26
45
  describe('planning participant candidates', () => {
27
46
  let client;
@@ -33,10 +52,15 @@ describe('planning participant candidates', () => {
33
52
  models.register('lists', ListsModel);
34
53
  models.register('customers', CustomersModel);
35
54
  models.register('structures', StructureModel);
55
+ models.register('shifts', ShiftModel);
56
+ models.register('workAreas', AreaModel);
57
+ models.register('shiftPlans', ShiftPlanModel);
58
+ models.register('shiftPlanningSettings', SettingsModel);
59
+ models.register('employeeAbsences', AbsenceModel);
36
60
  await Promise.all(models.injectDatabaseConnection(client, undefined, true));
37
61
  });
38
62
  beforeEach(async () => {
39
- for (const collection of [ListParticipantsModel.db, ListsModel.db, CustomersModel.db, StructureModel.db]) {
63
+ for (const collection of [ListParticipantsModel.db, ListsModel.db, CustomersModel.db, StructureModel.db, ShiftModel.db, AreaModel.db, ShiftPlanModel.db, SettingsModel.db, AbsenceModel.db]) {
40
64
  while (await collection.countDocuments({}))
41
65
  await collection.deleteOne({});
42
66
  }
@@ -44,6 +68,9 @@ describe('planning participant candidates', () => {
44
68
  categories: [{ _id: categoryId, id: 'housekeeping', name: 'Housekeeping' }, { _id: otherCategoryId, id: 'events', name: 'Events' }] });
45
69
  await StructureModel.db.insertOne({ _id: listStructureId, id: 's-string-1', model: 'listsParticipants', company: options.company, project: options.project, type: 'string', question: 'Driver license' });
46
70
  await StructureModel.db.insertOne({ _id: customerStructureId, id: 's-string-9', model: 'customers', company: options.company, type: 'string', question: 'Tier' });
71
+ await AreaModel.db.insertOne({ _id: workAreaId, company: options.company, project: options.project, name: 'Housekeeping' });
72
+ // Conditions live on the shift; the service resolves them from here instead of the request.
73
+ await ShiftModel.db.insertOne({ _id: shiftId, company: options.company, project: options.project, area: workAreaId, structures: conditions(), assignments: [] });
47
74
  await CustomersModel.db.insertOne({ _id: firstCustomerId, id: 'c1', company: options.company, type: 'person', name: 'Ada', prename: 'Lovelace', email: 'ada@example.org', 's-string-9': 'gold' });
48
75
  await CustomersModel.db.insertOne({ _id: secondCustomerId, id: 'c2', company: options.company, type: 'person', name: 'Ben', prename: '', email: 'ben@example.org' });
49
76
  await ListParticipantsModel.db.insertOne(participant(firstParticipantId, firstCustomerId, 'confirmed', 'housekeeping', { 's-string-1': 'yes' }));
@@ -53,31 +80,400 @@ describe('planning participant candidates', () => {
53
80
  afterAll(async () => {
54
81
  await client.close();
55
82
  });
83
+ afterEach(() => {
84
+ jest.restoreAllMocks();
85
+ });
56
86
  it('scores each candidate and orders the whole set best-first', async () => {
57
- const result = await listParticipantsService.planningParticipants(listId, conditions(), undefined, undefined, undefined, { ...options, skip: 0, limit: 20 });
87
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, { ...options, skip: 0, limit: 20 });
58
88
  expect(result.all).toBe(2);
59
89
  expect(result.data.map((entry) => entry._id.toString())).toEqual([firstParticipantId.toString(), secondParticipantId.toString()]);
60
- expect(result.data[0].match).toEqual({ state: 'fulfilled', score: 1, matched: 2, total: 2 });
90
+ expect(result.data[0].match).toEqual({ state: 'fulfilled', score: 1, normalizedScore: 4, matched: 2, total: 2 });
61
91
  expect(result.data[0].user?.name).toBe('Ada, Lovelace');
62
- expect(result.data[1].match).toEqual({ state: 'unfit', score: 0, matched: 0, total: 2 });
92
+ expect(result.data[1].match).toEqual({ state: 'unfit', score: 0, normalizedScore: 1, matched: 0, total: 2 });
63
93
  });
64
94
  it('ranks across pages rather than within one page', async () => {
65
- const firstPage = await listParticipantsService.planningParticipants(listId, conditions(), undefined, undefined, undefined, { ...options, skip: 0, limit: 1 });
66
- const secondPage = await listParticipantsService.planningParticipants(listId, conditions(), undefined, undefined, undefined, { ...options, skip: 1, limit: 1 });
95
+ const firstPage = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, { ...options, skip: 0, limit: 1 });
96
+ const secondPage = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, { ...options, skip: 1, limit: 1 });
67
97
  expect(firstPage.all).toBe(2);
68
98
  expect(firstPage.data.map((entry) => entry._id.toString())).toEqual([firstParticipantId.toString()]);
69
99
  expect(secondPage.data.map((entry) => entry._id.toString())).toEqual([secondParticipantId.toString()]);
100
+ expect(firstPage.data[0].match.normalizedScore).toBe(4);
101
+ expect(secondPage.data[0].match.normalizedScore).toBe(1);
102
+ });
103
+ it('ranks unfit candidates after feasible ones even when they score higher', async () => {
104
+ const feasibleId = new ObjectId();
105
+ const unfitId = new ObjectId();
106
+ const feasibleCustomerId = new ObjectId();
107
+ const unfitCustomerId = new ObjectId();
108
+ await CustomersModel.db.insertOne({ _id: feasibleCustomerId, id: 'c5', company: options.company, type: 'person', name: 'Eve', prename: '', email: 'eve@example.org' });
109
+ // The grade answer scores the candidate, but the missing required answer still makes it unfit.
110
+ await CustomersModel.db.insertOne({ _id: unfitCustomerId, id: 'c6', company: options.company, type: 'person', name: 'Fay', prename: '', email: 'fay@example.org', 's-string-9': 'gold' });
111
+ await ListParticipantsModel.db.insertOne(participant(feasibleId, feasibleCustomerId, 'confirmed', 'housekeeping', { 's-string-1': 'yes' }));
112
+ await ListParticipantsModel.db.insertOne(participant(unfitId, unfitCustomerId, 'confirmed', 'housekeeping'));
113
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, { ...options, skip: 0, limit: 20 });
114
+ const order = result.data.map((entry) => entry._id.toString());
115
+ const unfit = result.data.find((entry) => entry._id.toString() === unfitId.toString());
116
+ expect(unfit?.match).toEqual({ state: 'unfit', score: 1, normalizedScore: 4, matched: 1, total: 2 });
117
+ expect(order.indexOf(feasibleId.toString())).toBeLessThan(order.indexOf(unfitId.toString()));
70
118
  });
71
119
  it('keeps unavailable entries out of the candidate set', async () => {
72
- const result = await listParticipantsService.planningParticipants(listId, conditions(), undefined, undefined, undefined, { ...options, skip: 0, limit: 20 });
120
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, { ...options, skip: 0, limit: 20 });
73
121
  expect(result.data.some((entry) => entry._id.toString() === uncheckedParticipantId.toString())).toBe(false);
74
122
  });
75
123
  it('filters candidates by a work area category and ignores unknown categories', async () => {
76
- const filtered = await listParticipantsService.planningParticipants(listId, undefined, [categoryId], undefined, undefined, { ...options, skip: 0, limit: 20 });
124
+ const filtered = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: undefined, workArea: workAreaId }, undefined, [categoryId], undefined, { ...options, skip: 0, limit: 20 });
77
125
  expect(filtered.all).toBe(1);
78
126
  expect(filtered.data.map((entry) => entry._id.toString())).toEqual([firstParticipantId.toString()]);
79
- const unknown = await listParticipantsService.planningParticipants(listId, undefined, [new ObjectId()], undefined, undefined, { ...options, skip: 0, limit: 20 });
127
+ const unknown = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: undefined, workArea: workAreaId }, undefined, [new ObjectId()], undefined, { ...options, skip: 0, limit: 20 });
80
128
  expect(unknown.all).toBe(0);
81
129
  });
130
+ it('loads each customer once and reuses resolved answers across their list entries', async () => {
131
+ const duplicateParticipantId = new ObjectId();
132
+ await ListParticipantsModel.db.insertOne(participant(duplicateParticipantId, firstCustomerId, 'confirmed', 'housekeeping', { 's-string-1': 'yes' }));
133
+ const customers = await CustomersService.peopleForPlanning([firstCustomerId, secondCustomerId], options.company);
134
+ const customerAnswer = jest.fn(() => 'gold');
135
+ Object.defineProperty(customers.find((customer) => customer._id.equals(firstCustomerId)), 's-string-9', { enumerable: true, get: customerAnswer });
136
+ const customerLookup = jest.spyOn(CustomersService, 'peopleForPlanning').mockResolvedValue(customers);
137
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
138
+ expect(customerLookup).toHaveBeenCalledWith([firstCustomerId, secondCustomerId], options.company, {
139
+ _id: 1, id: 1, name: 1, prename: 1, email: 1, 's-string-1': 1, 's-string-9': 1,
140
+ });
141
+ expect(customerAnswer).toHaveBeenCalledTimes(1);
142
+ expect(result.all).toBe(3);
143
+ expect(result.data.slice(0, 2).map((entry) => entry._id.toString())).toEqual([firstParticipantId.toString(), duplicateParticipantId.toString()]);
144
+ expect(result.data[0].user).toEqual(result.data[1].user);
145
+ expect(result.data[0].user).not.toBe(result.data[1].user);
146
+ });
147
+ it('applies normalized name search before resolving answers and paginating', async () => {
148
+ const customers = await CustomersService.peopleForPlanning([firstCustomerId, secondCustomerId], options.company);
149
+ const excludedAnswer = jest.fn(() => 'silver');
150
+ Object.defineProperty(customers.find((customer) => customer._id.equals(secondCustomerId)), 's-string-9', { enumerable: true, get: excludedAnswer });
151
+ jest.spyOn(CustomersService, 'peopleForPlanning').mockResolvedValue(customers);
152
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, ' ADA, LOVE ', planningOptions);
153
+ const nextPage = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, 'lovelace', { ...planningOptions, skip: 1, limit: 1 });
154
+ expect(result.all).toBe(1);
155
+ expect(result.count).toBe(1);
156
+ expect(result.data[0]._id).toEqual(firstParticipantId);
157
+ expect(result.data[0].match).toEqual({ state: 'fulfilled', score: 1, normalizedScore: 4, matched: 2, total: 2 });
158
+ expect(nextPage).toEqual({ all: 1, data: [], count: 0 });
159
+ expect(excludedAnswer).not.toHaveBeenCalled();
160
+ });
161
+ it('keeps equal-score candidates in ascending id order across pages', async () => {
162
+ const earlierParticipantId = new ObjectId('000000000000000000000001');
163
+ await ListParticipantsModel.db.insertOne(participant(earlierParticipantId, firstCustomerId, 'confirmed', 'housekeeping', { 's-string-1': 'yes' }));
164
+ await ListParticipantsModel.db.updateOne({ _id: secondParticipantId }, { $set: { 's-string-1': 'yes' } });
165
+ await CustomersModel.db.updateOne({ _id: secondCustomerId }, { $set: { 's-string-9': 'gold' } });
166
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
167
+ const secondPage = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, { ...planningOptions, skip: 1, limit: 1 });
168
+ expect(result.data.map((entry) => entry._id.toString())).toEqual([earlierParticipantId.toString(), firstParticipantId.toString(), secondParticipantId.toString()]);
169
+ expect(result.data.every((entry) => entry.match.normalizedScore === 4)).toBe(true);
170
+ expect(secondPage.all).toBe(3);
171
+ expect(secondPage.data[0]._id).toEqual(firstParticipantId);
172
+ expect(secondPage.data[0].match.normalizedScore).toBe(4);
173
+ });
174
+ it('skips customer queries for an empty candidate pool', async () => {
175
+ const customerLookup = jest.spyOn(CustomersService, 'peopleForPlanning');
176
+ const result = await listParticipantsService.planningParticipants(new ObjectId(), { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
177
+ expect(result).toEqual({ all: 0, data: [], count: 0 });
178
+ expect(customerLookup).not.toHaveBeenCalled();
179
+ });
180
+ it('skips candidate and condition queries when no requested category exists', async () => {
181
+ const participantLookup = jest.spyOn(ListParticipantsModel.db, 'find');
182
+ const areaLookup = jest.spyOn(AreaModel.db, 'findOne');
183
+ const shiftLookup = jest.spyOn(ShiftModel.db, 'findOne');
184
+ const customerLookup = jest.spyOn(CustomersService, 'peopleForPlanning');
185
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, [new ObjectId()], undefined, planningOptions);
186
+ expect(result).toEqual({ all: 0, data: [], count: 0 });
187
+ expect(participantLookup).not.toHaveBeenCalled();
188
+ expect(areaLookup).not.toHaveBeenCalled();
189
+ expect(shiftLookup).not.toHaveBeenCalled();
190
+ expect(customerLookup).not.toHaveBeenCalled();
191
+ });
192
+ it('covers a plan without booking one person into overlapping shifts', async () => {
193
+ const planId = new ObjectId();
194
+ const dayId = new ObjectId();
195
+ await SettingsModel.db.insertOne({ _id: new ObjectId(), company: options.company, project: options.project, settings: policy() });
196
+ // The area binds only the housekeeping category, so the events participant is not a candidate.
197
+ await ShiftPlanModel.db.insertOne({ _id: planId, company: options.company, project: options.project, name: 'Week', timeZone: 'Europe/Berlin',
198
+ settingsOverrides: {}, list: listId, workAreaCategories: [{ area: workAreaId, categoryIds: [categoryId] }] });
199
+ await ShiftModel.db.insertOne({ _id: new ObjectId(), company: options.company, project: options.project, plan: planId, day: dayId, area: workAreaId,
200
+ title: 'A', start: '2026-01-01T08:00:00.000Z', end: '2026-01-01T12:00:00.000Z', structures: [], assignments: [], requiredPeople: 1 });
201
+ await ShiftModel.db.insertOne({ _id: new ObjectId(), company: options.company, project: options.project, plan: planId, day: dayId, area: workAreaId,
202
+ title: 'B', start: '2026-01-01T10:00:00.000Z', end: '2026-01-01T14:00:00.000Z', structures: [], assignments: [], requiredPeople: 1 });
203
+ await ShiftModel.db.updateMany({ plan: planId }, { $set: { matchingPeople: 1 } });
204
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'plan', plan: planId }, undefined, undefined, undefined, planningOptions);
205
+ expect(result.data).toEqual([]);
206
+ expect(result.coverage.plan.equals(planId)).toBe(true);
207
+ expect(result.coverage.totalShifts).toBe(2);
208
+ expect(result.coverage.fillableShifts).toBe(1);
209
+ expect(result.coverage.fillable).toBe(false);
210
+ const summary = await listParticipantsService.planCoverageSummary(listId, { level: 'plan', plan: planId }, planningOptions);
211
+ expect(summary).toEqual({ fillable: false });
212
+ });
213
+ it.each(['coverage', 'summary'])('reuses settings and definitions and batches report people for %s', async (mode) => {
214
+ const planId = new ObjectId();
215
+ await ShiftPlanModel.db.insertOne({ _id: planId, company: options.company, project: options.project, name: 'Week',
216
+ list: listId, timeZone: 'Europe/Berlin', settingsOverrides: {} });
217
+ await SettingsModel.db.insertOne({ company: options.company, project: options.project, settings: policy() });
218
+ await ShiftModel.db.updateOne({ _id: shiftId }, { $set: { plan: planId, day: new ObjectId(), title: 'Morning',
219
+ start: '2026-01-01T08:00:00.000Z', end: '2026-01-01T12:00:00.000Z', requiredPeople: 1 } });
220
+ const participantReads = jest.spyOn(ListParticipantsModel.db, 'find');
221
+ const customerReads = jest.spyOn(CustomersModel.db, 'find');
222
+ const structureReads = jest.spyOn(StructureModel.db, 'find');
223
+ const settingsReads = jest.spyOn(SettingsModel.db, 'findOne');
224
+ if (mode === 'summary') {
225
+ expect(await listParticipantsService.planCoverageSummary(listId, { level: 'plan', plan: planId }, options)).toEqual({ fillable: true });
226
+ }
227
+ else {
228
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'plan', plan: planId }, undefined, undefined, undefined, planningOptions);
229
+ expect(result.coverage?.fillable).toBe(true);
230
+ }
231
+ expect(participantReads).toHaveBeenCalledTimes(2);
232
+ expect(customerReads).toHaveBeenCalledTimes(2);
233
+ expect(structureReads).toHaveBeenCalledTimes(2);
234
+ expect(settingsReads).toHaveBeenCalledTimes(1);
235
+ });
236
+ it('loads other-project definitions when prepared report people include other projects', async () => {
237
+ const planId = new ObjectId();
238
+ const otherProjectStructureId = new ObjectId();
239
+ const otherProjectParticipantId = new ObjectId();
240
+ await ShiftPlanModel.db.insertOne({ _id: planId, company: options.company, project: options.project, name: 'Week',
241
+ list: listId, timeZone: 'Europe/Berlin', settingsOverrides: {} });
242
+ await SettingsModel.db.insertOne({ company: options.company, project: options.project, settings: policy() });
243
+ await ShiftModel.db.updateOne({ _id: shiftId }, { $set: { plan: planId, day: new ObjectId(), title: 'Morning',
244
+ start: '2026-01-01T08:00:00.000Z', end: '2026-01-01T12:00:00.000Z', requiredPeople: 1 } });
245
+ await StructureModel.db.insertOne({ _id: otherProjectStructureId, id: 's-string-1', model: 'listsParticipants',
246
+ company: options.company, project: 'other-project', type: 'string', question: 'Other project answer' });
247
+ await ListParticipantsModel.db.insertOne({ ...participant(otherProjectParticipantId, firstCustomerId, 'confirmed', 'housekeeping', { 's-string-1': 'yes' }), project: 'other-project' });
248
+ const preparation = await listParticipantsService.prepareShiftPlanning(listId, { level: 'plan', plan: planId }, options);
249
+ expect(preparation).toBeDefined();
250
+ const structures = jest.spyOn(StructureService, 'byModelAndCompany');
251
+ const context = await listParticipantsService.planningParticipantContext([firstParticipantId, otherProjectParticipantId], [firstCustomerId], options.company, preparation);
252
+ expect(context.participantDetails.find((entry) => entry._id?.equals(firstParticipantId))?.structures?.map((structure) => structure._id)).toEqual([listStructureId]);
253
+ expect(context.participantDetails.find((entry) => entry._id?.equals(otherProjectParticipantId))?.structures?.map((structure) => structure._id)).toEqual([otherProjectStructureId]);
254
+ expect(context.participantDetails[0].user?.structures?.map((structure) => structure._id)).toEqual([customerStructureId]);
255
+ expect(structures).toHaveBeenCalledTimes(1);
256
+ expect(structures).toHaveBeenCalledWith('listsParticipants', options.company);
257
+ });
258
+ it.each([undefined, []])('uses work area conditions when shift conditions are %p', async (structures) => {
259
+ await AreaModel.db.updateOne({ _id: workAreaId }, { $set: { structures: conditions() } });
260
+ await ShiftModel.db.updateOne({ _id: shiftId }, structures === undefined ? { $unset: { structures: '' } } : { $set: { structures } });
261
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
262
+ expect(result.data[0].match).toEqual({ state: 'fulfilled', score: 1, normalizedScore: 4, matched: 2, total: 2 });
263
+ expect(result.data[1].match).toEqual({ state: 'unfit', score: 0, normalizedScore: 1, matched: 0, total: 2 });
264
+ });
265
+ it('uses work area conditions without a shift and prefers shift conditions when supplied', async () => {
266
+ await AreaModel.db.updateOne({ _id: workAreaId }, { $set: { structures: [{ structure: listStructureId.toString(), constraint: 'forbidden', value: 'yes' }] } });
267
+ const areaResult = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: undefined, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
268
+ const shiftResult = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
269
+ expect(areaResult.data[0]._id).toEqual(secondParticipantId);
270
+ expect(areaResult.data[0].match).toEqual({ state: 'fulfilled', score: 0, normalizedScore: 4, matched: 0, total: 1 });
271
+ expect(shiftResult.data[0]._id).toEqual(firstParticipantId);
272
+ expect(shiftResult.data[0].match).toEqual({ state: 'fulfilled', score: 1, normalizedScore: 4, matched: 2, total: 2 });
273
+ });
274
+ it('fetches project-scoped list definitions and preserves cross-project reporting details', async () => {
275
+ const otherProjectStructureId = new ObjectId();
276
+ const otherProjectParticipantId = new ObjectId();
277
+ await StructureModel.db.insertMany([
278
+ { _id: otherProjectStructureId, id: 's-string-1', model: 'listsParticipants', company: options.company, project: 'other-project', type: 'string', question: 'Other project answer' },
279
+ { _id: new ObjectId(), id: 's-string-9', model: 'customers', company: options.company, project: 'other-project', type: 'string', question: 'Project-only customer answer' },
280
+ { _id: new ObjectId(), id: 's-string-2', model: 'listsParticipants', company: options.company, project: options.project, type: 'string', question: 'Unanswered' },
281
+ ]);
282
+ await ListParticipantsModel.db.insertOne({ ...participant(otherProjectParticipantId, firstCustomerId, 'confirmed', 'housekeeping', { 's-string-1': 'yes' }), project: 'other-project' });
283
+ const structureLookup = jest.spyOn(StructureService, 'getByModel');
284
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
285
+ expect(structureLookup).toHaveBeenCalledWith('listsParticipants', { company: options.company, project: options.project });
286
+ expect(result.all).toBe(2);
287
+ expect(result.data[0]).not.toHaveProperty('structures');
288
+ expect(result.data[0].user).not.toHaveProperty('structures');
289
+ expect(result.data[0].match).toEqual({ state: 'fulfilled', score: 1, normalizedScore: 4, matched: 2, total: 2 });
290
+ const reports = await listParticipantsService.participantsForPlanningWithDetails([firstParticipantId, otherProjectParticipantId], options.company);
291
+ expect(reports.find((entry) => entry._id?.equals(firstParticipantId))?.structures?.map((structure) => structure._id)).toEqual([listStructureId]);
292
+ expect(reports.find((entry) => entry._id?.equals(otherProjectParticipantId))?.structures?.map((structure) => structure._id)).toEqual([otherProjectStructureId]);
293
+ expect(reports[0].user?.structures?.map((structure) => structure._id)).toEqual([customerStructureId]);
294
+ });
295
+ it('retains missing customers without search but excludes them from name searches', async () => {
296
+ const missingCustomerParticipantId = new ObjectId();
297
+ await ListParticipantsModel.db.insertOne(participant(missingCustomerParticipantId, new ObjectId(), 'confirmed', 'housekeeping', { 's-string-1': 'yes' }));
298
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, ' ', planningOptions);
299
+ const searched = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, 'ada', planningOptions);
300
+ const absent = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, 'nobody', planningOptions);
301
+ expect(result.all).toBe(3);
302
+ expect(result.data.find((entry) => entry._id?.equals(missingCustomerParticipantId))?.user).toBeUndefined();
303
+ expect(searched.all).toBe(1);
304
+ expect(searched.data[0]._id).toEqual(firstParticipantId);
305
+ expect(absent).toEqual({ all: 0, data: [], count: 0 });
306
+ });
307
+ it('projects only response and scoring fields and returns an explicit response shape', async () => {
308
+ const storedStructures = await StructureModel.db.find({}).toArray();
309
+ const history = { source: 'tests', version: 7, additional: { internal: 'audit details' } };
310
+ await StructureModel.db.insertOne({ _id: new ObjectId(), id: 's-string-unrelated', model: 'listsParticipants', company: options.company, project: options.project, type: 'string', question: 'Unrelated' });
311
+ await ListParticipantsModel.db.updateOne({ _id: firstParticipantId }, { $set: {
312
+ history, structures: storedStructures, message: 'private message', note: 'private note', explanation: 'internal explanation', payment: new ObjectId(),
313
+ 's-string-unrelated': 'not used for scoring', internalOnly: 'not part of the response',
314
+ } });
315
+ await CustomersModel.db.updateOne({ _id: firstCustomerId }, { $set: {
316
+ history, structures: storedStructures, accounts: [{ account: 'account', app: options.app, project: options.project }],
317
+ emailConfirmationCode: 'secret', street: 'private address', 's-string-unrelated': 'not used for scoring', internalOnly: 'not part of the response',
318
+ } });
319
+ const participantLookup = jest.spyOn(ListParticipantsModel.db, 'find');
320
+ const customerLookup = jest.spyOn(CustomersModel.db, 'find');
321
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
322
+ expect(participantLookup).toHaveBeenCalledWith({ list: listId, company: options.company, project: options.project, state: { $nin: ['blocked', 'unchecked', 'notuseful'] } }, {
323
+ projection: { _id: 1, user: 1, project: 1, category: 1, state: 1, 's-string-1': 1, 's-string-9': 1 },
324
+ });
325
+ expect(customerLookup).toHaveBeenCalledWith({ _id: { $in: [firstCustomerId, secondCustomerId] }, company: options.company, type: 'person' }, {
326
+ projection: { _id: 1, id: 1, name: 1, prename: 1, email: 1, 's-string-1': 1, 's-string-9': 1 },
327
+ });
328
+ expect(result.data[0]).toStrictEqual({
329
+ _id: firstParticipantId,
330
+ category: 'housekeeping',
331
+ state: 'confirmed',
332
+ match: { state: 'fulfilled', score: 1, normalizedScore: 4, matched: 2, total: 2 },
333
+ user: { _id: firstCustomerId, id: 'c1', name: 'Ada, Lovelace', email: 'ada@example.org' },
334
+ });
335
+ });
336
+ it('does not project structure answers when there are no scoring conditions', async () => {
337
+ await ShiftModel.db.updateOne({ _id: shiftId }, { $unset: { structures: '' } });
338
+ const participantLookup = jest.spyOn(ListParticipantsModel.db, 'find');
339
+ const customerLookup = jest.spyOn(CustomersModel.db, 'find');
340
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
341
+ expect(participantLookup).toHaveBeenCalledWith(expect.objectContaining({ list: listId }), {
342
+ projection: { _id: 1, user: 1, project: 1, category: 1, state: 1 },
343
+ });
344
+ expect(customerLookup).toHaveBeenCalledWith(expect.objectContaining({ company: options.company, type: 'person' }), {
345
+ projection: { _id: 1, id: 1, name: 1, prename: 1, email: 1 },
346
+ });
347
+ expect(result.all).toBe(2);
348
+ expect(result.data[0].match).toEqual({ state: 'fulfilled', score: 0, normalizedScore: 4, matched: 0, total: 0 });
349
+ });
350
+ it('preserves zero and false answers needed for scoring without returning them', async () => {
351
+ await StructureModel.db.updateOne({ _id: listStructureId }, { $set: { id: 's-number-1', type: 'number' } });
352
+ await StructureModel.db.updateOne({ _id: customerStructureId }, { $set: { id: 's-boolean-9', type: 'boolean' } });
353
+ await ShiftModel.db.updateOne({ _id: shiftId }, { $set: { structures: [
354
+ { structure: listStructureId.toHexString(), constraint: 'required', operator: 'gte', value: 0 },
355
+ { structure: customerStructureId.toHexString(), grade: 'positive', value: false },
356
+ ] } });
357
+ await ListParticipantsModel.db.updateOne({ _id: firstParticipantId }, { $set: { 's-number-1': 0 } });
358
+ await CustomersModel.db.updateOne({ _id: firstCustomerId }, { $set: { 's-boolean-9': false } });
359
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
360
+ expect(result.data[0]._id).toEqual(firstParticipantId);
361
+ expect(result.data[0].match).toEqual({ state: 'fulfilled', score: 1, normalizedScore: 4, matched: 2, total: 2 });
362
+ expect(result.data[0]).not.toHaveProperty('s-number-1');
363
+ expect(result.data[0].user).not.toHaveProperty('s-boolean-9');
364
+ });
365
+ it('ranks multi-select grades across pages while keeping answers out of the response', async () => {
366
+ const bothCustomerId = new ObjectId();
367
+ const emptyCustomerId = new ObjectId();
368
+ const missingCustomerId = new ObjectId();
369
+ const bothParticipantId = new ObjectId();
370
+ const emptyParticipantId = new ObjectId();
371
+ const missingParticipantId = new ObjectId();
372
+ await StructureModel.db.updateOne({ _id: customerStructureId }, { $set: { id: 's-select-4', type: 'select', multiple: true } });
373
+ await ShiftModel.db.updateOne({ _id: shiftId }, { $set: { structures: [
374
+ { structure: listStructureId.toHexString(), value: 'yes', constraint: 'required' },
375
+ { structure: customerStructureId.toHexString(), value: 's-yes', grade: 'very-positive' },
376
+ { structure: customerStructureId.toHexString(), value: 's-no', grade: 'very-negative' },
377
+ ] } });
378
+ await ListParticipantsModel.db.updateOne({ _id: secondParticipantId }, { $set: { 's-string-1': 'yes' } });
379
+ await CustomersModel.db.updateOne({ _id: firstCustomerId }, { $set: { 's-select-4': ['s-no'] } });
380
+ await CustomersModel.db.updateOne({ _id: secondCustomerId }, { $set: { 's-select-4': ['s-yes'] } });
381
+ await CustomersModel.db.insertMany([
382
+ { _id: bothCustomerId, id: 'both', company: options.company, type: 'person', name: 'Both', 's-select-4': ['s-yes', 's-no'] },
383
+ { _id: emptyCustomerId, id: 'empty', company: options.company, type: 'person', name: 'Empty', 's-select-4': [] },
384
+ { _id: missingCustomerId, id: 'missing', company: options.company, type: 'person', name: 'Missing' },
385
+ ]);
386
+ await ListParticipantsModel.db.insertMany([
387
+ participant(bothParticipantId, bothCustomerId, 'confirmed', 'housekeeping', { 's-string-1': 'yes' }),
388
+ participant(emptyParticipantId, emptyCustomerId, 'confirmed', 'housekeeping', { 's-string-1': 'yes' }),
389
+ participant(missingParticipantId, missingCustomerId, 'confirmed', 'housekeeping', { 's-string-1': 'yes' }),
390
+ ]);
391
+ const result = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
392
+ const lastPage = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, { ...planningOptions, skip: 4, limit: 1 });
393
+ expect(result.all).toBe(5);
394
+ expect(result.data.map((entry) => entry._id)).toEqual([secondParticipantId, bothParticipantId, emptyParticipantId, missingParticipantId, firstParticipantId]);
395
+ expect(result.data.map((entry) => entry.match.score)).toEqual([2, 0, 0, 0, -2]);
396
+ expect(result.data.map((entry) => entry.match.normalizedScore)).toEqual([4, 3, 3, 3, 1]);
397
+ expect(result.data.map((entry) => entry.match.matched)).toEqual([2, 3, 1, 1, 2]);
398
+ expect(result.data.every((entry) => entry.match.state === 'fulfilled' && entry.match.total === 3)).toBe(true);
399
+ expect(result.data[0].user).toStrictEqual({ _id: secondCustomerId, id: 'c2', name: 'Ben', email: 'ben@example.org' });
400
+ expect(lastPage.all).toBe(5);
401
+ expect(lastPage.data[0]._id).toEqual(firstParticipantId);
402
+ expect(lastPage.data[0].match.score).toBe(-2);
403
+ expect(lastPage.data[0].match.normalizedScore).toBe(1);
404
+ });
405
+ it.each(['positive', 'negative'])('normalizes a %s-only range into four equal-width stages', async (grade) => {
406
+ const scoreListId = new ObjectId();
407
+ const scoreCandidates = Array.from({ length: 5 }, (_, answer) => ({ participantId: new ObjectId(), customerId: new ObjectId(), answer }));
408
+ await StructureModel.db.updateOne({ _id: customerStructureId }, { $set: { id: 's-number-9', type: 'number' } });
409
+ await ShiftModel.db.updateOne({ _id: shiftId }, { $set: { structures: Array.from({ length: 5 }, (_, threshold) => ({
410
+ structure: customerStructureId.toHexString(), operator: 'gte', value: threshold, grade,
411
+ })) } });
412
+ await CustomersModel.db.insertMany(scoreCandidates.map((candidate) => ({
413
+ _id: candidate.customerId, id: `range-${candidate.answer}`, company: options.company, type: 'person',
414
+ name: `Candidate ${candidate.answer}`, 's-number-9': candidate.answer,
415
+ })));
416
+ await ListParticipantsModel.db.insertMany(scoreCandidates.map((candidate) => ({
417
+ ...participant(candidate.participantId, candidate.customerId, 'confirmed', 'housekeeping'), list: scoreListId,
418
+ })));
419
+ const result = await listParticipantsService.planningParticipants(scoreListId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
420
+ expect(result.all).toBe(5);
421
+ expect(result.data.map((entry) => entry.match.score)).toEqual(grade === 'positive' ? [5, 4, 3, 2, 1] : [-1, -2, -3, -4, -5]);
422
+ expect(result.data.map((entry) => entry.match.normalizedScore)).toEqual([4, 4, 3, 2, 1]);
423
+ });
424
+ it('normalizes against the searched, state-filtered, or category-filtered pool', async () => {
425
+ await ListParticipantsModel.db.updateOne({ _id: secondParticipantId }, { $set: { state: 'reserved' } });
426
+ const full = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
427
+ const searched = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, 'ben', planningOptions);
428
+ const stateFiltered = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, ['reserved'], undefined, undefined, planningOptions);
429
+ const categoryFiltered = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, [otherCategoryId], undefined, planningOptions);
430
+ expect(full.data.find((entry) => entry._id.equals(secondParticipantId))?.match.normalizedScore).toBe(1);
431
+ for (const filtered of [searched, stateFiltered, categoryFiltered]) {
432
+ expect(filtered.all).toBe(1);
433
+ expect(filtered.data[0]._id).toEqual(secondParticipantId);
434
+ expect(filtered.data[0].match).toEqual({ state: 'unfit', score: 0, normalizedScore: 4, matched: 0, total: 2 });
435
+ }
436
+ });
437
+ it('leaves full customer reads and detailed reporting responses unchanged', async () => {
438
+ const history = { source: 'tests', version: 7 };
439
+ const accounts = [{ account: 'account', app: options.app, project: options.project }];
440
+ await CustomersModel.db.updateOne({ _id: firstCustomerId }, { $set: { history, accounts, emailConfirmationCode: 'secret' } });
441
+ await ListParticipantsModel.db.updateOne({ _id: firstParticipantId }, { $set: { history, note: 'reporting note' } });
442
+ const customers = await CustomersService.peopleForPlanning([firstCustomerId], options.company);
443
+ const reports = await listParticipantsService.participantsForPlanningWithDetails([firstParticipantId], options.company);
444
+ expect(customers[0]).toMatchObject({ history, accounts, emailConfirmationCode: 'secret', 's-string-9': 'gold' });
445
+ expect(reports[0]).toMatchObject({ history, note: 'reporting note', 's-string-1': 'yes' });
446
+ expect(reports[0].structures?.map((structure) => structure._id)).toEqual([listStructureId]);
447
+ expect(reports[0].user?.structures?.map((structure) => structure._id)).toEqual([customerStructureId]);
448
+ expect(reports[0].user).toHaveProperty('s-string-9', 'gold');
449
+ });
450
+ it('filters candidates by whether they already hold a place in the plan', async () => {
451
+ const planId = new ObjectId();
452
+ await ShiftModel.db.updateOne({ _id: shiftId }, { $set: { plan: planId, assignments: [{ participant: firstParticipantId, customer: firstCustomerId, breaks: [] }] } });
453
+ const assigned = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions, 'assigned');
454
+ const unassigned = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions, 'unassigned');
455
+ const all = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions);
456
+ expect(assigned.data.map((entry) => entry._id.toString())).toEqual([firstParticipantId.toString()]);
457
+ expect(unassigned.data.map((entry) => entry._id.toString())).toEqual([secondParticipantId.toString()]);
458
+ expect(all.all).toBe(2);
459
+ });
460
+ it('treats a shift without a plan as having no assigned participants', async () => {
461
+ const assigned = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions, 'assigned');
462
+ const unassigned = await listParticipantsService.planningParticipants(listId, { level: 'shift', shift: shiftId, workArea: workAreaId }, undefined, undefined, undefined, planningOptions, 'unassigned');
463
+ expect(assigned.all).toBe(0);
464
+ expect(unassigned.all).toBe(2);
465
+ });
466
+ it('returns the membership-filtered pool for a plan scope instead of coverage', async () => {
467
+ const planId = new ObjectId();
468
+ await ShiftPlanModel.db.insertOne({ _id: planId, company: options.company, project: options.project, list: listId, name: 'Week', timeZone: 'UTC' });
469
+ await ShiftModel.db.updateOne({ _id: shiftId }, { $set: { plan: planId, assignments: [{ participant: firstParticipantId, customer: firstCustomerId, breaks: [] }] } });
470
+ const assigned = await listParticipantsService.planningParticipants(listId, { level: 'plan', plan: planId }, undefined, undefined, undefined, planningOptions, 'assigned');
471
+ const all = await listParticipantsService.planningParticipants(listId, { level: 'plan', plan: planId }, undefined, undefined, undefined, planningOptions, 'all');
472
+ expect(assigned.coverage).toBeUndefined();
473
+ expect(assigned.data.map((entry) => entry._id.toString())).toEqual([firstParticipantId.toString()]);
474
+ // `all` still asks for the pool, not coverage, so the caller gets every participant
475
+ expect(all.coverage).toBeUndefined();
476
+ expect(all.all).toBe(2);
477
+ });
82
478
  });
83
479
  //# sourceMappingURL=listParticipantsPlanning.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"listParticipantsPlanning.spec.js","sourceRoot":"","sources":["../../tests/listParticipantsPlanning.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listParticipantsPlanning.spec.js","sourceRoot":"","sources":["../../tests/listParticipantsPlanning.spec.ts"],"names":[],"mappings":"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"}