Files
opportunities-extension/tests/srRequestPriority.test.cjs

12 lines
1.3 KiB
JavaScript

const {test}=require('node:test');const assert=require('node:assert/strict');const fs=require('node:fs');const vm=require('node:vm');
const factory=vm.runInNewContext(fs.readFileSync('src/features/opportunities/controller.js','utf8')+'\ncreateOpportunitiesController');
for(const mode of ['success','failure','stale','pending'])test(`opportunities are displayed before background SR: ${mode}`,async()=>{
const order=[];const state={periodRequestVersion:1};let complete;
const api=factory({opportunitiesQueryState:state,productsContentState:{},consumptionPlansState:{},consumptionTrendState:{},renderProductsProgress(){},setOpportunitiesTableState:next=>order.push(next.status),requestOpportunitiesPage:()=>{order.push('query');return new Promise(resolve=>complete=resolve);},loadServiceRequests:()=>{order.push('sr');if(mode==='failure')throw Error('SR failed');if(mode==='pending')return new Promise(()=>{});},requestOpptyProductsInBackground:()=>order.push('products')});
const request=api.requestOpportunities('token','CQ',{},1);
assert.deepEqual(order,['loading','query']);
if(mode==='stale')state.periodRequestVersion++;
complete([{OptyNumber:'A'}]);await request;
assert.deepEqual(order,mode==='stale'?['loading','query']:['loading','query','ready','sr','products']);
});