UNPKG

time-flan

Version:

Biblioteca para cálculo de SLA, considerando feriados estaduais e dias úteis.

118 lines (94 loc) 5.56 kB
import { describe, it, expect } from "vitest"; import { TimeFlan } from "../src"; describe("TimeFlan", () => { describe("Feriados", () => { it("deve retornar feriados nacionais, estaduais e extras", () => { const extras = [{ name: "Extra Holiday", date: "2025-11-02" }]; const timeflan = TimeFlan().country("BR").state("SP").extraHolidays(extras); const holidays = timeflan.date('2025-01-01T00:00:00.000Z').getHolidays(); expect(holidays).toEqual(expect.arrayContaining([ "2025-01-01T00:00:00.000Z", // Ano Novo "2025-12-25T00:00:00.000Z", // Natal "2025-09-07T00:00:00.000Z", // Independência "2025-04-20T00:00:00.000Z", // Páscoa "2025-04-18T00:00:00.000Z", // Sexta-feira Santa "2025-06-19T00:00:00.000Z", // Corpus Christi "2025-03-04T00:00:00.000Z", // Carnaval "2025-01-25T00:00:00.000Z", // SP "2025-11-02T00:00:00.000Z", // Extra ])); expect(holidays).not.toContain("2025-07-04T00:00:00.000Z"); }); it("deve diferenciar feriados estaduais", () => { const holidaysSE = TimeFlan().country("BR").state("SE").date("2025-01-01").getHolidays(); const holidaysSP = TimeFlan().country("BR").state("SP").date("2025-01-01").getHolidays(); expect(holidaysSE).toContain("2025-07-08T00:00:00.000Z"); expect(holidaysSP).toContain("2025-07-09T00:00:00.000Z"); expect(holidaysSP).not.toContain("2025-08-17T00:00:00.000Z"); }); it("deve detectar se uma data é feriado", () => { const extras = [{ name: "Extra Holiday", date: "2025-11-02" }]; const timeflan = TimeFlan().state("SC").extraHolidays(extras); expect(timeflan.date("2025-12-25").isHoliday()).toBe(true); expect(timeflan.date("2025-01-01").isHoliday()).toBe(true); expect(timeflan.date("2025-11-02").isHoliday()).toBe(true); expect(timeflan.date("2025-07-04").isHoliday()).toBe(false); expect(timeflan.date("2025-04-22").isHoliday()).toBe(false); const timeflanUS = TimeFlan().country("US").state("CA"); expect(timeflanUS.date("2025-07-04").isHoliday()).toBe(true); expect(timeflanUS.date("2025-11-11").isHoliday()).toBe(true); }); }); describe("Fins de semana e dias úteis", () => { it("deve detectar fins de semana", () => { expect(TimeFlan().date("2025-12-28").isWeekend()).toBe(true); expect(TimeFlan().date("2025-04-22").isWeekend()).toBe(false); }); it("deve detectar dias úteis", () => { expect(TimeFlan().date("2025-04-22").isBusinessDay()).toBe(true); expect(TimeFlan().date("2025-12-25").isBusinessDay()).toBe(false); expect(TimeFlan().date("2025-04-26").isBusinessDay()).toBe(false); }); }); describe("Cálculo de prazo com TIMEFLAN", () => { it("deve calcular prazo com base em horas de trabalho", () => { expect(TimeFlan().date("2025-12-22T08:00:00Z").startHour(8).endHour(18).workHours(4).calculate()) .toBe("2025-12-22T12:00:00.000Z"); expect(TimeFlan().date("2025-12-22T08:00:00Z").startHour(8).endHour(18).workHours(10).calculate()) .toBe("2025-12-22T18:00:00.000Z"); expect(TimeFlan().date("2025-12-22T08:00:00Z").startHour(8).endHour(18).workHours(20).calculate()) .toBe("2025-12-23T18:00:00.000Z"); expect(TimeFlan().date("2025-12-22T08:00:00Z").startHour(8).endHour(18).workHours(15).calculate()) .toBe("2025-12-23T13:00:00.000Z"); }); it("deve ignorar feriados e fins de semana ao iniciar", () => { expect(TimeFlan().date("2025-12-25T08:00:00Z").startHour(8).endHour(18).workHours(4).calculate()) .toBe("2025-12-26T12:00:00.000Z"); expect(TimeFlan().date("2025-04-26T08:00:00Z").startHour(8).endHour(18).workHours(4).calculate()) .toBe("2025-04-28T12:00:00.000Z"); }); it("deve ignorar feriados e fins de semana no meio do prazo", () => { const extras = [{ name: "Extra Holiday", date: "2025-12-24" }]; const extras2 = [...extras, { name: "Extra Holiday", date: "2025-12-26" }]; expect(TimeFlan().date("2025-12-22T08:00:00Z").startHour(8).endHour(18).workHours(30).extraHolidays(extras).calculate()) .toBe("2025-12-26T18:00:00.000Z"); expect(TimeFlan().date("2025-12-22T08:00:00Z").startHour(8).endHour(18).workHours(30).extraHolidays(extras2).calculate()) .toBe("2025-12-29T18:00:00.000Z"); expect(TimeFlan().date("2025-04-25T08:00:00Z").startHour(8).endHour(18).workHours(20).calculate()) .toBe("2025-04-28T18:00:00.000Z"); expect(TimeFlan().date("2025-04-25T08:00:00Z").startHour(8).endHour(18).workHours(30).calculate()) .toBe("2025-04-29T18:00:00.000Z"); }); it("deve considerar horários de início e fim diferentes", () => { expect(TimeFlan().date("2025-12-22T08:00:00Z").startHour(8).endHour(12).workHours(6).calculate()) .toBe("2025-12-23T10:00:00.000Z"); }); it("deve lidar com casos de borda envolvendo feriados e finais de semana", () => { expect(TimeFlan().date("2025-12-25T08:00:00Z").startHour(8).endHour(18).workHours(20).calculate()) .toBe("2025-12-29T18:00:00.000Z"); const extras = [{ name: "Extra Holiday", date: "2025-12-29" }]; expect(TimeFlan().date("2025-12-27T08:00:00Z").startHour(8).endHour(18).workHours(20).extraHolidays(extras).calculate()) .toBe("2025-12-31T18:00:00.000Z"); }); }); });