Skip to content

Commit

Permalink
test: add test cases and fix some bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
benjycui committed Jul 31, 2017
1 parent 13eb1db commit 0d2048c
Show file tree
Hide file tree
Showing 6 changed files with 5,872 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/Calendar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ const Calendar = createReactClass({
defaultValue: PropTypes.object,
value: PropTypes.object,
selectedValue: PropTypes.object,
mode: PropTypes.oneOf(['data', 'month', 'year', 'decade']),
mode: PropTypes.oneOf(['date', 'month', 'year', 'decade']),
locale: PropTypes.object,
showDateInput: PropTypes.bool,
showWeekNumber: PropTypes.bool,
Expand Down Expand Up @@ -93,6 +93,11 @@ const Calendar = createReactClass({
showTimePicker: false,
};
},
componentWillReceiveProps(nextProps) {
if ('mode' in nextProps) {
this.setState({ mode: nextProps.mode });
}
},
onKeyDown(event) {
if (event.target.nodeName.toLowerCase() === 'input') {
return undefined;
Expand Down
4 changes: 4 additions & 0 deletions src/RangeCalendar.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ const RangeCalendar = createReactClass({
defaultValue: PropTypes.any,
value: PropTypes.any,
hoverValue: PropTypes.any,
mode: PropTypes.arrayOf(PropTypes.oneOf(['date', 'month', 'year', 'decade'])),
timePicker: PropTypes.any,
showOk: PropTypes.bool,
showToday: PropTypes.bool,
Expand Down Expand Up @@ -128,6 +129,9 @@ const RangeCalendar = createReactClass({
newState.prevSelectedValue = nextProps.selectedValue;
this.setState(newState);
}
if ('mode' in nextProps) {
this.setState({ mode: nextProps.mode });
}
},

onDatePanelEnter() {
Expand Down
53 changes: 53 additions & 0 deletions tests/Calendar.spec.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,59 @@ describe('Calendar', () => {
});
});

describe('controlled panels', () => {
it('render controlled panels correctly', () => {
const MonthPicker = mount(<Calendar mode="month" />);
expect(renderToJson(MonthPicker.render())).toMatchSnapshot();
MonthPicker.find('.rc-calendar-month-panel-year-select').at(0).simulate('click');
expect(MonthPicker.find('.rc-calendar-year-panel').length).toBe(0);
expect(MonthPicker.find('.rc-calendar-month-panel').length).toBe(1);

const YearPicker = mount(<Calendar mode="year" />);
expect(renderToJson(YearPicker.render())).toMatchSnapshot();
YearPicker.find('.rc-calendar-year-panel-decade-select').at(0).simulate('click');
expect(YearPicker.find('.rc-calendar-decade-panel').length).toBe(0);
expect(YearPicker.find('.rc-calendar-year-panel').length).toBe(1);
});

it('support controlled mode', () => {
class ControlledCalendar extends React.Component {
state = { mode: 'date' };

handlePanelChange = (mode) => {
this.setState({ mode });
}

render() {
return <Calendar mode={this.state.mode} onPanelChange={this.handlePanelChange} />;
}
}
const wrapper = mount(<ControlledCalendar />);

wrapper.find('.rc-calendar-month-select').simulate('click');
expect(wrapper.find('.rc-calendar-month-panel').length).toBe(1);
wrapper.find('.rc-calendar-month-panel-year-select').simulate('click');
expect(wrapper.find('.rc-calendar-year-panel').length).toBe(1);
wrapper.find('.rc-calendar-year-panel-decade-select').simulate('click');
expect(wrapper.find('.rc-calendar-decade-panel').length).toBe(1);
wrapper.find('.rc-calendar-decade-panel-selected-cell').simulate('click');
expect(wrapper.find('.rc-calendar-decade-panel').length).toBe(0);
wrapper.find('.rc-calendar-year-panel-selected-cell').simulate('click');
expect(wrapper.find('.rc-calendar-year-panel').length).toBe(0);
wrapper.find('.rc-calendar-month-panel-selected-cell').simulate('click');
expect(wrapper.find('.rc-calendar-month-panel').length).toBe(0);

wrapper.find('.rc-calendar-year-select').simulate('click');
expect(wrapper.find('.rc-calendar-year-panel').length).toBe(1);
wrapper.find('.rc-calendar-year-panel-decade-select').simulate('click');
expect(wrapper.find('.rc-calendar-decade-panel').length).toBe(1);
wrapper.find('.rc-calendar-decade-panel-selected-cell').simulate('click');
expect(wrapper.find('.rc-calendar-decade-panel').length).toBe(0);
wrapper.find('.rc-calendar-year-panel-selected-cell').simulate('click');
expect(wrapper.find('.rc-calendar-year-panel').length).toBe(0);
});
});

describe('after render', () => {
beforeEach((done) => {
ReactDOM.render(<Calendar showToday showWeekNumber/>, container, function ok() {
Expand Down
65 changes: 65 additions & 0 deletions tests/RangeCalendar.spec.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -257,4 +257,69 @@ describe('RangeCalendar', () => {
expect(wrapper.find('.rc-calendar-input').get(1).value).toBe('3/18/2017 23:59:59');
});
});

describe('controlled panels', () => {
it('render controlled panels correctly', () => {
const RangeMonthPicker = mount(<RangeCalendar mode={['month', 'month']} />);
expect(renderToJson(RangeMonthPicker.render())).toMatchSnapshot();
RangeMonthPicker.find('.rc-calendar-month-panel-year-select').at(0).simulate('click');
RangeMonthPicker.find('.rc-calendar-month-panel-year-select').at(1).simulate('click');
expect(RangeMonthPicker.find('.rc-calendar-year-panel').length).toBe(0);
expect(RangeMonthPicker.find('.rc-calendar-month-panel').length).toBe(2);

const RangeYearPicker = mount(<RangeCalendar mode={['year', 'year']} />);
expect(renderToJson(RangeYearPicker.render())).toMatchSnapshot();
RangeYearPicker.find('.rc-calendar-year-panel-decade-select').at(0).simulate('click');
RangeYearPicker.find('.rc-calendar-year-panel-decade-select').at(1).simulate('click');
expect(RangeYearPicker.find('.rc-calendar-decade-panel').length).toBe(0);
expect(RangeYearPicker.find('.rc-calendar-year-panel').length).toBe(2);
});

it('support controlled mode', () => {
class ControlledRangeCalendar extends React.Component {
state = { mode: ['date', 'date'] };

handlePanelChange = (mode) => {
this.setState({ mode });
}

render() {
return <RangeCalendar mode={this.state.mode} onPanelChange={this.handlePanelChange} />;
}
}
const wrapper = mount(<ControlledRangeCalendar />);

wrapper.find('.rc-calendar-month-select').at(0).simulate('click');
wrapper.find('.rc-calendar-month-select').at(1).simulate('click');
expect(wrapper.find('.rc-calendar-month-panel').length).toBe(2);
wrapper.find('.rc-calendar-month-panel-year-select').at(0).simulate('click');
wrapper.find('.rc-calendar-month-panel-year-select').at(0).simulate('click');
expect(wrapper.find('.rc-calendar-year-panel').length).toBe(2);
wrapper.find('.rc-calendar-year-panel-decade-select').at(0).simulate('click');
wrapper.find('.rc-calendar-year-panel-decade-select').at(0).simulate('click');
expect(wrapper.find('.rc-calendar-decade-panel').length).toBe(2);
wrapper.find('.rc-calendar-decade-panel-selected-cell').at(0).simulate('click');
wrapper.find('.rc-calendar-decade-panel-selected-cell').at(0).simulate('click');
expect(wrapper.find('.rc-calendar-decade-panel').length).toBe(0);
wrapper.find('.rc-calendar-year-panel-selected-cell').at(0).simulate('click');
wrapper.find('.rc-calendar-year-panel-selected-cell').at(0).simulate('click');
expect(wrapper.find('.rc-calendar-year-panel').length).toBe(0);
wrapper.find('.rc-calendar-month-panel-selected-cell').at(0).simulate('click');
wrapper.find('.rc-calendar-month-panel-selected-cell').at(0).simulate('click');
expect(wrapper.find('.rc-calendar-month-panel').length).toBe(0);

wrapper.find('.rc-calendar-year-select').at(0).simulate('click');
wrapper.find('.rc-calendar-year-select').at(1).simulate('click');
expect(wrapper.find('.rc-calendar-year-panel').length).toBe(2);
wrapper.find('.rc-calendar-year-panel-decade-select').at(0).simulate('click');
wrapper.find('.rc-calendar-year-panel-decade-select').at(0).simulate('click');
expect(wrapper.find('.rc-calendar-decade-panel').length).toBe(2);
wrapper.find('.rc-calendar-decade-panel-selected-cell').at(0).simulate('click');
wrapper.find('.rc-calendar-decade-panel-selected-cell').at(0).simulate('click');
expect(wrapper.find('.rc-calendar-decade-panel').length).toBe(0);
wrapper.find('.rc-calendar-year-panel-selected-cell').at(0).simulate('click');
wrapper.find('.rc-calendar-year-panel-selected-cell').at(0).simulate('click');
expect(wrapper.find('.rc-calendar-year-panel').length).toBe(0);
});
});
});
Loading

0 comments on commit 0d2048c

Please sign in to comment.