import { Calendar } from '@fullcalendar/core'
import timeGridPlugin from '@fullcalendar/timegrid'
import { TimeGridViewWrapper } from '../lib/wrappers/TimeGridViewWrapper.js'
import { CalendarWrapper } from '../lib/wrappers/CalendarWrapper.js'
function buildOptions() {
return {
plugins: [timeGridPlugin],
initialView: 'timeGridWeek',
initialDate: '2019-04-01',
scrollTime: '00:00',
allDaySlot: true,
events: [
{ start: '2019-04-01T00:00:00' },
{ start: '2019-04-01T02:00:00' },
],
}
}
describe('mutateOptions', () => { // TODO: rename file
let $calendarEl
let calendar
beforeEach(() => {
$calendarEl = $('
').appendTo('body')
})
afterEach(() => {
if (calendar) { calendar.destroy() }
$calendarEl.remove()
})
it('will react to a single option and keep scroll', () => {
calendar = new Calendar($calendarEl[0], buildOptions())
calendar.render()
let viewWrapper = new TimeGridViewWrapper(calendar)
let scrollEl = viewWrapper.getScrollerEl()
scrollEl.scrollTop = 100
let scrollTop = scrollEl.scrollTop
expect(scrollTop).toBeGreaterThan(0)
calendar.setOption('allDaySlot', false)
expect(calendar.getOption('allDaySlot')).toBe(false)
expect(viewWrapper.dayGrid).toBeFalsy()
expect(scrollEl.scrollTop).toBe(scrollTop)
})
it('rerenders events without rerendering view', () => {
calendar = new Calendar($calendarEl[0], buildOptions())
calendar.render()
let calendarWrapper = new CalendarWrapper(calendar)
let dateEl = calendarWrapper.getFirstDateEl()
calendar.setOption('events', [
{ start: '2019-04-01T00:00:00' },
])
expect(calendarWrapper.getEventEls().length).toBe(1)
expect(calendarWrapper.getFirstDateEl()).toBe(dateEl)
})
it('doesn\'t rerender anything for a initialView change', () => {
calendar = new Calendar($calendarEl[0], buildOptions())
calendar.render()
let calendarWrapper = new CalendarWrapper(calendar)
let dateEl = calendarWrapper.getFirstDateEl()
calendar.setOption('initialView', 'timeGridDay')
expect(calendar.view.type).toBe('timeGridWeek')
expect(calendarWrapper.getFirstDateEl()).toBe(dateEl)
})
})