// Unit test for the public-offer page assembly: renderOffer splices the backend's price-list // markdown into the offer at the pricing marker and renders it with the shared renderOfferHtml // (bundled from ui/src/lib/offer). The prose rendering itself is unit-tested in ui/ (offer.test.ts); // here we assert the substitution and that the tables reach the rendered HTML. import test from 'node:test'; import assert from 'node:assert/strict'; import { renderOffer, pricingMarker } from '../src/offer.mjs'; const tables = '| Наименование | Рубли | Голоса в VK | Stars в Telegram |\n' + '| --- | --- | --- | --- |\n' + '| 50 «Фишек» | 200.00 | 30 | 100 |'; test('splices the price list into the offer and renders the tables to HTML', () => { const md = `# Публичная оферта\n\n**4.4.** Стоимость Товаров:\n\n${pricingMarker}\n`; const html = renderOffer(md, tables); // The marker is gone and the projected table reached the document as a real HTML table. assert.ok(!html.includes(pricingMarker), 'pricing marker must be substituted'); assert.ok(html.includes('
| 200.00 | '), 'a rouble price cell must be present'); assert.ok(html.includes('50 «Фишек»'), 'the product title must be present'); // The offer chrome from the shared renderer is intact. assert.ok(html.includes('')); }); test('a "$" in a title is substituted literally, not as a replacement pattern', () => { const html = renderOffer(`x ${pricingMarker} y`, '| $5 pack | 1 |'); assert.ok(html.includes('$5 pack'), 'a "$" in the tables must survive substitution'); });