This commit is contained in:
seb
2026-10-18 20:29:51 +02:00
parent f6b0ff7483
commit 8cc7d0eb0b
15 changed files with 166 additions and 24 deletions

View File

@@ -65,14 +65,17 @@ describe('store.delivery', () => {
assert.notEqual(a.number, b.number);
});
it('allows a delivery without supplier', async () => {
const d = await store.delivery.create(gid, { date: isoNow(), lines: [] });
assert.equal(d.supplierId, null);
it('rejects a delivery without supplier', async () => {
await assert.rejects(
() => store.delivery.create(gid, { date: isoNow(), lines: [] }),
{ message: 'No supplier selected' },
);
});
it('validates input', async () => {
await assert.rejects(() => create({ date: 'garbage' }), { message: 'Invalid delivery' });
await assert.rejects(() => create({ createdAt: 'garbage' }), { message: 'Invalid delivery' });
await assert.rejects(() => create({ supplierId: null }), { message: 'No supplier selected' });
await assert.rejects(() => create({ supplierId: '1' }), { message: 'Invalid supplierId' });
await assert.rejects(() => create({ supplierId: 999999 }), { message: 'Supplier not found' });
await assert.rejects(() => create({ lines: 'x' }), { message: 'Invalid lines' });
@@ -113,8 +116,10 @@ describe('store.delivery', () => {
const cleared = await store.delivery.update(gid, d.id, { externalNumber: ' ' });
assert.equal(cleared.externalNumber, null);
const noSupplier = await store.delivery.update(gid, d.id, { supplierId: null });
assert.equal(noSupplier.supplierId, null);
await assert.rejects(
() => store.delivery.update(gid, d.id, { supplierId: null }),
{ message: 'No supplier selected' },
);
});
it('replaces lines of an unbooked delivery', async () => {
@@ -133,6 +138,15 @@ describe('store.delivery', () => {
assert.equal((await store.delivery.getById(gid, d.id)).lines[0].amount, 4);
});
it('refuses duplicate delivery numbers on update', async () => {
const d1 = await create();
const d2 = await create();
await assert.rejects(
() => store.delivery.update(gid, d2.id, { number: d1.number }),
{ message: 'Delivery number already exists' },
);
});
it('validates input', async () => {
const d = await create();
await assert.rejects(() => store.delivery.update(gid, d.id, {}), { message: 'Invalid delivery' });
@@ -287,7 +301,8 @@ describe('store.delivery', () => {
const rt = await createTenant(store, { name: 'Delivery Rebuild GmbH' });
await store.warehouse.create(rt.googleAuthId, { name: 'Rebuild WH' });
await createArticle(store, rt, { sku: 'RB-1', track_stock: true });
const d = await store.delivery.create(rt.googleAuthId, { date: isoNow(), lines: [line('RB-1', 3)] });
const rs = await store.supplier.create(rt.googleAuthId, { name: 'Rebuild Supplier' });
const d = await store.delivery.create(rt.googleAuthId, { supplierId: rs.id, date: isoNow(), lines: [line('RB-1', 3)] });
await store.delivery.book(rt.googleAuthId, d.id);
const before = await store.delivery.list(rt.googleAuthId);