gods-eye-view/server/situationNews.test.mjs

10 lines
931 B
JavaScript

import {test} from 'node:test';import assert from 'node:assert/strict';
import {situationNewsPlugin} from './situationNews.js';
function harness(fetchText){let handler;situationNewsPlugin({fetchText,parseArticles:()=>[]}).configureServer({middlewares:{use:(_,f)=>handler=f}});return url=>new Promise(resolve=>{let code;handler({method:'GET',url},{writeHead:value=>{code=value;},end:s=>resolve({code,body:JSON.parse(s)})});});}
test('news validates choices, coalesces requests and rejects upstream error pages',async()=>{
let calls=0;const request=harness(async()=>{calls++;await new Promise(r=>setTimeout(r,5));return '<rss><channel></channel></rss>';});
assert.equal((await request('/?region=unknown')).code,400);
const out=await Promise.all([request('/'),request('/')]);assert.equal(calls,1);assert.equal(out[0].body.stale,false);
const bad=harness(async()=>'<html>error</html>');assert.equal((await bad('/')).code,503);
});