import { test } from 'node:test'; import assert from 'node:assert/strict'; import { EtfScorer } from '../src/screener/scorers/EtfScorer.js'; const rules = { gates: { maxExpenseRatio: 0.5 }, weights: { yield: 2, lowCost: 3 }, thresholds: { minYield: 1.5, maxExpense: 0.1, minVolume: 500000 }, }; test('rejects ETF with expense ratio above gate', () => { const result = EtfScorer.score({ expenseRatio: 0.8, yield: 2.0 }, rules); assert.equal(result.label, '🔴 REJECT'); }); test('efficient label for low-cost, high-yield ETF', () => { const result = EtfScorer.score({ expenseRatio: 0.03, yield: 2.0, volume: 1000000 }, rules); assert.equal(result.label, '🟢 Efficient'); }); test('neutral when yield is below threshold', () => { const result = EtfScorer.score({ expenseRatio: 0.03, yield: 0.4, volume: 1000000 }, rules); assert.equal(result.label, '🟡 Neutral'); }); test('audit breakdown includes cost, yield, vol keys', () => { const result = EtfScorer.score({ expenseRatio: 0.03, yield: 2.0, volume: 1000000 }, rules); assert(result.audit.breakdown.cost != null); assert(result.audit.breakdown.yield != null); assert(result.audit.breakdown.vol != null); });