@rr0/cms
Version:
RR0 Content Management System (CMS)
89 lines (88 loc) • 3.68 kB
JavaScript
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(" & ");
if (authorStr) {
authorStr += " : ";
}
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);
});
});