@lilaquadrat/studio 12.3.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.
@@ -0,0 +1,161 @@
1
+ import { afterAll, beforeAll, beforeEach, describe, expect, it, jest } from '@jest/globals';
2
+ import { MongoClient, ObjectId } from 'mongodb';
3
+ import plansService from '../src/services/shiftPlans.service.js';
4
+ import PlanModel from '../src/models/shiftPlan.model.js';
5
+ import DayModel from '../src/models/shiftPlanDays.model.js';
6
+ import ShiftModel from '../src/models/shift.model.js';
7
+ import ListsModel from '../src/models/lists.model.js';
8
+ // mongo-mock cannot execute aggregation pipelines; opt in with a dedicated, disposable database.
9
+ const mongoUrl = process.env.MONGODB_TEST_URL;
10
+ const integration = mongoUrl ? describe : describe.skip;
11
+ const options = { company: 'hotel', project: 'hotel-project', user: 'planner', app: 'studio' };
12
+ const scope = { company: options.company, project: options.project };
13
+ const listId = new ObjectId();
14
+ integration('shift plan list aggregation', () => {
15
+ const client = new MongoClient(mongoUrl ?? 'mongodb://localhost:27017');
16
+ const database = client.db(`shift-plans-list-tests-${new ObjectId().toHexString()}`);
17
+ const plans = database.collection(PlanModel.collection);
18
+ const days = database.collection(DayModel.collection);
19
+ const lists = database.collection(ListsModel.collection);
20
+ const shifts = database.collection(ShiftModel.collection);
21
+ const insertPlan = async (name, extra = {}) => {
22
+ const _id = new ObjectId();
23
+ await database.collection(PlanModel.collection).insertOne({ _id, ...scope, name, timeZone: 'Europe/Berlin', list: listId, ...extra });
24
+ return _id;
25
+ };
26
+ const insertDays = async (plan, dates, extra = {}) => {
27
+ await database.collection(DayModel.collection).insertMany(dates.map((date) => ({ _id: new ObjectId(), ...scope, plan, date, ...extra })));
28
+ };
29
+ beforeAll(async () => {
30
+ await client.connect();
31
+ jest.spyOn(PlanModel, 'db', 'get').mockReturnValue(plans);
32
+ jest.spyOn(DayModel, 'db', 'get').mockReturnValue(days);
33
+ jest.spyOn(ListsModel, 'db', 'get').mockReturnValue(lists);
34
+ });
35
+ beforeEach(async () => {
36
+ await Promise.all([plans.deleteMany({}), days.deleteMany({}), lists.deleteMany({}), shifts.deleteMany({})]);
37
+ await database.collection(ListsModel.collection).insertOne({ _id: listId, ...scope, name: 'Hotel staff', private: 'hidden' });
38
+ });
39
+ afterAll(async () => {
40
+ jest.restoreAllMocks();
41
+ try {
42
+ await database.dropDatabase();
43
+ }
44
+ finally {
45
+ await client.close();
46
+ }
47
+ });
48
+ it('searches names literally and returns only summary fields in one aggregation', async () => {
49
+ await insertPlan('Hotel week');
50
+ const plan = await insertPlan('Events [October]');
51
+ const aggregate = jest.spyOn(plans, 'aggregate');
52
+ const find = jest.spyOn(plans, 'find');
53
+ const count = jest.spyOn(plans, 'countDocuments');
54
+ try {
55
+ const matched = await plansService.listPlans({ search: 'events' }, options);
56
+ expect(matched.all).toBe(1);
57
+ expect(matched.data).toEqual([{ _id: plan, name: 'Events [October]', dayCount: 0, shiftCount: 0, list: { _id: listId, name: 'Hotel staff' } }]);
58
+ expect(aggregate).toHaveBeenCalledTimes(1);
59
+ expect(find).not.toHaveBeenCalled();
60
+ expect(count).not.toHaveBeenCalled();
61
+ expect((await plansService.listPlans({ search: '[October]' }, options)).all).toBe(1);
62
+ expect((await plansService.listPlans({ search: '.*' }, options)).all).toBe(0);
63
+ expect((await plansService.listPlans({ search: 'missing' }, options)).data).toEqual([]);
64
+ }
65
+ finally {
66
+ aggregate.mockRestore();
67
+ find.mockRestore();
68
+ count.mockRestore();
69
+ }
70
+ });
71
+ it('uses inclusive from and exclusive to on the same day, but counts all days', async () => {
72
+ const first = await insertPlan('Hotel week');
73
+ const future = await insertPlan('Hotel week');
74
+ const disjoint = await insertPlan('Hotel week');
75
+ await insertDays(first, ['2026-10-05', '2026-10-06']);
76
+ await insertDays(future, ['2026-10-12', '2026-10-20']);
77
+ await insertDays(disjoint, ['2026-10-01', '2026-10-20']);
78
+ const filtered = await plansService.listPlans({ list: listId, from: '2026-10-10', to: '2026-10-15' }, options);
79
+ expect(filtered.all).toBe(1);
80
+ expect(filtered.data[0]._id).toEqual(future);
81
+ expect(filtered.data[0].dayCount).toBe(2);
82
+ const ordered = await plansService.listPlans({ from: '2026-10-05', to: '2026-10-13' }, options);
83
+ expect(ordered.data.map((plan) => plan._id)).toEqual([first, future]);
84
+ expect((await plansService.listPlans({ from: '2026-10-20' }, options)).all).toBe(2);
85
+ expect((await plansService.listPlans({ to: '2026-10-05' }, options)).data.map((plan) => plan._id)).toEqual([disjoint]);
86
+ expect((await plansService.listPlans({ from: '2026-10-06', to: '2026-10-12' }, options)).data.map((plan) => plan._id)).toEqual([first]);
87
+ });
88
+ it('counts all plan shifts independently of the date filter and excludes other plans and scopes', async () => {
89
+ const plan = await insertPlan('Scheduled');
90
+ const otherPlan = await insertPlan('Other plan');
91
+ await insertDays(plan, ['2026-10-12', '2026-10-20']);
92
+ await shifts.insertMany([
93
+ { ...scope, plan, start: '2026-10-12T08:00:00Z', assignments: [] },
94
+ { ...scope, plan, start: '2026-10-12T12:00:00Z', assignments: [{ participant: new ObjectId() }, { participant: new ObjectId() }] },
95
+ { ...scope, plan, start: '2026-10-20T08:00:00Z', assignments: [] },
96
+ { ...scope, plan: otherPlan, start: '2026-10-12T08:00:00Z', assignments: [] },
97
+ { ...scope, plan, project: 'elsewhere', start: '2026-10-12T08:00:00Z', assignments: [] },
98
+ { ...scope, plan, company: 'elsewhere', start: '2026-10-12T08:00:00Z', assignments: [] },
99
+ ]);
100
+ const filtered = await plansService.listPlans({ from: '2026-10-10', to: '2026-10-15' }, options);
101
+ expect(filtered.all).toBe(1);
102
+ expect(filtered.data[0]).toMatchObject({ _id: plan, dayCount: 2, shiftCount: 3 });
103
+ const unfiltered = await plansService.listPlans({}, options);
104
+ expect(unfiltered.data.find((entry) => entry._id?.equals(otherPlan))).toHaveProperty('shiftCount', 1);
105
+ });
106
+ it('scopes plans, day lookups, and linked lists to the company and project', async () => {
107
+ const plan = await insertPlan('Local');
108
+ const foreignList = new ObjectId();
109
+ await database.collection(ListsModel.collection).insertOne({ _id: foreignList, ...scope, project: 'elsewhere', name: 'Private' });
110
+ await insertPlan('Foreign list', { list: foreignList });
111
+ await insertPlan('Missing list', { list: new ObjectId() });
112
+ const unlinked = await insertPlan('No list');
113
+ await plans.updateOne({ _id: unlinked }, { $unset: { list: '' } });
114
+ await insertPlan('Other project', { project: 'elsewhere' });
115
+ await insertPlan('Other company', { company: 'elsewhere' });
116
+ await insertDays(plan, ['2026-10-12'], { project: 'elsewhere' });
117
+ await insertDays(plan, ['2026-10-12'], { company: 'elsewhere' });
118
+ const result = await plansService.listPlans({}, options);
119
+ expect(result.all).toBe(4);
120
+ expect(result.data.every((entry) => entry.dayCount === 0)).toBe(true);
121
+ for (const entry of result.data.filter((entry) => entry.name !== 'Local'))
122
+ expect(entry).toHaveProperty('list', null);
123
+ expect((await plansService.listPlans({ from: '2026-10-10', to: '2026-10-15' }, options)).all).toBe(0);
124
+ expect((await plansService.listPlans({ list: foreignList }, options)).all).toBe(1);
125
+ });
126
+ it('paginates sorted plans while retaining the total on empty pages', async () => {
127
+ const identifiers = [];
128
+ for (let index = 0; index < 32; index++)
129
+ identifiers.push(await insertPlan('Same name'));
130
+ const first = await plansService.listPlans({}, options);
131
+ const second = await plansService.listPlans({ site: 2 }, options);
132
+ const empty = await plansService.listPlans({ site: 3 }, options);
133
+ expect(first.all).toBe(32);
134
+ expect(first.count).toBe(30);
135
+ expect(first.data.map((plan) => plan._id)).toEqual(identifiers.slice(0, 30));
136
+ expect(second.all).toBe(32);
137
+ expect(second.count).toBe(2);
138
+ expect(second.data.map((plan) => plan._id)).toEqual(identifiers.slice(30));
139
+ expect(empty.all).toBe(32);
140
+ expect(empty.count).toBe(0);
141
+ expect(empty.data).toEqual([]);
142
+ });
143
+ it('validates dates, search length, and pagination before querying', async () => {
144
+ const aggregate = jest.spyOn(plans, 'aggregate');
145
+ try {
146
+ for (const filters of [
147
+ { from: '2026-10-05', to: '2026-10-05' },
148
+ { from: '2026-10-06', to: '2026-10-05' },
149
+ { from: 'not-a-date' },
150
+ { search: 'x'.repeat(101) },
151
+ { site: 0 },
152
+ ])
153
+ await expect(plansService.listPlans(filters, options)).rejects.toThrow('VALIDATION_FAILED');
154
+ expect(aggregate).not.toHaveBeenCalled();
155
+ }
156
+ finally {
157
+ aggregate.mockRestore();
158
+ }
159
+ });
160
+ });
161
+ //# sourceMappingURL=shiftPlansList.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shiftPlansList.spec.js","sourceRoot":"","sources":["../../tests/shiftPlansList.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lilaquadrat/studio",
3
- "version": "12.3.0",
3
+ "version": "13.0.0",
4
4
  "description": "classes and tools for STUDIO",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -118,7 +118,7 @@
118
118
  },
119
119
  "dependencies": {
120
120
  "@google/genai": "^1.42.0",
121
- "@lilaquadrat/interfaces": "^1.55.0",
121
+ "@lilaquadrat/interfaces": "^1.56.0",
122
122
  "@lilaquadrat/storage-sdk": "^0.1.15",
123
123
  "@nats-io/jetstream": "^3.2.0",
124
124
  "@nats-io/transport-node": "^3.2.0",