UNPKG

@uswds/uswds

Version:

Open source UI components and visual style guide for U.S. government websites

166 lines (139 loc) 5.15 kB
const fs = require("fs"); const path = require("path"); const assert = require("assert"); const DatePicker = require("../../../usa-date-picker/src/index"); const DateRangePicker = require("../index"); const EVENTS = require("./events"); const TEMPLATE = fs.readFileSync( path.join(__dirname, "/date-range-picker.template.html"), ); const dateRangePickerSelector = () => document.querySelector(".usa-date-range-picker"); const tests = [ { name: "document.body", selector: () => document.body }, { name: "date range picker", selector: dateRangePickerSelector }, ]; tests.forEach(({ name, selector: containerSelector }) => { describe(`date range picker component initialized at ${name}`, () => { const { body } = document; let root; let rangeStart; let rangeStartInputEl; let rangeEnd; let rangeEndInputEl; beforeEach(() => { body.innerHTML = TEMPLATE; DatePicker.on(containerSelector()); DateRangePicker.on(containerSelector()); root = dateRangePickerSelector(); rangeStart = root.querySelector(".usa-date-range-picker__range-start"); rangeEnd = root.querySelector(".usa-date-range-picker__range-end"); rangeStartInputEl = rangeStart.querySelector( ".usa-date-picker__external-input", ); rangeEndInputEl = rangeEnd.querySelector( ".usa-date-picker__external-input", ); }); afterEach(() => { DatePicker.off(containerSelector()); DateRangePicker.off(containerSelector()); body.textContent = ""; }); it("should enhance the date picker and identify the start and end date pickers", () => { assert.ok(rangeStart, "has a range start date picker element"); assert.ok(rangeEnd, "has a range end date picker element"); }); // event interactions it("should reset the range end date picker properties when the range start date picker has an empty value", () => { rangeStartInputEl.value = ""; EVENTS.input(rangeStartInputEl); assert.strictEqual( rangeEnd.dataset.minDate, "0000-01-01", "has the default min date", ); assert.strictEqual(rangeEnd.dataset.rangeDate, "", "has no range date"); assert.strictEqual( rangeEnd.dataset.defaultDate, "", "has no default date", ); }); it("should update the range end date picker properties to have a min date and range date when the range start date picker has an updated valid value", () => { rangeStartInputEl.value = "12/12/2020"; EVENTS.input(rangeStartInputEl); assert.strictEqual( rangeEnd.dataset.minDate, "2020-12-12", "has updated min date", ); assert.strictEqual( rangeEnd.dataset.rangeDate, "2020-12-12", "has updated range date", ); assert.strictEqual( rangeEnd.dataset.defaultDate, "2020-12-12", "has updated default date", ); }); it("should reset the range end date picker properties when the range start date picker has an updated invalid value", () => { rangeStartInputEl.value = "ab/dc/efg"; EVENTS.input(rangeStartInputEl); assert.strictEqual( rangeEnd.dataset.minDate, "0000-01-01", "has the default min date", ); assert.strictEqual(rangeEnd.dataset.rangeDate, "", "has no range date"); assert.strictEqual( rangeEnd.dataset.defaultDate, "", "has no default date", ); }); it("should reset the range start date picker properties when the range end date picker has an empty value", () => { rangeEndInputEl.value = ""; EVENTS.input(rangeEndInputEl); assert.strictEqual(rangeStart.dataset.maxDate, "", "has no max date"); assert.strictEqual(rangeStart.dataset.rangeDate, "", "has no range date"); assert.strictEqual( rangeStart.dataset.defaultDate, "", "has no default date", ); }); it("should update the range start date picker properties to have a max date and range date when the range end date picker has an updated valid value", () => { rangeEndInputEl.value = "12/11/2020"; EVENTS.input(rangeEndInputEl); assert.strictEqual( rangeStart.dataset.maxDate, "2020-12-11", "has updated min date", ); assert.strictEqual( rangeStart.dataset.rangeDate, "2020-12-11", "has updated range date", ); assert.strictEqual( rangeStart.dataset.defaultDate, "2020-12-11", "has updated default date", ); }); it("should reset the range end date picker properties when the range start date picker has an updated invalid value", () => { rangeEndInputEl.value = "35/35/3535"; EVENTS.input(rangeEndInputEl); assert.strictEqual(rangeStart.dataset.maxDate, "", "has no max date"); assert.strictEqual(rangeStart.dataset.rangeDate, "", "has no range date"); assert.strictEqual( rangeStart.dataset.defaultDate, "", "has no default date", ); }); }); });