import { CalendarWrapper } from '../lib/wrappers/CalendarWrapper.js'
describe('aspectRatio', () => {
function getCalendarElement(width) {
return $('
').appendTo('body').width(width)[0]
}
describe('when default settings are used', () => {
const elementWidth = 675
it('view div should use the ratio 1:35 to set height', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let rect = viewContainerEl.getBoundingClientRect()
expect(Math.round(rect.height)).toEqual(500)
})
it('view div should have width of div', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let rect = viewContainerEl.getBoundingClientRect()
expect(Math.round(rect.width)).toEqual(elementWidth)
})
})
describe('when initializing the aspectRatio', () => {
const elementWidth = 1000
describe('to 2', () => {
pushOptions({
aspectRatio: 2,
})
it('should not change the width', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let rect = viewContainerEl.getBoundingClientRect()
expect(Math.round(rect.width)).toEqual(elementWidth)
})
it('should set the height to width sizes very close to ratio of 2', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let rect = viewContainerEl.getBoundingClientRect()
let ratio = Math.round((rect.width / rect.height) * 100)
expect(Math.round(ratio)).toEqual(200)
})
})
describe('to 1', () => {
pushOptions({
aspectRatio: 1,
})
it('should not change the width', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let rect = viewContainerEl.getBoundingClientRect()
expect(Math.round(rect.width)).toEqual(elementWidth)
})
it('should set the height to width sizes very close to ratio of 2', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let rect = viewContainerEl.getBoundingClientRect()
let ratio = Math.round((rect.width / rect.height) * 100)
expect(Math.round(ratio)).toEqual(100)
})
})
describe('to less than 0.5', () => {
pushOptions({
aspectRatio: 0.4,
})
it('should not change the width', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let rect = viewContainerEl.getBoundingClientRect()
expect(Math.round(rect.width)).toEqual(elementWidth)
})
it('should set the height to width ratio to 0.5', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let rect = viewContainerEl.getBoundingClientRect()
let ratio = Math.round((rect.width / rect.height) * 100)
expect(Math.round(ratio)).toEqual(50)
})
})
describe('to negative', () => {
pushOptions({
aspectRatio: -2,
})
it('should not change the width', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let rect = viewContainerEl.getBoundingClientRect()
expect(Math.round(rect.width)).toEqual(elementWidth)
})
it('should set the height to width ratio to 0.5', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let rect = viewContainerEl.getBoundingClientRect()
let ratio = Math.round((rect.width / rect.height) * 100)
expect(Math.round(ratio)).toEqual(50)
})
})
describe('to zero', () => {
pushOptions({
aspectRatio: 0,
})
it('should not change the width', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let rect = viewContainerEl.getBoundingClientRect()
expect(Math.round(rect.width)).toEqual(elementWidth)
})
it('should set the height to width ratio to 0.5', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let rect = viewContainerEl.getBoundingClientRect()
let ratio = Math.round((rect.width / rect.height) * 100)
expect(Math.round(ratio)).toEqual(50)
})
})
describe('to very large', () => {
pushOptions({
aspectRatio: 4000,
})
it('should not change the width', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let rect = viewContainerEl.getBoundingClientRect()
expect(Math.round(rect.width)).toEqual(elementWidth)
})
it('should cause rows to be natural height', () => {
let calendar = initCalendar({}, getCalendarElement(elementWidth))
let viewContainerEl = new CalendarWrapper(calendar).getViewContainerEl()
let actualHeight = viewContainerEl.getBoundingClientRect().height
let naturalHeight = viewContainerEl.getBoundingClientRect().height
expect(Math.round(actualHeight)).toEqual(Math.round(naturalHeight))
})
})
})
})