import React from 'react'; import { mount, shallow } from 'enzyme'; import MonthView from './MonthView'; const { format } = new Intl.DateTimeFormat('en-US', { day: 'numeric', month: 'long', year: 'numeric' }); describe('MonthView', () => { const defaultProps = { activeStartDate: new Date(2017, 0, 1), }; it('renders proper view when given activeStartDate', () => { const activeStartDate = new Date(2017, 0, 1); const component = mount( , ); const firstDayTile = component.find('.react-calendar__tile').first(); const firstDayTileTimeAbbr = firstDayTile.find('abbr').prop('aria-label'); expect(firstDayTileTimeAbbr).toBe(format(activeStartDate)); }); it('applies tileClassName to its tiles when given a string', () => { const tileClassName = 'testClassName'; const component = mount( , ); const firstDayTile = component.find('.react-calendar__tile').first(); const firstDayTileClassName = firstDayTile.prop('className'); expect(firstDayTileClassName.includes(tileClassName)).toBe(true); }); it('applies tileClassName to its tiles conditionally when given a function that returns a string', () => { const activeStartDate = new Date(2017, 0, 1); const tileClassNameFn = ({ date }) => { if (date.getTime() === activeStartDate.getTime()) { return 'firstDayOfTheMonth'; } return null; }; const component = mount( , ); const tiles = component.find('.react-calendar__tile'); const firstDayTile = tiles.first(); const firstDayTileClassName = firstDayTile.prop('className'); const secondDayTile = tiles.at(1); const secondDayTileClassName = secondDayTile.prop('className'); expect(firstDayTileClassName.includes('firstDayOfTheMonth')).toBe(true); expect(secondDayTileClassName.includes('firstDayOfTheMonth')).toBe(false); }); it('renders tileContent in its tiles when given a node', () => { const tileContent = (
); const component = mount( , ); const tiles = component.find('.react-calendar__tile'); const firstDayTile = tiles.first(); const firstDayTileContent = firstDayTile.find('.testContent'); expect(firstDayTileContent).toHaveLength(1); }); it('renders tileContent in its tiles conditionally when given a function that returns a node', () => { const activeStartDate = new Date(2017, 0, 1); const tileContentFn = ({ date }) => { if (date.getTime() === activeStartDate.getTime()) { return (
); } return null; }; const component = mount( , ); const tiles = component.find('.react-calendar__tile'); const firstDayTile = tiles.first(); const firstDayTileContent = firstDayTile.find('.testContent'); const secondDayTile = tiles.at(1); const secondDayTileContent = secondDayTile.find('.testContent'); expect(firstDayTileContent).toHaveLength(1); expect(secondDayTileContent).toHaveLength(0); }); it('does not render WeekNumbers component by default', () => { const component = mount( , ); expect(component.find('WeekNumbers')).toHaveLength(0); }); it('renders WeekNumbers component by given showWeekNumbers flag', () => { const component = mount( , ); expect(component.find('WeekNumbers')).toHaveLength(1); }); it('passes calendarType to Weekdays component', () => { const calendarType = 'ISO 8601'; const component = shallow( , ); const weekdays = component.find('Weekdays'); expect(weekdays.prop('calendarType')).toBe(calendarType); }); it('passes derived calendarType to Weekdays component if calendarType is not given', () => { const locale = 'en-US'; const component = shallow( , ); const weekdays = component.find('Weekdays'); expect(weekdays.prop('calendarType')).toBe('US'); }); it('passes formatShortWeekday flag to Weekdays component', () => { const formatShortWeekday = () => 'Weekday'; const component = shallow( , ); const weekdays = component.find('Weekdays'); expect(weekdays.prop('formatShortWeekday')).toBe(formatShortWeekday); }); it('passes calendarType to Days component', () => { const calendarType = 'ISO 8601'; const component = shallow( , ); const days = component.find('Days'); expect(days.prop('calendarType')).toBe(calendarType); }); it('passes derived calendarType to Days component if calendarType is not given', () => { const locale = 'en-US'; const component = shallow( , ); const days = component.find('Days'); expect(days.prop('calendarType')).toBe('US'); }); it('passes formatLongDate flag to Days component', () => { const formatLongDate = () => 'Long date'; const component = shallow( , ); const days = component.find('Days'); expect(days.prop('formatLongDate')).toBe(formatLongDate); }); });