u
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user