UNPKG

@rr0/cms

Version:

RR0 Content Management System (CMS)

89 lines (88 loc) 3.68 kB
import { beforeEach, describe, test } from "@javarome/testscript"; import { DatasourceTestCase } from "../DatasourceTestCase.js"; import { Level2Date as EdtfDate } from "@rr0/time"; import { HtmlTag } from "../../../util/index.js"; import { SceauDatasource } from "./SceauDatasource.js"; import { TimeTextBuilder } from "../../text/TimeTextBuilder.js"; import { cmsTestUtil } from "../../../test/index.js"; import { sceauDatasource } from "./SceauRR0Mapping.js"; import { sceauTestCases } from "./SceauTestCases.js"; import { SceauCaseSummaryRR0Mapper } from "./SceauCaseSummaryRR0Mapper.js"; export class SceauTestDatasource extends SceauDatasource { constructor() { super(); this.timeTextBuilder = new TimeTextBuilder(cmsTestUtil.intlOptions); } async readCases(_context) { return sceauTestCases; } } export class SceauTestMapping { constructor(actions = { read: ["fetch"], write: ["backup"] }) { this.actions = actions; this.datasource = sceauDatasource; // new SceauTestDatasource() } init(build) { this.mapper = new SceauCaseSummaryRR0Mapper(cmsTestUtil.cityService, sceauDatasource.baseUrl, sceauDatasource.copyright, sceauDatasource.authors); return this; } } describe("SCEAUCaseSource", () => { const testCase = new class extends DatasourceTestCase { constructor(mapping, sourceCases) { super(mapping, sourceCases); } getTime(c) { return EdtfDate.fromString(c.dateCas); } sortComparator(c1, c2) { const c1Time = this.getTime(c1); const c2time = this.getTime(c2); return !c1Time || c2time && c1Time.isBefore(c2time) ? -1 : !c2time || c1Time.isAfter(c2time) ? 1 : 0; } /** * Specialization of sources for SCEAU cases */ expectedSourceStr(context, expectedSources, _nativeCase) { return expectedSources.map(source => { const sourceItems = []; let authorStr = source.authors.map(author => `<span class="people">${author}</span>`).join(" &amp; "); if (authorStr) { authorStr += "&nbsp;: "; } if (source.title) { sourceItems.push(source.title); } const publication = source.publication; if (publication) { if (publication.publisher) { sourceItems.push(`<i>${publication.publisher}</i>`); } if (publication.time) { const sourceContext = context.clone(); sourceContext.time.date = source.publication.time; const timeStr = this.timeTextBuilder.build(sourceContext); sourceItems.push(timeStr); } } const index = source.index; if (index) { sourceItems.push(index); } return " " + HtmlTag.toString("span", authorStr + sourceItems.join(", "), { class: "source" }); }).join(""); } }(new SceauTestMapping({ read: ["fetch"], write: [] }), sceauTestCases); let context; beforeEach(() => { context = cmsTestUtil.time.newHtmlContext("1/9/7/0/03/index.html"); context.time.setYear(1970); context.time.setMonth(3); }); test("fetch", { skip: true }, async () => { await testCase.testFetch(context); }); test("render", { skip: true }, async () => { await testCase.testRender(context); }); });