12 lines
1.3 KiB
JavaScript
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']);
|
|
});
|