UNPKG

@soroooosh/badi_date

Version:

A library to convert Date to Badi date and back.

297 lines (296 loc) 15.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var badi_date_1 = require("../lib/badi_date"); var bahai_holyday_1 = require("../lib/bahai_holyday"); describe('throws errors', function () { it('Throws for invalid day and month', function () { expect(function () { return new badi_date_1.BadiDate(1, -1, 1, false, null, null); }).toThrow('-1 month - Month must be in the range [0-19]'); expect(function () { return new badi_date_1.BadiDate(1, 20, 1, false, null, null); }).toThrow('20 month - Month must be in the range [0-19]'); expect(function () { return new badi_date_1.BadiDate(1, 1, 0, false, null, null); }).toThrow('0 day - Day must be in the range [1-19]'); expect(function () { return new badi_date_1.BadiDate(1, 1, 20, false, null, null); }).toThrow('20 day - Day must be in the range [1-19]'); expect(function () { return new badi_date_1.BadiDate(1, 1, 4, true, null, null); }).toThrow('1 month - Please set month to 0 or set AyyamIHa false'); }); it('Throws unsupported years', function () { expect(function () { return new badi_date_1.BadiDate(222, 1, 1, false, null, null); }).toThrow('Years greater than 221 are not supported yet'); expect(function () { return badi_date_1.BadiDate.fromDate(new Date(2065, 2, 22), null, null); }).toThrow('Dates after 2064-03-19 are not supported yet.'); }); }); describe('date today', function () { var badiDate = new badi_date_1.BadiDate(177, 16, 6, false, null, null); it('year, month, day', function () { var expected = new Date(2021, 0, 4); expect(badiDate.getEndDate().getFullYear()).toBe(expected.getFullYear()); expect(badiDate.getEndDate().getMonth()).toBe(expected.getMonth()); expect(badiDate.getEndDate().getDate()).toBe(expected.getDate()); }); it('after sunset', function () { var expected = new Date(2021, 0, 3); expect(badiDate.getStartDate().getFullYear()).toBe(expected.getFullYear()); expect(badiDate.getStartDate().getMonth()).toBe(expected.getMonth()); expect(badiDate.getStartDate().getDate()).toBe(expected.getDate()); }); it('year in Vahid, Vahid, Kull-i-shay', function () { expect(badiDate.getKullIShay()).toBe(1); expect(badiDate.getVahid()).toBe(10); expect(badiDate.getYearInVahid()).toBe(6); }); it('feast, fast, Ayyam-i-ha, Holy day', function () { expect(badiDate.isAyyamIHa()).toBe(false); expect(badiDate.isFeastDay()).toBe(false); expect(badiDate.isPeriodOfFast()).toBe(false); expect(badiDate.getHolyDay()).toBe(bahai_holyday_1.BahaiHolyDayEnum.NONE); }); it('next feast, next holy day, day of the year', function () { expect(badiDate.getNextHolyDate()).toEqual(new badi_date_1.BadiDate(178, 1, 1, false, null, null)); expect(badiDate.getNextFeast()).toEqual(new badi_date_1.BadiDate(177, 17, 1, false, null, null)); expect(badiDate.getDayOfYear()).toBe(291); }); it('last AyyamIHa day', function () { expect(badiDate.getLastAyyamIHaDayOfYear().getEndDate()) .toEqual(new Date(2021, 1, 28, 18)); expect(badiDate.getLastAyyamIHaDayOfYear().getStartDate()) .toEqual(new Date(2021, 1, 27, 18)); }); }); describe('naw ruz', function () { var _loop_1 = function (i) { it('naw ruz in gregorian date for the year ' + i, function () { var date = new badi_date_1.BadiDate(i, 1, 1, false, null, null); expect(date.getHolyDay()).toBe(bahai_holyday_1.BahaiHolyDayEnum.NAW_RUZ); expect(date.getStartDate().getMonth()).toBe(2); expect(date.getStartDate().getFullYear()).toBe(i + 1843); if (i < 173 || [175, 176].includes(i)) { expect(date.getEndDate().getDate()).toBe(21); expect(badi_date_1.BadiDate.getDayOfNawRuz(i)).toBe(21); } else { expect(date.getEndDate().getDate()).toBe(20); expect(badi_date_1.BadiDate.getDayOfNawRuz(i)).toBe(20); } }); }; for (var i = 170; i < 179; i++) { _loop_1(i); } }); describe('feasts and holy days', function () { var badiDate = new badi_date_1.BadiDate(177, 19, 1, false, null, null); it('calculates the feasts', function () { expect(badiDate.getEndDate()).toEqual(new Date(2021, 2, 1, 18)); var date = badiDate.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 2, 20, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 3, 8, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 3, 27, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 4, 16, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 5, 4, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 5, 23, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 6, 12, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 6, 31, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 7, 19, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 8, 7, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 8, 26, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 9, 15, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 10, 3, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 10, 22, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 11, 11, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2021, 11, 30, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2022, 0, 18, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2022, 1, 6, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2022, 2, 2, 18)); date = date.getNextFeast(); expect(date.getEndDate()).toEqual(new Date(2022, 2, 21, 18)); }); it('calculates the holy days', function () { var date = badiDate.getNextHolyDate(); expect(date.getEndDate()).toEqual(new Date(2021, 2, 20, 18)); expect(date.getHolyDay()).toBe(bahai_holyday_1.BahaiHolyDayEnum.NAW_RUZ); date = date.getNextHolyDate(); expect(date.getEndDate()).toEqual(new Date(2021, 3, 20, 18)); expect(date.getHolyDay()).toBe(bahai_holyday_1.BahaiHolyDayEnum.RIDVAN1ST); date = date.getNextHolyDate(); expect(date.getEndDate()).toEqual(new Date(2021, 3, 28, 18)); expect(date.getHolyDay()).toBe(bahai_holyday_1.BahaiHolyDayEnum.RIDVAN9TH); date = date.getNextHolyDate(); expect(date.getEndDate()).toEqual(new Date(2021, 4, 1, 18)); expect(date.getHolyDay()).toBe(bahai_holyday_1.BahaiHolyDayEnum.RIDVAN12TH); date = date.getNextHolyDate(); expect(date.getEndDate()).toEqual(new Date(2021, 4, 23, 18)); expect(date.getHolyDay()).toBe(bahai_holyday_1.BahaiHolyDayEnum.DECLARATION_OF_THE_BAB); date = date.getNextHolyDate(); expect(date.getEndDate()).toEqual(new Date(2021, 4, 28, 18)); expect(date.getHolyDay()).toBe(bahai_holyday_1.BahaiHolyDayEnum.ASCENSION_OF_BAHAULLAH); date = date.getNextHolyDate(); expect(date.getEndDate()).toEqual(new Date(2021, 6, 9, 18)); expect(date.getHolyDay()).toBe(bahai_holyday_1.BahaiHolyDayEnum.MARTYRDOM_OF_THE_BAB); date = date.getNextHolyDate(); expect(date.getEndDate()).toEqual(new Date(2021, 10, 6, 18)); expect(date.getHolyDay()).toBe(bahai_holyday_1.BahaiHolyDayEnum.BIRTH_OF_THE_BAB); date = date.getNextHolyDate(); expect(date.getEndDate()).toEqual(new Date(2021, 10, 7, 18)); expect(date.getHolyDay()).toBe(bahai_holyday_1.BahaiHolyDayEnum.BIRTH_OF_BAHAULLAH); date = date.getNextHolyDate(); expect(date.getEndDate()).toEqual(new Date(2021, 10, 25, 18)); expect(date.getHolyDay()).toBe(bahai_holyday_1.BahaiHolyDayEnum.DAY_OF_THE_COVENANT); date = date.getNextHolyDate(); expect(date.getEndDate()).toEqual(new Date(2021, 10, 27, 18)); expect(date.getHolyDay()).toBe(bahai_holyday_1.BahaiHolyDayEnum.ASCENSION_OF_ABDUL_BAHA); }); }); describe('corner cases', function () { it('round trip naw ruz', function () { var date = new Date(2021, 2, 19, 20); var badiDate = badi_date_1.BadiDate.fromDate(date, null, null); expect(badiDate.getStartDate()).toEqual(new Date(2021, 2, 19, 18)); expect(badiDate.getEndDate()).toEqual(new Date(2021, 2, 20, 18)); expect(badiDate.month).toBe(1); expect(badiDate.day).toBe(1); expect(badiDate.year).toBe(178); date = new Date(2021, 2, 19, 16); badiDate = badi_date_1.BadiDate.fromDate(date, null, null); expect(badiDate.getStartDate()).toEqual(new Date(2021, 2, 18, 18)); expect(badiDate.getEndDate()).toEqual(new Date(2021, 2, 19, 18)); expect(badiDate.month).toBe(19); expect(badiDate.day).toBe(19); expect(badiDate.year).toBe(177); date = new Date(2021, 2, 20, 16); badiDate = badi_date_1.BadiDate.fromDate(date, null, null); expect(badiDate.getStartDate()).toEqual(new Date(2021, 2, 19, 18)); expect(badiDate.getEndDate()).toEqual(new Date(2021, 2, 20, 18)); expect(badiDate.month).toBe(1); expect(badiDate.day).toBe(1); expect(badiDate.year).toBe(178); }); it('new years eve', function () { var date = new Date(2020, 11, 31, 16); var badiDate = badi_date_1.BadiDate.fromDate(date, null, null); expect(badiDate.getStartDate()).toEqual(new Date(2020, 11, 30, 18)); expect(badiDate.getEndDate()).toEqual(new Date(2020, 11, 31, 18)); expect(badiDate.day).toBe(2); expect(badiDate.month).toBe(16); expect(badiDate.year).toBe(177); date = new Date(2020, 11, 31, 20); badiDate = badi_date_1.BadiDate.fromDate(date, null, null); expect(badiDate.getStartDate()).toEqual(new Date(2020, 11, 31, 18)); expect(badiDate.getEndDate()).toEqual(new Date(2021, 0, 1, 18)); expect(badiDate.day).toBe(3); expect(badiDate.month).toBe(16); expect(badiDate.year).toBe(177); date = new Date(2021, 0, 1, 16); badiDate = badi_date_1.BadiDate.fromDate(date, null, null); expect(badiDate.getStartDate()).toEqual(new Date(2020, 11, 31, 18)); expect(badiDate.getEndDate()).toEqual(new Date(2021, 0, 1, 18)); expect(badiDate.day).toBe(3); expect(badiDate.month).toBe(16); expect(badiDate.year).toBe(177); }); it('leap day', function () { var date = new Date(2020, 1, 29); var badiDate = badi_date_1.BadiDate.fromDate(date, null, null); expect(badiDate.year).toBe(176); expect(badiDate.month).toBe(0); expect(badiDate.isAyyamIHa()).toBe(true); expect(badiDate.isPeriodOfFast()).toBe(false); expect(badiDate.day).toBe(4); date = new Date(2020, 2, 1); badiDate = badi_date_1.BadiDate.fromDate(date, null, null); expect(badiDate.isAyyamIHa()).toBe(false); expect(badiDate.isPeriodOfFast()).toBe(true); expect(badiDate.day).toBe(1); date = new Date(2021, 1, 28); badiDate = badi_date_1.BadiDate.fromDate(date, null, null); expect(badiDate.isAyyamIHa()).toBe(true); expect(badiDate.isPeriodOfFast()).toBe(false); expect(badiDate.day).toBe(4); date = new Date(2021, 2, 1); badiDate = badi_date_1.BadiDate.fromDate(date, null, null); expect(badiDate.isAyyamIHa()).toBe(false); expect(badiDate.isPeriodOfFast()).toBe(true); expect(badiDate.day).toBe(1); date = new Date(2022, 2, 1); badiDate = badi_date_1.BadiDate.fromDate(date, null, null); expect(badiDate.isAyyamIHa()).toBe(true); expect(badiDate.isPeriodOfFast()).toBe(false); expect(badiDate.day).toBe(5); date = new Date(2022, 2, 2); badiDate = badi_date_1.BadiDate.fromDate(date, null, null); expect(badiDate.isAyyamIHa()).toBe(false); expect(badiDate.isPeriodOfFast()).toBe(true); expect(badiDate.day).toBe(1); date = new Date(2004, 2, 1); badiDate = badi_date_1.BadiDate.fromDate(date, null, null); expect(badiDate.isAyyamIHa()).toBe(true); expect(badiDate.isPeriodOfFast()).toBe(false); expect(badiDate.day).toBe(5); }); }); describe("sunset calculation", function () { it("handles pols and nonsense values", function () { var expected = new Date(2021, 0, 17, 18); expect(new badi_date_1.BadiDate(177, 17, 1, false, null, null).getStartDate()). toEqual(expected); expect(new badi_date_1.BadiDate(177, 17, 1, false, 53.6, null).getStartDate()) .toEqual(expected); expect(new badi_date_1.BadiDate(177, 17, 1, false, null, 10.0).getStartDate()) .toEqual(expected); expect(new badi_date_1.BadiDate(177, 17, 1, false, 53.6, 190.0) .getStartDate()) .toEqual(expected); expect(new badi_date_1.BadiDate(177, 17, 1, false, 53.6, -190.0) .getStartDate()) .toEqual(expected); expect(new badi_date_1.BadiDate(177, 17, 1, false, 66.6, 10.0) .getStartDate()) .toEqual(expected); expect(new badi_date_1.BadiDate(177, 17, 1, false, -66.6, 10.0) .getStartDate()) .toEqual(expected); }); // This test only works if your local time is CET or CEST it("calculates sunset", function () { var expected = new Date(Date.UTC(2021, 0, 17, 15, 34, 40, 947)); expect(new badi_date_1.BadiDate(177, 17, 1, false, 53.6, 10.0) .getStartDate()) .toEqual(expected); }); // This test only works if your local time is CET or CEST it("handles daylight saving", function () { var expected = new Date(Date.UTC(2021, 5, 23, 19, 55)); var received = new badi_date_1.BadiDate(178, 6, 1, false, 53.6, 10.0) .getEndDate(); expect(received.getFullYear()).toBe(expected.getFullYear()); expect(received.getMonth()).toBe(expected.getMonth()); expect(received.getUTCDate()).toBe(expected.getUTCDate()); expect(received.getUTCHours()).toBe(expected.getUTCHours()); expect(received.getUTCMinutes()).toBe(expected.getUTCMinutes()); }); it("handles sunset on next Gregorian day", function () { var expected = new Date(Date.UTC(2021, 5, 23, 22, 18)); var received = new badi_date_1.BadiDate(178, 6, 1, false, 64.6, 8.0) .getEndDate(); expect(received.getFullYear()).toBe(expected.getFullYear()); expect(received.getMonth()).toBe(expected.getMonth()); expect(received.getUTCDate()).toBe(expected.getUTCDate()); expect(received.getUTCHours()).toBe(expected.getUTCHours()); expect(received.getUTCMinutes()).toBe(expected.getUTCMinutes()); }); });