import { directionallyTestSeg } from '../lib/DayGridEventRenderUtils.js'
import { DayGridViewWrapper } from '../lib/wrappers/DayGridViewWrapper.js'
import { CalendarWrapper } from '../lib/wrappers/CalendarWrapper.js'
describe('DayGrid event rendering', () => {
pushOptions({
initialDate: '2014-08-01', // 2014-07-27 - 2014-10-07 (excl)
initialView: 'dayGridMonth',
})
describe('when LTR', () => {
initMonthTesting('ltr')
})
describe('when RTL', () => {
initMonthTesting('rtl')
})
function initMonthTesting(direction) {
it('correctly renders an event starting before view\'s start', () => {
let options = {
events: [
{ start: '2014-07-26', end: '2014-07-30' },
],
}
let testSegOptions = {
firstCol: 0,
lastCol: 2,
isStart: false,
isEnd: true,
}
testSeg(options, testSegOptions)
})
it('correctly renders an event starting at view\'s start', () => {
let options = {
events: [
{ start: '2014-07-27', end: '2014-07-29' },
],
}
let testSegOptions = {
firstCol: 0,
lastCol: 1,
isStart: true,
isEnd: true,
}
testSeg(options, testSegOptions)
})
it('correctly renders an event starting after view\'s start', () => {
let options = {
events: [
{ start: '2014-08-01', end: '2014-08-02' },
],
}
let testSegOptions = {
firstCol: 5,
lastCol: 5,
isStart: true,
isEnd: true,
}
testSeg(options, testSegOptions)
})
it('correctly renders an event starting on a hidden day at week start', () => {
let options = {
weekends: false,
events: [
{ start: '2014-07-27', end: '2014-07-30' },
],
}
let testSegOptions = {
firstCol: 0,
lastCol: 1,
isStart: false,
isEnd: true,
}
testSeg(options, testSegOptions)
})
it('correctly renders an event starting on a hidden day in middle of week', () => {
let options = {
hiddenDays: [2], // hide Tues
events: [
{ start: '2014-07-29', end: '2014-08-01' },
],
}
let testSegOptions = {
firstCol: 2,
lastCol: 3,
isStart: false,
isEnd: true,
}
testSeg(options, testSegOptions)
})
it('correctly renders an event ending before view\'s end', () => {
let options = {
events: [
{ start: '2014-09-02', end: '2014-09-05' },
],
}
let testSegOptions = {
row: 5,
firstCol: 2,
lastCol: 4,
isStart: true,
isEnd: true,
}
testSeg(options, testSegOptions)
})
it('correctly renders an event ending at view\'s end', () => {
let options = {
events: [
{ start: '2014-09-04', end: '2014-09-07' },
],
}
let testSegOptions = {
row: 5,
firstCol: 4,
lastCol: 6,
isStart: true,
isEnd: true,
}
testSeg(options, testSegOptions)
})
it('correctly renders an event ending after view\'s end', () => {
let options = {
events: [
{ start: '2014-09-04', end: '2014-09-08' },
],
}
let testSegOptions = {
row: 5,
firstCol: 4,
lastCol: 6,
isStart: true,
isEnd: false,
}
testSeg(options, testSegOptions)
})
it('correctly renders an event ending at a week\'s end', () => {
let options = {
events: [
{ start: '2014-08-28', end: '2014-08-31' },
],
}
let testSegOptions = {
row: 4,
firstCol: 4,
lastCol: 6,
isStart: true,
isEnd: true,
}
testSeg(options, testSegOptions)
})
it('correctly renders an event ending on a hidden day at week end', () => {
let options = {
weekends: false,
events: [
{ start: '2014-07-30', end: '2014-08-03' },
],
}
let testSegOptions = {
firstCol: 2,
lastCol: 4,
isStart: true,
isEnd: false,
}
testSeg(options, testSegOptions)
})
it('correctly renders an event ending on a hidden day in middle of week', () => {
let options = {
hiddenDays: [4], // Thurs
events: [
{ start: '2014-07-28', end: '2014-08-01' },
],
}
let testSegOptions = {
firstCol: 1,
lastCol: 3,
isStart: true,
isEnd: false,
}
testSeg(options, testSegOptions)
})
function testSeg(calendarOptions, testSegOptions) {
calendarOptions.direction = direction
initCalendar(calendarOptions)
directionallyTestSeg(testSegOptions)
}
}
it('rendering of events across weeks stays consistent', () => {
let calendar = initCalendar({
events: [
{
title: 'event1',
start: '2014-08-01',
end: '2014-08-04',
className: 'event1',
},
{
title: 'event2',
start: '2014-08-02',
end: '2014-08-05',
className: 'event2',
},
],
})
let dayGridWrapper = new DayGridViewWrapper(calendar).dayGrid
let row0 = dayGridWrapper.getRowEl(0)
let row0event1 = row0.querySelector('.event1')
let row0event2 = row0.querySelector('.event2')
let row1 = dayGridWrapper.getRowEl(1)
let row1event1 = row1.querySelector('.event1')
let row1event2 = row1.querySelector('.event2')
expect($(row0event1).offset().top).toBeLessThan($(row0event2).offset().top)
expect($(row1event1).offset().top).toBeLessThan($(row1event2).offset().top)
})
it('renders an event with no url with no href', () => {
let calendar = initCalendar({
events: [{
title: 'event1',
start: '2014-08-01',
}],
})
let eventEl = new CalendarWrapper(calendar).getFirstEventEl()
expect(eventEl).not.toHaveAttr('href')
})
it('renders an event with a url with an href', () => {
let calendar = initCalendar({
events: [{
title: 'event1',
start: '2014-08-01',
url: 'http://google.com/',
}],
})
let eventEl = new CalendarWrapper(calendar).getFirstEventEl()
expect(eventEl).toHaveAttr('href')
})
})