UNPKG

@ustack/uskin

Version:

A graceful framework which provides developers another chance to build an amazing site.

302 lines (217 loc) 8.3 kB
import React from 'react'; import {mount} from 'enzyme'; import Calendar from '../js/components/calendar/index'; xdescribe('test calendar', () => { const page = '2016-11-11'; const dates = page.split('-').map((str) => parseInt(str, 10)); const date = { year: dates[0], month: dates[1], date: dates[2] }; describe('test display', () => { it('displays with Monday', () => { let week = { index: 6, value: 'Sat' }; const calendar = mount( <Calendar page={'2016-10-11'} startWeek={week.index} /> ); const firstWrp = calendar.find('th').at(0); expect(firstWrp.text()).toBe(week.value); //startDay is equal to firstDay let week2 = { index: 2, value: 'Tue' }; const calendar2 = mount( <Calendar page={page} startWeek={week2.index} /> ); const firstWrp2 = calendar2.find('th').at(0); expect(firstWrp2.text()).toBe(week2.value); }); it('displays with specific page(year and month)', () => { const calendar = mount( <Calendar page={page} /> ); const yearNode = calendar.find('li.selected[data-year=' + date.year + ']'); const monthNode = calendar.find('li.selected[data-month=' + (date.month - 1) + ']'); expect(yearNode.text()).toBe('' + date.year); expect(monthNode.text()).toBe('Nov'); }); it('displays with selected date(year, month and date)', () => { const calendar = mount( <Calendar selectedDate={page} /> ); const selectedNode = calendar.find('td.selected'); expect(selectedNode.text()).toBe('' + date.date); }); it('displays correctly with invalid selected date', () => { let value = '2016-01-10'; let disabled = { dates: ['2016-01-10'] }; const calendar = mount( <Calendar selectedDate={value} disabled={disabled} /> ); const d = new Date(); const yearNode = calendar.find('li.selected[data-year=' + d.getFullYear() + ']'); const monthNode = calendar.find('li.selected[data-month=' + d.getMonth() + ']'); expect(yearNode.text()).toBe('' + d.getFullYear()); expect(monthNode.text()).toBe(d.toDateString().split(' ')[1]); }); it('displays with custom local', () => { const local = { weeks: ['日', '一', '二', '三', '四', '五', '六'], months: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'] }; const calendar = mount( <Calendar local={local} /> ); const monthWrps = calendar.find('li[data-month]'); const weekWrps = calendar.find('tr').at(0).children(); expect(monthWrps.map((ele) => ele.text())).toEqual(local.months); expect(weekWrps.map((ele) => ele.text())).toEqual(local.weeks); }); it('fold and unfold calendar when it has screen', () => { const calendar = mount( <Calendar hasScreen={true} unfold={false} /> ); const screenBox = calendar.find('.calendar-screen'); expect(screenBox.hasClass('unfold')).toBe(false); screenBox.simulate('click'); expect(screenBox.hasClass('unfold')).toBe(true); }); }); describe('test disabled date', () => { it('does not trigger disabled date', () => { const disabled = { min: '2016-10-7', max: '2016-10-27', weeks: [0, 3, 6], dates: ['2016-10-10', '2016-10-13', '2016-10-18', '2016-10-21'] }; const activeDate = '2016-10-11'; const enableNum = 6; const calendar = mount( <Calendar page={disabled.min} disabled={disabled} /> ); expect(calendar.find('.default').length).toBe(enableNum); const dateNodes = calendar.find('td[data-month=0]'); const activeNode = dateNodes.at(Number(activeDate.slice(-2)) - 1); const disabledNode = dateNodes.at(Number(disabled.dates[0].slice(-2)) - 1); activeNode.simulate('click'); const selectedNode = calendar.find('td.selected'); expect(selectedNode.text()).toBe(activeDate.slice(-2)); disabledNode.simulate('click'); const selectedNode2 = calendar.find('td.selected'); expect(selectedNode2.text()).toBe(activeDate.slice(-2)); }); }); describe('test event', () => { it('triggers beforeChange(), onChange and afterChange()', () => { let beforeChange = jest.genMockFunction(); let onChange = jest.genMockFunction(); let afterChange = jest.genMockFunction(); let newDate = { year: 2016, month: 11, date: 11 }; const calendar = mount( <Calendar page={newDate.year + '-' + newDate.month + '-' + newDate.date} beforeChange={beforeChange} onChange={onChange} afterChange={afterChange} /> ); const clickWrp = calendar.find('td[data-month=0]').at(newDate.date - 1); clickWrp.simulate('click'); expect(beforeChange.mock.calls[0][0]).toEqual(newDate); expect(onChange.mock.calls[0][0]).toEqual(newDate); expect(afterChange.mock.calls[0][0]).toEqual(newDate); }); }); describe('test header, including years and months', () => { const eventTarget = { nativeEvent: { stopImmediatePropagation() {} } }; it('click year', () => { const nextYear = '2017'; const calendar = mount( <Calendar page={page} /> ); const yearList = calendar.find('.title-left'); //simulate open years list yearList.simulate('click', eventTarget); //simulate click next year const nextYearNode = calendar.find('li[data-year=' + nextYear + ']'); nextYearNode.simulate('click', eventTarget); expect(yearList.find('.selected').text()).toBe(nextYear); }); it('click month', () => { const nextMonth = 11; //Dec const calendar = mount( <Calendar page={page} /> ); const monthList = calendar.find('.title-right'); //simulate open months list monthList.simulate('click', eventTarget); //simulate click next month const nextMonthNode = calendar.find('li[data-month=' + nextMonth + ']'); nextMonthNode.simulate('click', eventTarget); expect(monthList.find('.selected').props()['data-month']).toBe(nextMonth); }); }); describe('test screen value', () => { it('changes the screen value when date is clicked', () => { const calendar = mount( <Calendar page={page} hasScreen={true} unfold={true} /> ); const clickWrp = calendar.find('td[data-month=0]').at(date.date - 1); const screenWrp = calendar.find('input'); clickWrp.simulate('click'); expect(screenWrp.props().value).toBe(date.year + '-' + date.month + '-' + date.date); }); it('onChange screen value, press Enter key and recorect error input', () => { const page1 = '2016-01-01'; const page2 = '2016-01-31'; const disabledPage = '2016-01-02'; const errorPage = '2016-01-33333'; const disabled = { dates: [disabledPage] }; const calendar = mount( <Calendar page={page1} disabled={disabled} hasScreen={true} unfold={false} /> ); const input = calendar.find('input'); //test active date input.simulate('change', {target: {value: page2}}); input.simulate('keyPress', { key: 'Enter' //Enter Key }); expect(input.node.value).toBe(page2); //test disabled input date input.simulate('change', {target: {value: disabledPage}}); expect(input.node.value).toBe(disabledPage); input.simulate('keyPress', { key: 'Enter' //Enter Key }); expect(input.node.value).toBe(page2); //test error input date input.simulate('change', {target: {value: errorPage}}); expect(input.node.value).toBe(errorPage); input.simulate('keyPress', { key: 'Enter' //Enter Key }); expect(input.node.value).toBe(page2); //noting will happen when enter except Enter Key input.simulate('keyPress', { key: 'Left' }); expect(input.node.value).toBe(page2); }); }); });