This commit is contained in:
seb
2026-10-19 01:32:42 +02:00
parent c730244902
commit cce966d021
9 changed files with 181 additions and 22 deletions

View File

@@ -192,6 +192,64 @@ describe('store.shipment', () => {
});
});
describe('shipping.create', () => {
it('allows adding shippings while shipment is unshipped, but refuses once shipped', async () => {
const order = await makeOrder();
const s = await store.shipment.create(gid, { orderId: order.id, lines: [{ sku: 'SH-A', amount: 5 }] });
const carrier = await store.carrier.create(gid, { name: `Carrier ${order.number}`, hasPackages: true });
// First package: draft -> allowed
const p1 = await store.shipping.create(gid, {
manifestId: s.id,
carrierId: carrier.id,
type: 'parcel',
state: 'draft',
});
assert.ok(p1.id);
// Second package while still draft -> allowed
const p2 = await store.shipping.create(gid, {
manifestId: s.id,
carrierId: carrier.id,
type: 'parcel',
state: 'draft',
});
assert.ok(p2.id);
// Now mark package as shipped -> shipment is now shipped
await store.shipping.update(gid, p1.id, { state: 'shipped' });
// Attempting to add a new shipping to the already shipped shipment must fail
await assert.rejects(
() => store.shipping.create(gid, {
manifestId: s.id,
carrierId: carrier.id,
type: 'parcel',
state: 'draft',
}),
{ message: 'Shipment is already shipped' },
);
});
it('refuses adding shipping if shipment is in delivered state', async () => {
const order = await makeOrder();
const s = await store.shipment.create(gid, { orderId: order.id, lines: [{ sku: 'SH-A', amount: 2 }] });
const carrier = await store.carrier.create(gid, { name: `Carrier Deliv ${order.number}`, hasPackages: true });
await store.shipment.update(gid, s.id, { state: 'delivered' });
await assert.rejects(
() => store.shipping.create(gid, {
manifestId: s.id,
carrierId: carrier.id,
type: 'parcel',
state: 'draft',
}),
{ message: 'Shipment is already shipped' },
);
});
});
describe('update', () => {
it('changes the state and validates it', async () => {
const order = await makeOrder();
@@ -242,8 +300,24 @@ describe('store.shipment', () => {
await assert.rejects(() => store.shipment.delete(gid, null), { message: 'Shipment is required' });
assert.ok(await store.shipment.getById(gid, s.id));
});
it('refuses to delete an order manifest when there is a shipment manifest referencing it', async () => {
const order = await makeOrder();
const s = await store.shipment.create(gid, { orderId: order.id, lines: [{ sku: 'SH-A', amount: 1 }] });
await assert.rejects(
() => store.order.delete(gid, order.id),
{ message: 'Order has shipment manifests' },
);
// Once all shipment manifests referencing the order are deleted, the order can be deleted
await store.shipment.delete(gid, s.id);
await store.order.delete(gid, order.id);
await assert.rejects(() => store.order.getById(gid, order.id), { message: 'Order not found' });
});
});
describe('list / rebuildSummaries', () => {
let lt;
let o1;