bmc_hub/tests/test_subscription_simple_change.js

31 lines
2.2 KiB
JavaScript
Raw Normal View History

const assert=require('node:assert/strict');
const fs=require('node:fs');
const vm=require('node:vm');
const source=fs.readFileSync('app/modules/sag/templates/detail_v4.html','utf8');
const start=source.indexOf(' async function saveSelectedSubscriptionChange()');
const end=source.indexOf(' function openAgreementChangeComposer()',start);
const nodes={agreementChangeReason:{value:''},agreementEffectiveDate:{value:'2026-11-01'},agreementSaveChangeBtn:{disabled:false}};
const fields={'.subscription-change-select':{checked:true},'.sub-change-product':{value:'Drift'},'.sub-change-interval':{value:'monthly'},'.sub-change-schedule':{value:'fixed_day'},'.sub-change-day':{value:'15'},'.sub-change-status':{value:'active'}};
const card={dataset:{subscriptionId:'12'},querySelector:key=>fields[key]};
let calls=[],messages=[],loads=0,failSubmit=false;
const ctx={document:{getElementById:id=>nodes[id],querySelectorAll:()=>[card]},subscriptionCaseId:79,collectAgreementChangeLines:()=>[{description:'Drift',quantity:1,unit_price:1200}],showCaseFeedback:(...args)=>messages.push(args),loadSubscriptionForCase:async()=>{loads++;},fetch:async(url,options)=>{calls.push({url,options});return {ok:!(failSubmit&&url.endsWith('/save')),json:async()=>url.endsWith('/save')?{detail:'Prøv igen'}:{id:5}};}};
vm.createContext(ctx);vm.runInContext(source.slice(start,end),ctx);
(async()=>{
await ctx.saveSelectedSubscriptionChange();
assert.equal(calls.length,2);
assert(calls[1].url.endsWith('/5/save'));
const body=JSON.parse(calls[0].options.body);
assert.equal(body.proposals[0].subscription_id,12);
assert.equal(body.proposals[0].changes.line_items[0].unit_price,1200);
assert.equal(body.reason,'Ændring af abonnement');
assert.equal(loads,1);
assert.equal(messages.at(-1)[1],'success');
assert.equal(nodes.agreementSaveChangeBtn.disabled,false);
failSubmit=true;
await ctx.saveSelectedSubscriptionChange();
assert.equal(loads,1);
assert(messages.at(-1)[0].includes('kunne ikke gennemføres'));
assert.equal(nodes.agreementSaveChangeBtn.disabled,false);
console.log('Simple subscription change OK: one save applies without approval, failure preserves draft, no redirect');
})().catch(error=>{console.error(error);process.exitCode=1;});