import { html, fixture, expect, oneEvent } from "@open-wc/testing";
import {
FDocumentViewer,
FDocViewerContent,
FDocumentStatement,
FSelect,
FAccordion,
FDiv,
FText,
FSearch
} from "@cldcvr/flow-core";
import { faker } from "@faker-js/faker";
export default function getFakeDocumentContent(items = 2, levels = 2): FDocViewerContent {
const doc = {} as FDocViewerContent;
for (let level = 0; level < items; level++) {
doc[`${level + 1}.`] = createDocContentObject(levels, level + 1, "heading");
}
return doc;
}
function createDocContentObject(
levels: number,
index: number | string,
type: "heading" | "para" = "para"
): FDocumentStatement {
const content = {} as FDocViewerContent;
const doc = {
title: type === "heading" ? faker.lorem.words(6) : faker.lorem.sentence(100),
type: type,
open: true
} as FDocumentStatement;
if (levels > 0) {
for (let i = 0; i < 2; i++) {
if (i === 1) {
content[`${index}.${i + 1}.`] = createDocContentObject(levels - 1, `${index}.${i + 1}`);
} else {
content[`${index}.${i + 1}.`] = faker.lorem.sentence(100);
}
}
}
if (content && Object.keys(content).length > 0) {
doc.data = content;
}
return doc;
}
describe("f-document-viewer", () => {
it("is defined", () => {
const el = document.createElement("f-document-viewer");
expect(el).instanceOf(FDocumentViewer);
});
it("should not show jumplinks on the basis of prop `jump-links`", async () => {
const el = await fixture(html`
`);
const descendant = el.shadowRoot!.querySelector(".jumplinks-wrapper")!;
expect(descendant).to.equal(null);
});
it("should not show notch for collapsing jump-links", async () => {
const el = await fixture(html`
`);
const descendant = el.shadowRoot!.querySelector(".notch")!;
expect(descendant).to.equal(null);
});
it("should render content", async () => {
const el = await fixture(html`
`);
const descendant = el.shadowRoot!.querySelector(".preview-scrollable")!;
const content = descendant.children[0].children;
expect(descendant.children.length).to.equal(3 + 1);
expect(content.length).to.equal(2);
});
it("should render jumplinks section", async () => {
const el = await fixture(html`
`);
const descendant = el.shadowRoot!.querySelector(".jump-links")!;
expect(descendant.children.length).to.equal(3);
});
it("should filter according to level selected", async () => {
const el = await fixture(html`
`);
const filter = el.shadowRoot!.querySelector(".f-select-level-selector")!;
const listner = oneEvent(filter, "input");
filter.value = "Only L1";
const event = new CustomEvent("input", {
detail: {
value: "Only L1"
},
bubbles: true,
composed: true
});
filter.dispatchEvent(event);
await listner;
await el.updateComplete;
const descendants = el.shadowRoot!.querySelectorAll(`[data-level="2"]`);
expect(descendants[0].style.display).to.equal("none");
});
it("should highlight the text searched", async () => {
const el = await fixture(html`
`);
const highlight = el.shadowRoot!.querySelector(".f-search-text-highlight")!;
const listner = oneEvent(highlight, "input");
highlight.value = "The";
const event = new CustomEvent("input", {
detail: {
value: "The"
},
bubbles: true,
composed: true
});
highlight.dispatchEvent(event);
await listner;
await el.updateComplete;
const descendants = el.shadowRoot!.querySelectorAll("#doc-text");
expect(descendants[0].highlight).to.equal("The");
});
});