| import { addDays, subDays } from "date-fns"; | |
| import { defaultDateLib } from "../classes/DateLib"; | |
| import type { | |
| DateAfter, | |
| DateBefore, | |
| DateInterval, | |
| DateRange, | |
| DayOfWeek, | |
| } from "../types"; | |
| import { dateMatchModifiers } from "./dateMatchModifiers"; | |
| const testDay = new Date(); | |
| describe("when the matcher is a boolean", () => { | |
| const matcher = true; | |
| const result = dateMatchModifiers(testDay, [matcher], defaultDateLib); | |
| test("should return the boolean", () => { | |
| expect(result).toBe(matcher); | |
| }); | |
| }); | |
| describe("when matching the same day", () => { | |
| const matcher = testDay; | |
| const result = dateMatchModifiers(testDay, [matcher], defaultDateLib); | |
| test("should return true", () => { | |
| expect(result).toBe(true); | |
| }); | |
| }); | |
| describe("when matching an array of dates including the day", () => { | |
| const matcher = [ | |
| addDays(testDay, -1), | |
| new Date(testDay), | |
| addDays(testDay, 1), | |
| ]; | |
| const result = dateMatchModifiers(testDay, [matcher], defaultDateLib); | |
| test("should return true", () => { | |
| expect(result).toBe(true); | |
| }); | |
| }); | |
| describe("when matching date range", () => { | |
| const matcher: DateRange = { | |
| from: testDay, | |
| to: addDays(testDay, 1), | |
| }; | |
| const result = dateMatchModifiers(testDay, [matcher], defaultDateLib); | |
| test("should return true", () => { | |
| expect(result).toBe(true); | |
| }); | |
| }); | |
| describe("when matching the day of week", () => { | |
| const matcher: DayOfWeek = { | |
| dayOfWeek: [testDay.getDay()], | |
| }; | |
| const result = dateMatchModifiers(testDay, [matcher], defaultDateLib); | |
| test("should return true", () => { | |
| expect(result).toBe(true); | |
| }); | |
| }); | |
| describe("when matching date interval (closed)", () => { | |
| const matcher: DateInterval = { | |
| before: addDays(testDay, 5), | |
| after: subDays(testDay, 3), | |
| }; | |
| const result = dateMatchModifiers(testDay, [matcher], defaultDateLib); | |
| test("should return true for the included day", () => { | |
| expect(result).toBe(true); | |
| }); | |
| }); | |
| describe("when matching date interval (open)", () => { | |
| const matcher: DateInterval = { | |
| before: subDays(testDay, 4), | |
| after: addDays(testDay, 5), | |
| }; | |
| test("should return false", () => { | |
| const result = dateMatchModifiers(testDay, [matcher], defaultDateLib); | |
| expect(result).toBe(false); | |
| }); | |
| test("should return true for the days before", () => { | |
| const result = dateMatchModifiers( | |
| subDays(testDay, 8), | |
| [matcher], | |
| defaultDateLib, | |
| ); | |
| expect(result).toBe(true); | |
| }); | |
| test("should return true for the days after", () => { | |
| const result = dateMatchModifiers( | |
| addDays(testDay, 8), | |
| [matcher], | |
| defaultDateLib, | |
| ); | |
| expect(result).toBe(true); | |
| }); | |
| }); | |
| describe("when matching the date after", () => { | |
| const matcher: DateAfter = { after: addDays(testDay, -1) }; | |
| const result = dateMatchModifiers(testDay, [matcher], defaultDateLib); | |
| test("should return true", () => { | |
| expect(result).toBe(true); | |
| }); | |
| }); | |
| describe("when matching the date before", () => { | |
| const matcher: DateBefore = { before: addDays(testDay, +1) }; | |
| const result = dateMatchModifiers(testDay, [matcher], defaultDateLib); | |
| test("should return true", () => { | |
| expect(result).toBe(true); | |
| }); | |
| }); | |
| describe("when the matcher is a function", () => { | |
| const matcher = () => true; | |
| const result = dateMatchModifiers(testDay, [matcher], defaultDateLib); | |
| test("should return the result of the function", () => { | |
| expect(result).toBe(true); | |
| }); | |
| }); | |