import IconPack from "@cldcvr/flow-system-icon/dist/types/icon-pack";
import { expect, fixture, html, oneEvent } from "@open-wc/testing";
// importing flow-core components
import "@cldcvr/flow-core";
import { ConfigUtil, FDateTimePicker } from "@cldcvr/flow-core";
// setting icon pack for testing icon related test cases
ConfigUtil.setConfig({ iconPack: IconPack });
describe("f-date-time-picker", () => {
it("is defined", () => {
const el = document.createElement("f-date-time-picker");
expect(el).instanceOf(FDateTimePicker);
});
it("should render with all default properties", async () => {
const el = await fixture(html` `);
expect(el.getAttribute("variant")).to.equal("curved");
expect(el.getAttribute("category")).to.equal("fill");
expect(el.getAttribute("mode")).to.equal("date-time");
expect(el.getAttribute("size")).to.equal("medium");
expect(el.getAttribute("state")).to.equal("default");
});
it("check if date picker renders", async () => {
await fixture(html` `);
//@todo - find a wayt to ensure flatpickr renders
await new Promise(resolve => setTimeout(resolve, 1000));
const flatpickr = document.body.querySelector(".flatpickr-calendar");
expect(flatpickr?.classList.contains("open")).equals(false);
});
it("check if mode date-time both are present", async () => {
await fixture(html`
`);
const flatpickr = document.body.querySelector(".flatpickr-calendar");
expect(flatpickr?.classList.contains("hasTime")).equals(true);
});
it("check if value selected in calendar", async () => {
await fixture(html`
`);
const flatpickrToday = document.body.querySelector(".today");
const months = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
];
const dateFormat =
months[new Date().getMonth()] + " " + new Date().getDate() + ", " + new Date().getFullYear();
expect(flatpickrToday?.getAttribute("aria-label")).to.equal(dateFormat);
});
it("should clear date value", async () => {
const el = await fixture(html`
`);
// wait till date picker is ready
await new Promise(resolve => setTimeout(resolve, 1000));
const listner = oneEvent(el, "input") as Promise;
el.dateTimePickerElement.clearIcon.click();
const ev = await listner;
expect(ev.detail.date).to.equal(undefined);
});
});