Hold stale tender notification retries for review
This commit is contained in:
@@ -55,3 +55,19 @@ test('subscription criteria remain plain text in outgoing digest HTML',async()=>
|
||||
assert.ok(!message.html.includes(criteria));
|
||||
assert.ok(message.subject.includes(criteria),'the non-HTML subject retains the literal criterion');
|
||||
});
|
||||
|
||||
test('pending digest is held before provider replay when its deadline or eligibility changed',async()=>{
|
||||
const pinned={...future};
|
||||
for(const current of [[],[{...future,durum:'İptal'}],[{...future,tarih:'01.09.2026'}],
|
||||
[{...future,saat:''}],[{...future,tarih:'11.09.2026'}]]) {
|
||||
let held=0;
|
||||
const delivery={id:'pending',lease:'test',tenderIds:[future.id],payload:{digest:[pinned],html:'original'}};
|
||||
const deps={now,configured:()=>true,telegramReady:()=>false,
|
||||
readSubscriptions:()=>[{id:1,email:'qa',initialized:true,deliveryPending:true}],reserve:()=>delivery,
|
||||
hold:(job,reason)=>{assert.equal(job,delivery);assert.match(reason,/incelemesi/);held++;},
|
||||
accepted:()=>assert.fail('must not mark as delivered'),deliverEmail:()=>assert.fail('must not replay stale email')};
|
||||
const result=await bildirimleriIsle(async()=>({tenders:current}),{},deps);
|
||||
assert.equal(held,1);assert.equal(result.hata,1);assert.equal(result.gonderilen,0);
|
||||
assert.equal(delivery.payload.html,'original');
|
||||
}
|
||||
});
|
||||
|
||||
@@ -85,3 +85,17 @@ for(const action of ['confirmed_sent','skip'])test(`manual outbox ${action} is a
|
||||
assert.equal(subscriptions.reserveDelivery(sub.id,{to:email,html:'A'},['review-tender']),null);
|
||||
assert.equal(subscriptions.remove(sub.id,email),true);assert.equal(subscriptions.deliveryQueue().find(row=>row.id===delivery.id).review.action,action);
|
||||
});
|
||||
|
||||
test('source review hold preserves payload and seen state, fences stale workers and retains reason',()=>{
|
||||
const sub=subscriptions.subscribe('source-review',{konular:['Laboratuvar']})[0];
|
||||
subscriptions.markBaseline(sub.id,[]);
|
||||
const first=subscriptions.reserveDelivery(sub.id,{html:'immutable'},['pending-item'],{clock:1000});
|
||||
const reclaimed=subscriptions.reserveDelivery(sub.id,{html:'changed'},['new-item'],{clock:122000});
|
||||
assert.equal(subscriptions.holdDelivery(first,'stale worker'),false);
|
||||
assert.equal(subscriptions.holdDelivery(reclaimed,'Kaynak tarihi değişti; inceleme gerekli.'),true);
|
||||
assert.equal(subscriptions.failDelivery(reclaimed,'late failure'),false);
|
||||
assert.throws(()=>subscriptions.acceptDelivery(reclaimed,'late-provider'),/etkin değil/);
|
||||
assert.deepEqual(subscriptions.reserveDelivery(sub.id,{html:'new'},['new-item'],{clock:123000}),{blocked:true});
|
||||
assert.deepEqual(subscriptions.list('source-review')[0].sonGorulenler,[]);
|
||||
assert.equal(subscriptions.deliveryQueue().find(row=>row.id===first.id).error,'Kaynak tarihi değişti; inceleme gerekli.');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user