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(' function updateSubscriptionTabCount(payload)'); const end=source.indexOf(' async function loadSubscriptionForCase()',start); let badge; const context={window:{},_setCaseTabCountBadge:(id,value)=>{assert.equal(id,'subscriptionTabCountBadge');badge=value;}}; vm.createContext(context); vm.runInContext(source.slice(start,end),context); context.updateSubscriptionTabCount({current_subscriptions:[{id:12,status:'draft'}]}); assert.equal(badge,1); context.updateSubscriptionTabCount({current_subscriptions:[{id:12}],upcoming_subscriptions:[{id:'12'},{id:13}],ended_subscriptions:[{id:14}]}); assert.equal(badge,3); context.updateSubscriptionTabCount({}); assert.equal(badge,0); assert(!source.includes("const subscriptionCount = _countRows('#subscriptionItemsBody')")); assert(fs.readFileSync('app/modules/sag/templates/detail_v5.html','utf8').includes('extends "modules/sag/templates/detail_v4.html"')); console.log('Subscription tab count OK: draft, unique agreements, empty case, V5 inheritance');