import { CalendarWrapper } from '../lib/wrappers/CalendarWrapper.js'

describe('defaultTimedEventDuration', () => {
  pushOptions({
    initialDate: '2014-05-01',
    initialView: 'dayGridMonth',
    timeZone: 'UTC',
  })

  describe('when forceEventDuration is on', () => {
    pushOptions({
      forceEventDuration: true,
    })

    it('correctly calculates an unspecified end when using a Duration object input', () => {
      initCalendar({
        defaultTimedEventDuration: { hours: 2, minutes: 30 },
        events: [
          {
            allDay: false,
            start: '2014-05-05T04:00:00',
          },
        ],
      })
      let event = currentCalendar.getEvents()[0]
      expect(event.end).toEqualDate('2014-05-05T06:30:00Z')
    })

    it('correctly calculates an unspecified end when using a string Duration input', () => {
      initCalendar({
        defaultTimedEventDuration: '03:15:00',
        events: [
          {
            allDay: false,
            start: '2014-05-05T04:00:00',
          },
        ],
      })
      let event = currentCalendar.getEvents()[0]
      expect(event.end).toEqualDate('2014-05-05T07:15:00Z')
    })
  })

  describe('when forceEventDuration is off', () => {
    pushOptions({
      forceEventDuration: false,
    })

    describe('with week view', () => {
      pushOptions({
        initialView: 'timeGridWeek',
      })

      it('renders a timed event with no `end` to appear to have the default duration', () => {
        let calendar = initCalendar({
          defaultTimedEventDuration: '01:15:00',
          events: [
            {
              // a control. so we know how tall it should be
              title: 'control event',
              allDay: false,
              start: '2014-05-01T04:00:00',
              end: '2014-05-01T05:15:00',
            },
            {
              // one day after the control. no specified end
              title: 'test event',
              allDay: false,
              start: '2014-05-02T04:00:00',
            },
          ],
        })

        let calendarWrapper = new CalendarWrapper(calendar)
        let eventElms = calendarWrapper.getEventEls()

        let height0 = eventElms[0].offsetHeight
        let height1 = eventElms[1].offsetHeight
        expect(height0).toBeGreaterThan(0)
        expect(height0).toEqual(height1)
      })
    })

    describe('with dayGridWeek view', () => {
      pushOptions({
        initialView: 'dayGridWeek',
      })

      it('renders a timed event with no `end` to appear to have the default duration', () => {
        let calendar = initCalendar({
          defaultTimedEventDuration: { days: 2 },
          events: [
            {
              // a control. so we know how wide it should be
              title: 'control event',
              allDay: false,
              start: '2014-04-28T04:00:00',
              end: '2014-04-30T04:00:00',
            },
            {
              // one day after the control. no specified end
              title: 'test event',
              allDay: false,
              start: '2014-04-28T04:00:00',
            },
          ],
        })

        let calendarWrapper = new CalendarWrapper(calendar)
        let eventElms = calendarWrapper.getEventEls()

        let width0 = eventElms[0].offsetWidth
        let width1 = eventElms[1].offsetWidth
        expect(width0).toBeGreaterThan(0)
        expect(width0).toEqual(width1)
      })
    })
  })
})
