product name alone made required
This commit is contained in:
@@ -161,3 +161,45 @@ test('a retired drop with nowhere to follow is finished', () => {
|
||||
|
||||
assert.equal(isSettled(retired), true);
|
||||
});
|
||||
|
||||
/* ── Cross-drop contamination ─────────────────────────────────────────────── */
|
||||
|
||||
// An admin can assemble one run from several drops, so a run's manifest can
|
||||
// carry other senders' products. Applying our sheet's price and opening stock
|
||||
// to those would stock someone else's goods into our merchant's branch.
|
||||
test('only our own file contributes products', () => {
|
||||
const run = {
|
||||
...held,
|
||||
status: 'done' as const,
|
||||
files: [
|
||||
{
|
||||
index: 0,
|
||||
filename: 'ours.csv',
|
||||
status: 'done' as const,
|
||||
result: {
|
||||
products: [
|
||||
{ image_id: 'amul_a', brand: 'amul', product_name: 'Ours', disposition: 'inserted' as const },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
index: 1,
|
||||
filename: 'someone-elses.csv',
|
||||
status: 'done' as const,
|
||||
result: {
|
||||
products: [
|
||||
{ image_id: 'amul_b', brand: 'amul', product_name: 'Theirs', disposition: 'inserted' as const },
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
} satisfies IngestBatch;
|
||||
|
||||
const mine = productsOf(run, ['ours.csv']);
|
||||
assert.equal(mine.length, 1);
|
||||
assert.equal(mine[0]?.product_name, 'Ours');
|
||||
|
||||
// Unfiltered still returns everything — the filter is the caller's decision,
|
||||
// and every caller that prices products must make it.
|
||||
assert.equal(productsOf(run).length, 2);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user