import { factory } from '../../test/factories' import { AvailabilityTime } from './availability_time.model' describe('AvailabilityTime', () => { let subject: AvailabilityTime beforeAll(async () => { subject = new AvailabilityTime(await factory.build('availability_time')) }) describe('#offset', () => { describe.each` time | offset ${'12:00:00'} | ${null} ${'12:00:00Z'} | ${'Z'} ${'12:00:00-05:00'} | ${'-05:00'} ${'12:00:00-05:30'} | ${'-05:30'} ${'12:00:00-05'} | ${'-05:00'} ${'12:00:00+05:30'} | ${'+05:30'} ${'12:00:00+05'} | ${'+05:00'} `('when time is "$time"', ({ time, offset }) => { beforeAll(() => { subject.time = time }) it(`returns "${offset}"`, () => { expect(subject.offset).toEqual(offset) }) }) }) describe('#hoursWithoutOffset', () => { describe.each` time | hour ${'12:00:00'} | ${'12:00'} ${'12:00:00Z'} | ${'12:00'} ${'12:00:00-05:00'} | ${'12:00'} ${'12:00:00-05:30'} | ${'12:00'} ${'12:00:00-05'} | ${'12:00'} ${'12:00:00+05:30'} | ${'12:00'} ${'12:00:00+05'} | ${'12:00'} `('when time is "$time"', ({ time, hour }) => { beforeAll(() => { subject.time = time }) it(`returns "${hour}"`, () => { expect(subject.hoursWithoutOffset).toEqual(hour) }) }) }) describe('#getUTCDate', () => { const date = '2022-03-16' const time = '12:00' const timezone = 'America/Sao_Paulo' describe('when has a given date and has a timezone', () => { beforeAll(() => { subject.time = time subject.timezone = timezone }) it(`returns a UTC date with day and time of an availability time`, () => { expect(subject.getUTCDate(new Date(date)).toISOString()).toEqual(`${date}T15:00:00.000Z`) }) }) }) describe('#setOffsetInTime', () => { const date = '2022-03-16' const time = '12:00' const timezone = 'America/Sao_Paulo' describe('when has a given date and has a timezone', () => { beforeAll(() => { subject.time = time subject.timezone = timezone }) it(`returns a UTC date with day and time of an availability time`, () => { subject.setOffsetInTime(new Date(date)) expect(subject.time).toEqual(`${time}-03:00`) }) }) }) })