From a647f932dc8206583f727a4af64a200b6ec6857b Mon Sep 17 00:00:00 2001 From: Thomas Haddad Date: Tue, 2 May 2017 11:49:25 +0200 Subject: Add specs for timetable metas Signed-off-by: Thomas Shawarma Haddad --- spec/javascripts/time_table/actions_spec.js | 24 +++++++++++++++++ spec/javascripts/time_table/reducers/metas_spec.js | 31 +++++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) (limited to 'spec/javascripts/time_table') diff --git a/spec/javascripts/time_table/actions_spec.js b/spec/javascripts/time_table/actions_spec.js index c628a0f57..eac2f86bb 100644 --- a/spec/javascripts/time_table/actions_spec.js +++ b/spec/javascripts/time_table/actions_spec.js @@ -24,4 +24,28 @@ describe('actions', () => { } expect(actions.updateColor('#ffffff')).toEqual(expectedAction) }) + + it('should create an action to update selected tags', () => { + let selectedItem = { + id: 1, + name: 'test' + } + const expectedAction = { + type: 'UPDATE_SELECT_TAG', + selectedItem: selectedItem + } + expect(actions.select2Tags(selectedItem)).toEqual(expectedAction) + }) + + it('should create an action to update unselected tags', () => { + let selectedItem = { + id: 1, + name: 'test' + } + const expectedAction = { + type: 'UPDATE_UNSELECT_TAG', + selectedItem: selectedItem + } + expect(actions.unselect2Tags(selectedItem)).toEqual(expectedAction) + }) }) diff --git a/spec/javascripts/time_table/reducers/metas_spec.js b/spec/javascripts/time_table/reducers/metas_spec.js index 6f83abfec..adc6a9d05 100644 --- a/spec/javascripts/time_table/reducers/metas_spec.js +++ b/spec/javascripts/time_table/reducers/metas_spec.js @@ -4,10 +4,16 @@ let state = {} describe('status reducer', () => { beforeEach(() => { + let tag = { + id: 0, + name: 'test' + } state = { comment: 'test', day_types: [true, true, true, true, true, true, true], - color: 'blue' + color: 'blue', + initial_tags: [tag], + tags: [tag] } }) @@ -45,4 +51,27 @@ describe('status reducer', () => { ).toEqual(Object.assign({}, state, {color: '#ffffff'})) }) + it('should handle UPDATE_SELECT_TAG', () => { + expect( + metasReducer(state, { + type: 'UPDATE_SELECT_TAG', + selectedItem:{ + id: 1, + name: 'great' + } + }) + ).toEqual(Object.assign({}, state, {tags: [...state.tags, {id: 1, name:'great'}]})) + }) + + it('should handle UPDATE_UNSELECT_TAG', () => { + expect( + metasReducer(state, { + type: 'UPDATE_UNSELECT_TAG', + selectedItem:{ + id: 0, + name: 'test' + } + }) + ).toEqual(Object.assign({}, state, {tags: []})) + }) }) -- cgit v1.2.3 From ce845b8053d4fc665ca700c064cbd6f276bc4e1d Mon Sep 17 00:00:00 2001 From: Thomas Haddad Date: Thu, 4 May 2017 15:04:36 +0200 Subject: Add specs for redux timetable actions Signed-off-by: Thomas Shawarma Haddad --- spec/javascripts/time_table/actions_spec.js | 158 +++++++++++++++++++++++++++- 1 file changed, 157 insertions(+), 1 deletion(-) (limited to 'spec/javascripts/time_table') diff --git a/spec/javascripts/time_table/actions_spec.js b/spec/javascripts/time_table/actions_spec.js index eac2f86bb..73b2d2ac9 100644 --- a/spec/javascripts/time_table/actions_spec.js +++ b/spec/javascripts/time_table/actions_spec.js @@ -1,5 +1,16 @@ var actions = require('es6_browserified/time_tables/actions') - +const dispatch = function(){} +const dayTypes = [true, true, true, true, true, true, true] +const day = { + date : "2017-05-01", + day : "lundi", + excluded_date : false, + in_periods : true, + include_date : false, + mday : 1, + wday : 1, + wnumber : "18" +} describe('actions', () => { it('should create an action to update dayTypes', () => { const expectedAction = { @@ -48,4 +59,149 @@ describe('actions', () => { } expect(actions.unselect2Tags(selectedItem)).toEqual(expectedAction) }) + + + it('should create an action to go to previous page', () => { + let pagination = { + currentPage: '2017-01-01', + periode_range: [], + stateChanged: false + } + const expectedAction = { + type: 'GO_TO_PREVIOUS_PAGE', + dispatch, + pagination, + nextPage: false + } + expect(actions.goToPreviousPage(dispatch, pagination)).toEqual(expectedAction) + }) + + it('should create an action to go to next page', () => { + let pagination = { + currentPage: '2017-01-01', + periode_range: [], + stateChanged: false + } + const expectedAction = { + type: 'GO_TO_NEXT_PAGE', + dispatch, + pagination, + nextPage: true + } + expect(actions.goToNextPage(dispatch, pagination)).toEqual(expectedAction) + }) + + it('should create an action to change page', () => { + let page = '2017-05-04' + const expectedAction = { + type: 'CHANGE_PAGE', + dispatch, + page: page + } + expect(actions.changePage(dispatch, page)).toEqual(expectedAction) + }) + + it('should create an action to delete period', () => { + let index = 1 + const expectedAction = { + type: 'DELETE_PERIOD', + index, + dayTypes + } + expect(actions.deletePeriod(index, dayTypes)).toEqual(expectedAction) + }) + + it('should create an action to open add period form', () => { + const expectedAction = { + type: 'OPEN_ADD_PERIOD_FORM', + } + expect(actions.openAddPeriodForm()).toEqual(expectedAction) + }) + + it('should create an action to open edit period form', () => { + let period = { + id : 1, + period_end : "2017-03-05", + period_start : "2017-02-23" + } + let index = 1 + const expectedAction = { + type: 'OPEN_EDIT_PERIOD_FORM', + period, + index + } + expect(actions.openEditPeriodForm(period, index)).toEqual(expectedAction) + }) + + it('should create an action to close period form', () => { + const expectedAction = { + type: 'CLOSE_PERIOD_FORM', + } + expect(actions.closePeriodForm()).toEqual(expectedAction) + }) + + it('should create an action to update period form', () => { + let val = "11" + let group = "start" + let selectType = "day" + const expectedAction = { + type: 'UPDATE_PERIOD_FORM', + val, + group, + selectType + } + expect(actions.updatePeriodForm(val, group, selectType)).toEqual(expectedAction) + }) + + it('should create an action to validate period form', () => { + let modalProps = {} + let timeTablePeriods = [] + let metas = {} + const expectedAction = { + type: 'VALIDATE_PERIOD_FORM', + modalProps, + timeTablePeriods, + metas + } + expect(actions.validatePeriodForm(modalProps, timeTablePeriods, metas)).toEqual(expectedAction) + }) + + it('should create an action to include date in period', () => { + let index = 1 + const expectedAction = { + type: 'INCLUDE_DATE_IN_PERIOD', + index, + day, + dayTypes + } + expect(actions.includeDateInPeriod(index, day, dayTypes)).toEqual(expectedAction) + }) + + it('should create an action to exclude date from period', () => { + let index = 1 + const expectedAction = { + type: 'EXCLUDE_DATE_FROM_PERIOD', + index, + day, + dayTypes + } + expect(actions.excludeDateFromPeriod(index, day, dayTypes)).toEqual(expectedAction) + }) + + it('should create an action to open confirm modal', () => { + let callback = function(){} + const expectedAction = { + type: 'OPEN_CONFIRM_MODAL', + callback + } + expect(actions.openConfirmModal(callback)).toEqual(expectedAction) + }) + + it('should create an action to close modal', () => { + const expectedAction = { + type: 'CLOSE_MODAL', + } + expect(actions.closeModal()).toEqual(expectedAction) + }) + }) -- cgit v1.2.3 From bfea9e8e22a41d3de85fb265ba51b70e62aeba3f Mon Sep 17 00:00:00 2001 From: jpl Date: Thu, 4 May 2017 18:04:04 +0200 Subject: adding reducer tests for timetables reactux --- spec/javascripts/time_table/reducers/metas_spec.js | 2 +- spec/javascripts/time_table/reducers/modal_spec.js | 185 +++++++++++++++++++++ .../time_table/reducers/pagination_spec.js | 128 ++++++++++++++ .../javascripts/time_table/reducers/status_spec.js | 50 ++++++ .../time_table/reducers/timetable_spec.js | 20 +++ 5 files changed, 384 insertions(+), 1 deletion(-) create mode 100644 spec/javascripts/time_table/reducers/modal_spec.js create mode 100644 spec/javascripts/time_table/reducers/pagination_spec.js create mode 100644 spec/javascripts/time_table/reducers/status_spec.js create mode 100644 spec/javascripts/time_table/reducers/timetable_spec.js (limited to 'spec/javascripts/time_table') diff --git a/spec/javascripts/time_table/reducers/metas_spec.js b/spec/javascripts/time_table/reducers/metas_spec.js index adc6a9d05..61e3048db 100644 --- a/spec/javascripts/time_table/reducers/metas_spec.js +++ b/spec/javascripts/time_table/reducers/metas_spec.js @@ -2,7 +2,7 @@ var metasReducer = require('es6_browserified/time_tables/reducers/metas') let state = {} -describe('status reducer', () => { +describe('metas reducer', () => { beforeEach(() => { let tag = { id: 0, diff --git a/spec/javascripts/time_table/reducers/modal_spec.js b/spec/javascripts/time_table/reducers/modal_spec.js new file mode 100644 index 000000000..ceed0a43e --- /dev/null +++ b/spec/javascripts/time_table/reducers/modal_spec.js @@ -0,0 +1,185 @@ +var modalReducer = require('es6_browserified/time_tables/reducers/modal') + +let state = {} + +describe('modal reducer', () => { + beforeEach(() => { + state = { + confirmModal: {}, + modalProps: { + active: false, + begin: { + day: '01', + month: '01', + year: String(new Date().getFullYear()) + }, + end: { + day: '01', + month: '01', + year: String(new Date().getFullYear()) + }, + index: false, + error: '' + }, + type: "" + } + }) + + it('should return the initial state', () => { + expect( + modalReducer(undefined, {}) + ).toEqual({}) + }) + + it('should handle OPEN_CONFIRM_MODAL', () => { + let callback = function(){} + expect( + modalReducer(state, { + type: 'OPEN_CONFIRM_MODAL', + callback + }) + ).toEqual(Object.assign({}, state, {type: "confirm", confirmModal: { callback: callback }})) + }) + + it('should handle CLOSE_PERIOD_FORM', () => { + let newModalProps = Object.assign({}, state.modalProps, {active: false}) + expect( + modalReducer(state, { + type: 'CLOSE_PERIOD_FORM' + }) + ).toEqual(Object.assign({}, state, {modalProps: newModalProps})) + }) + + it('should handle OPEN_EDIT_PERIOD_FORM', () => { + let period = { + id : 1, + period_end : "2017-03-05", + period_start : "2017-02-23" + } + let period_start = period.period_start.split('-') + let period_end = period.period_end.split('-') + + let index = 1 + + let newModalProps = { + active: true, + begin: { + day: period_start[2], + month: period_start[1], + year: period_start[0] + }, + end: { + day: period_end[2], + month: period_end[1], + year: period_end[0] + }, + index: index, + error: '' + } + expect( + modalReducer(state, { + type: 'OPEN_EDIT_PERIOD_FORM', + period, + index + }) + ).toEqual(Object.assign({}, state, {modalProps: newModalProps})) + }) + + it('should handle OPEN_ADD_PERIOD_FORM', () => { + let emptyDate = { + day: '01', + month: '01', + year: String(new Date().getFullYear()) + } + let newModalProps = Object.assign({}, state.modalProps, { + active: true, + begin: emptyDate, + end: emptyDate, + index: false, + error: "" + }) + + expect( + modalReducer(state, { + type: 'OPEN_ADD_PERIOD_FORM' + }) + ).toEqual(Object.assign({}, state, {modalProps: newModalProps})) + }) + + it('should handle UPDATE_PERIOD_FORM', () => { + let val = "11" + let group = "begin" + let selectType = "day" + + let newModalProps = { + active: false, + begin: { + day: val, + month: '01', + year: String(new Date().getFullYear()) + }, + end: { + day: '01', + month: '01', + year: String(new Date().getFullYear()) + }, + index: false, + error: '' + } + + expect( + modalReducer(state, { + type: 'UPDATE_PERIOD_FORM', + val, + group, + selectType + }) + ).toEqual(Object.assign({}, state, {modalProps: newModalProps})) + }) + + it('should handle VALIDATE_PERIOD_FORM', () => { + // if period_end <= period_start, throw error + // if newperiod is on another one, throw error + + let modProps = { + active: false, + begin: { + day: '13', + month: '01', + year: String(new Date().getFullYear()) + }, + end: { + day: '01', + month: '01', + year: String(new Date().getFullYear()) + }, + index: false, + error: '' + } + let newModalProps = { + active: false, + begin: { + day: '01', + month: '01', + year: String(new Date().getFullYear()) + }, + end: { + day: '01', + month: '01', + year: String(new Date().getFullYear()) + }, + index: false, + error: 'La date de départ doit être antérieure à la date de fin' + } + + let ttperiods = [] + + expect( + modalReducer(state, { + type: 'VALIDATE_PERIOD_FORM', + modalProps : modProps, + timeTablePeriods: ttperiods + }) + ).toEqual(Object.assign({}, state, {modalProps: newModalProps})) + }) +}) diff --git a/spec/javascripts/time_table/reducers/pagination_spec.js b/spec/javascripts/time_table/reducers/pagination_spec.js new file mode 100644 index 000000000..740ded3ac --- /dev/null +++ b/spec/javascripts/time_table/reducers/pagination_spec.js @@ -0,0 +1,128 @@ +var paginationReducer = require('es6_browserified/time_tables/reducers/pagination') + +const dispatch = function(){} + +let pagination = { + currentPage: "1982-02-15", + periode_range: ["1982-02-01", "1982-02-02", "1982-02-03"], + stateChanged: false +} + +let state = {} + +describe('pagination reducer', () => { + beforeEach(() => { + state = { + currentPage: "", + periode_range: [], + stateChanged: false + } + }) + + it('should return the initial state', () => { + expect( + paginationReducer(undefined, {}) + ).toEqual({}) + }) + + it('should handle RECEIVE_TIME_TABLES', () => { + let json = [{ + current_periode_range: "1982-02-15", + periode_range: ["1982-02-01", "1982-02-02", "1982-02-03"] + }] + expect( + paginationReducer(state, { + type: 'RECEIVE_TIME_TABLES', + json + }) + ).toEqual(Object.assign({}, state, {currentPage: json.current_periode_range, periode_range: json.periode_range})) + }) + + it('should handle GO_TO_PREVIOUS_PAGE', () => { + let nextPage = nextPage ? 1 : -1 + let newPage = pagination.periode_range[pagination.periode_range.indexOf(pagination.currentPage) + nextPage] + + expect( + paginationReducer(state, { + type: 'GO_TO_PREVIOUS_PAGE', + dispatch, + pagination, + nextPage: false + }) + ).toEqual(Object.assign({}, state, {currentPage : newPage, stateChanged: false})) + }) + it('should handle GO_TO_NEXT_PAGE', () => { + let nextPage = nextPage ? 1 : -1 + let newPage = pagination.periode_range[pagination.periode_range.indexOf(pagination.currentPage) + nextPage] + + expect( + paginationReducer(state, { + type: 'GO_TO_NEXT_PAGE', + dispatch, + pagination, + nextPage: false + }) + ).toEqual(Object.assign({}, state, {currentPage : newPage, stateChanged: false})) + }) + + it('should handle CHANGE_PAGE', () => { + let page = "1982-02-15" + expect( + paginationReducer(state, { + type: 'CHANGE_PAGE', + dispatch, + page + }) + ).toEqual(Object.assign({}, state, {currentPage : page, stateChanged: false})) + }) + + it('should handle INCLUDE_DATE_IN_PERIOD', () => { + expect( + paginationReducer(state, { + type: 'INCLUDE_DATE_IN_PERIOD' + }) + ).toEqual(Object.assign({}, state, {stateChanged: true})) + }) + it('should handle EXCLUDE_DATE_FROM_PERIOD', () => { + expect( + paginationReducer(state, { + type: 'EXCLUDE_DATE_FROM_PERIOD' + }) + ).toEqual(Object.assign({}, state, {stateChanged: true})) + }) + it('should handle DELETE_PERIOD', () => { + expect( + paginationReducer(state, { + type: 'DELETE_PERIOD' + }) + ).toEqual(Object.assign({}, state, {stateChanged: true})) + }) + it('should handle VALIDATE_PERIOD_FORM', () => { + expect( + paginationReducer(state, { + type: 'VALIDATE_PERIOD_FORM' + }) + ).toEqual(Object.assign({}, state, {stateChanged: true})) + }) + it('should handle UPDATE_COMMENT', () => { + expect( + paginationReducer(state, { + type: 'UPDATE_COMMENT' + }) + ).toEqual(Object.assign({}, state, {stateChanged: true})) + }) + it('should handle UPDATE_COLOR', () => { + expect( + paginationReducer(state, { + type: 'UPDATE_COLOR' + }) + ).toEqual(Object.assign({}, state, {stateChanged: true})) + }) + it('should handle UPDATE_DAY_TYPES', () => { + expect( + paginationReducer(state, { + type: 'UPDATE_DAY_TYPES' + }) + ).toEqual(Object.assign({}, state, {stateChanged: true})) + }) +}) diff --git a/spec/javascripts/time_table/reducers/status_spec.js b/spec/javascripts/time_table/reducers/status_spec.js new file mode 100644 index 000000000..f000324cc --- /dev/null +++ b/spec/javascripts/time_table/reducers/status_spec.js @@ -0,0 +1,50 @@ +var statusReducer = require('es6_browserified/time_tables/reducers/status') + +let state = {} + +describe('status reducer', () => { + beforeEach(() => { + state = { + actionType: "edit", + fetchSuccess: true, + isFetching: false + } + }) + + it('should return the initial state', () => { + expect( + statusReducer(undefined, {}) + ).toEqual({}) + }) + + it('should handle UNAVAILABLE_SERVER', () => { + expect( + statusReducer(state, { + type: 'UNAVAILABLE_SERVER' + }) + ).toEqual(Object.assign({}, state, {fetchSuccess: false})) + }) + + it('should handle FETCH_API', () => { + expect( + statusReducer(state, { + type: 'FETCH_API' + }) + ).toEqual(Object.assign({}, state, {isFetching: true})) + }) + + it('should handle RECEIVE_TIME_TABLES', () => { + expect( + statusReducer(state, { + type: 'RECEIVE_TIME_TABLES' + }) + ).toEqual(Object.assign({}, state, {fetchSuccess: true, isFetching: false})) + }) + it('should handle RECEIVE_MONTH', () => { + expect( + statusReducer(state, { + type: 'RECEIVE_MONTH' + }) + ).toEqual(Object.assign({}, state, {fetchSuccess: true, isFetching: false})) + }) +}) diff --git a/spec/javascripts/time_table/reducers/timetable_spec.js b/spec/javascripts/time_table/reducers/timetable_spec.js new file mode 100644 index 000000000..734095cfc --- /dev/null +++ b/spec/javascripts/time_table/reducers/timetable_spec.js @@ -0,0 +1,20 @@ +var timetableReducer = require('es6_browserified/time_tables/reducers/timetable') + +let state = {} + +describe('timetable reducer', () => { + beforeEach(() => { + state = { + current_month: [], + current_periode_range: "", + periode_range: [], + time_table_periods: [] + } + }) + + it('should return the initial state', () => { + expect( + timetableReducer(undefined, {}) + ).toEqual({}) + }) +}) -- cgit v1.2.3 From c1b2c713d1fd355e1e5e853bf1d0c5fa95c8bb72 Mon Sep 17 00:00:00 2001 From: jpl Date: Fri, 5 May 2017 12:39:35 +0200 Subject: adding reducer tests for timetables reactux (2) --- spec/javascripts/time_table/reducers/modal_spec.js | 72 ++++++++++++++++++++-- 1 file changed, 68 insertions(+), 4 deletions(-) (limited to 'spec/javascripts/time_table') diff --git a/spec/javascripts/time_table/reducers/modal_spec.js b/spec/javascripts/time_table/reducers/modal_spec.js index ceed0a43e..4246027b8 100644 --- a/spec/javascripts/time_table/reducers/modal_spec.js +++ b/spec/javascripts/time_table/reducers/modal_spec.js @@ -137,10 +137,7 @@ describe('modal reducer', () => { ).toEqual(Object.assign({}, state, {modalProps: newModalProps})) }) - it('should handle VALIDATE_PERIOD_FORM', () => { - // if period_end <= period_start, throw error - // if newperiod is on another one, throw error - + it('should handle VALIDATE_PERIOD_FORM and throw error if period starts after the end', () => { let modProps = { active: false, begin: { @@ -182,4 +179,71 @@ describe('modal reducer', () => { }) ).toEqual(Object.assign({}, state, {modalProps: newModalProps})) }) + + it('should handle VALIDATE_PERIOD_FORM and throw error if periods overlap', () => { + let state2 = { + confirmModal: {}, + modalProps: { + active: false, + begin: { + day: '03', + month: '05', + year: '2017' + }, + end: { + day: '09', + month: '05', + year: '2017' + }, + index: false, + error: '' + }, + type: '' + } + let modProps2 = { + active: false, + begin: { + day: '03', + month: '05', + year: '2017' + }, + end: { + day: '09', + month: '05', + year: '2017' + }, + index: false, + error: '' + } + let ttperiods2 = [ + {id: 261, period_start: '2017-02-23', period_end: '2017-03-05'}, + {id: 262, period_start: '2017-03-15', period_end: '2017-03-25'}, + {id: 264, period_start: '2017-04-24', period_end: '2017-05-04'}, + {id: 265, period_start: '2017-05-14', period_end: '2017-05-24'} + ] + + let newModalProps2 = { + active: true, + begin: { + day: '03', + month: '05', + year: '2017' + }, + end: { + day: '09', + month: '05', + year: '2017' + }, + index: false, + error: "Les périodes ne peuvent pas se chevaucher" + } + + expect( + modalReducer(state2, { + type: 'VALIDATE_PERIOD_FORM', + modalProps : modProps2, + timeTablePeriods: ttperiods2 + }) + ).toEqual(Object.assign({}, state2, {modalProps: newModalProps2})) + }) }) -- cgit v1.2.3 From ef13c897645ed2397db3fede5257a41f62ca9c39 Mon Sep 17 00:00:00 2001 From: Thomas Haddad Date: Fri, 5 May 2017 15:33:40 +0200 Subject: Js gardening in timetable actions & action specs Signed-off-by: Thomas Shawarma Haddad --- spec/javascripts/time_table/actions_spec.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'spec/javascripts/time_table') diff --git a/spec/javascripts/time_table/actions_spec.js b/spec/javascripts/time_table/actions_spec.js index 73b2d2ac9..a8abd8f90 100644 --- a/spec/javascripts/time_table/actions_spec.js +++ b/spec/javascripts/time_table/actions_spec.js @@ -171,10 +171,9 @@ describe('actions', () => { const expectedAction = { type: 'INCLUDE_DATE_IN_PERIOD', index, - day, dayTypes } - expect(actions.includeDateInPeriod(index, day, dayTypes)).toEqual(expectedAction) + expect(actions.includeDateInPeriod(index, dayTypes)).toEqual(expectedAction) }) it('should create an action to exclude date from period', () => { @@ -182,10 +181,9 @@ describe('actions', () => { const expectedAction = { type: 'EXCLUDE_DATE_FROM_PERIOD', index, - day, dayTypes } - expect(actions.excludeDateFromPeriod(index, day, dayTypes)).toEqual(expectedAction) + expect(actions.excludeDateFromPeriod(index, dayTypes)).toEqual(expectedAction) }) it('should create an action to open confirm modal', () => { -- cgit v1.2.3 From 757304a4378ba82543e42e21a75b0509272b8d67 Mon Sep 17 00:00:00 2001 From: Thomas Haddad Date: Fri, 5 May 2017 16:52:03 +0200 Subject: Add specs for timetable reducers Signed-off-by: Thomas Shawarma Haddad --- .../time_table/reducers/timetable_spec.js | 166 ++++++++++++++++++++- 1 file changed, 165 insertions(+), 1 deletion(-) (limited to 'spec/javascripts/time_table') diff --git a/spec/javascripts/time_table/reducers/timetable_spec.js b/spec/javascripts/time_table/reducers/timetable_spec.js index 734095cfc..0b418a52e 100644 --- a/spec/javascripts/time_table/reducers/timetable_spec.js +++ b/spec/javascripts/time_table/reducers/timetable_spec.js @@ -1,8 +1,26 @@ +require('whatwg-fetch') var timetableReducer = require('es6_browserified/time_tables/reducers/timetable') let state = {} +const dispatch = function(){} +let arrDayTypes = [true, true, true, true, true, true, true] +let strDayTypes = 'LuMaMeJeVeSaDi' +let time_table_periods = [{"id":261,"period_start":"2017-02-23","period_end":"2017-03-05"},{"id":262,"period_start":"2017-03-15","period_end":"2017-03-25"},{"id":263,"period_start":"2017-04-04","period_end":"2017-04-14"},{"id":264,"period_start":"2017-04-24","period_end":"2017-05-04"},{"id":265,"period_start":"2017-05-14","period_end":"2017-05-24"}] +let current_periode_range = "2017-05-01" +let periode_range = ["2014-05-01","2014-06-01","2014-07-01","2014-08-01","2014-09-01","2014-10-01","2014-11-01","2014-12-01","2015-01-01","2015-02-01","2015-03-01","2015-04-01","2015-05-01","2015-06-01","2015-07-01","2015-08-01","2015-09-01","2015-10-01","2015-11-01","2015-12-01","2016-01-01","2016-02-01","2016-03-01","2016-04-01","2016-05-01","2016-06-01","2016-07-01","2016-08-01","2016-09-01","2016-10-01","2016-11-01","2016-12-01","2017-01-01","2017-02-01","2017-03-01","2017-04-01","2017-05-01","2017-06-01","2017-07-01","2017-08-01","2017-09-01","2017-10-01","2017-11-01","2017-12-01","2018-01-01","2018-02-01","2018-03-01","2018-04-01","2018-05-01","2018-06-01","2018-07-01","2018-08-01","2018-09-01","2018-10-01","2018-11-01","2018-12-01","2019-01-01","2019-02-01","2019-03-01","2019-04-01","2019-05-01","2019-06-01","2019-07-01","2019-08-01","2019-09-01","2019-10-01","2019-11-01","2019-12-01","2020-01-01","2020-02-01","2020-03-01","2020-04-01","2020-05-01"] +let current_month = [{"day":"lundi","date":"2017-05-01","wday":1,"wnumber":"18","mday":1,"include_date":false,"excluded_date":false},{"day":"mardi","date":"2017-05-02","wday":2,"wnumber":"18","mday":2,"include_date":false,"excluded_date":false},{"day":"mercredi","date":"2017-05-03","wday":3,"wnumber":"18","mday":3,"include_date":false,"excluded_date":false},{"day":"jeudi","date":"2017-05-04","wday":4,"wnumber":"18","mday":4,"include_date":false,"excluded_date":false},{"day":"vendredi","date":"2017-05-05","wday":5,"wnumber":"18","mday":5,"include_date":false,"excluded_date":false},{"day":"samedi","date":"2017-05-06","wday":6,"wnumber":"18","mday":6,"include_date":false,"excluded_date":false},{"day":"dimanche","date":"2017-05-07","wday":0,"wnumber":"18","mday":7,"include_date":false,"excluded_date":false},{"day":"lundi","date":"2017-05-08","wday":1,"wnumber":"19","mday":8,"include_date":false,"excluded_date":false},{"day":"mardi","date":"2017-05-09","wday":2,"wnumber":"19","mday":9,"include_date":false,"excluded_date":false},{"day":"mercredi","date":"2017-05-10","wday":3,"wnumber":"19","mday":10,"include_date":false,"excluded_date":false},{"day":"jeudi","date":"2017-05-11","wday":4,"wnumber":"19","mday":11,"include_date":false,"excluded_date":false},{"day":"vendredi","date":"2017-05-12","wday":5,"wnumber":"19","mday":12,"include_date":false,"excluded_date":false},{"day":"samedi","date":"2017-05-13","wday":6,"wnumber":"19","mday":13,"include_date":false,"excluded_date":false},{"day":"dimanche","date":"2017-05-14","wday":0,"wnumber":"19","mday":14,"include_date":false,"excluded_date":false},{"day":"lundi","date":"2017-05-15","wday":1,"wnumber":"20","mday":15,"include_date":false,"excluded_date":false},{"day":"mardi","date":"2017-05-16","wday":2,"wnumber":"20","mday":16,"include_date":false,"excluded_date":false},{"day":"mercredi","date":"2017-05-17","wday":3,"wnumber":"20","mday":17,"include_date":false,"excluded_date":false},{"day":"jeudi","date":"2017-05-18","wday":4,"wnumber":"20","mday":18,"include_date":false,"excluded_date":false},{"day":"vendredi","date":"2017-05-19","wday":5,"wnumber":"20","mday":19,"include_date":false,"excluded_date":false},{"day":"samedi","date":"2017-05-20","wday":6,"wnumber":"20","mday":20,"include_date":false,"excluded_date":false},{"day":"dimanche","date":"2017-05-21","wday":0,"wnumber":"20","mday":21,"include_date":false,"excluded_date":false},{"day":"lundi","date":"2017-05-22","wday":1,"wnumber":"21","mday":22,"include_date":false,"excluded_date":false},{"day":"mardi","date":"2017-05-23","wday":2,"wnumber":"21","mday":23,"include_date":false,"excluded_date":false},{"day":"mercredi","date":"2017-05-24","wday":3,"wnumber":"21","mday":24,"include_date":false,"excluded_date":false},{"day":"jeudi","date":"2017-05-25","wday":4,"wnumber":"21","mday":25,"include_date":false,"excluded_date":false},{"day":"vendredi","date":"2017-05-26","wday":5,"wnumber":"21","mday":26,"include_date":false,"excluded_date":false},{"day":"samedi","date":"2017-05-27","wday":6,"wnumber":"21","mday":27,"include_date":false,"excluded_date":false},{"day":"dimanche","date":"2017-05-28","wday":0,"wnumber":"21","mday":28,"include_date":false,"excluded_date":false},{"day":"lundi","date":"2017-05-29","wday":1,"wnumber":"22","mday":29,"include_date":false,"excluded_date":false},{"day":"mardi","date":"2017-05-30","wday":2,"wnumber":"22","mday":30,"include_date":false,"excluded_date":false},{"day":"mercredi","date":"2017-05-31","wday":3,"wnumber":"22","mday":31,"include_date":false,"excluded_date":false}] -describe('timetable reducer', () => { +let newCurrentMonth = [{"day":"lundi","date":"2017-05-01","wday":1,"wnumber":"18","mday":1,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"mardi","date":"2017-05-02","wday":2,"wnumber":"18","mday":2,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"mercredi","date":"2017-05-03","wday":3,"wnumber":"18","mday":3,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"jeudi","date":"2017-05-04","wday":4,"wnumber":"18","mday":4,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"vendredi","date":"2017-05-05","wday":5,"wnumber":"18","mday":5,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"samedi","date":"2017-05-06","wday":6,"wnumber":"18","mday":6,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"dimanche","date":"2017-05-07","wday":0,"wnumber":"18","mday":7,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"lundi","date":"2017-05-08","wday":1,"wnumber":"19","mday":8,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"mardi","date":"2017-05-09","wday":2,"wnumber":"19","mday":9,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"mercredi","date":"2017-05-10","wday":3,"wnumber":"19","mday":10,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"jeudi","date":"2017-05-11","wday":4,"wnumber":"19","mday":11,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"vendredi","date":"2017-05-12","wday":5,"wnumber":"19","mday":12,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"samedi","date":"2017-05-13","wday":6,"wnumber":"19","mday":13,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"dimanche","date":"2017-05-14","wday":0,"wnumber":"19","mday":14,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"lundi","date":"2017-05-15","wday":1,"wnumber":"20","mday":15,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"mardi","date":"2017-05-16","wday":2,"wnumber":"20","mday":16,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"mercredi","date":"2017-05-17","wday":3,"wnumber":"20","mday":17,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"jeudi","date":"2017-05-18","wday":4,"wnumber":"20","mday":18,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"vendredi","date":"2017-05-19","wday":5,"wnumber":"20","mday":19,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"samedi","date":"2017-05-20","wday":6,"wnumber":"20","mday":20,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"dimanche","date":"2017-05-21","wday":0,"wnumber":"20","mday":21,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"lundi","date":"2017-05-22","wday":1,"wnumber":"21","mday":22,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"mardi","date":"2017-05-23","wday":2,"wnumber":"21","mday":23,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"mercredi","date":"2017-05-24","wday":3,"wnumber":"21","mday":24,"include_date":false,"excluded_date":false,"in_periods":true},{"day":"jeudi","date":"2017-05-25","wday":4,"wnumber":"21","mday":25,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"vendredi","date":"2017-05-26","wday":5,"wnumber":"21","mday":26,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"samedi","date":"2017-05-27","wday":6,"wnumber":"21","mday":27,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"dimanche","date":"2017-05-28","wday":0,"wnumber":"21","mday":28,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"lundi","date":"2017-05-29","wday":1,"wnumber":"22","mday":29,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"mardi","date":"2017-05-30","wday":2,"wnumber":"22","mday":30,"include_date":false,"excluded_date":false,"in_periods":false},{"day":"mercredi","date":"2017-05-31","wday":3,"wnumber":"22","mday":31,"include_date":false,"excluded_date":false,"in_periods":false}] + +let json = { + current_month: current_month, + current_periode_range: current_periode_range, + periode_range: periode_range, + time_table_periods: time_table_periods, + day_types: strDayTypes +} + +describe('timetable reducer with empty state', () => { beforeEach(() => { state = { current_month: [], @@ -17,4 +35,150 @@ describe('timetable reducer', () => { timetableReducer(undefined, {}) ).toEqual({}) }) + + it('should handle RECEIVE_TIME_TABLES', () => { + let newState = { + current_month: newCurrentMonth, + current_periode_range: current_periode_range, + periode_range: periode_range, + time_table_periods: time_table_periods, + } + expect( + timetableReducer(state, { + type: 'RECEIVE_TIME_TABLES', + json + }) + ).toEqual(newState) + }) +}) + +describe('timetable reducer with filled state', () => { + beforeEach(() => { + state = { + current_month: newCurrentMonth, + current_periode_range: current_periode_range, + periode_range: periode_range, + time_table_periods: time_table_periods, + } + }) + + it('should handle RECEIVE_MONTH', () => { + expect( + timetableReducer(state, { + type: 'RECEIVE_MONTH', + json: { + days: current_month, + day_types: strDayTypes + } + }) + ).toEqual(state) + }) + + + it('should handle GO_TO_PREVIOUS_PAGE', () => { + let pagination = { + periode_range: periode_range, + currentPage: current_periode_range + } + expect( + timetableReducer(state, { + type: 'GO_TO_PREVIOUS_PAGE', + dispatch, + pagination, + nextPage: false + }) + ).toEqual(Object.assign({}, state, {current_periode_range: '2017-04-01'})) + }) + + it('should handle GO_TO_NEXT_PAGE', () => { + let pagination = { + periode_range: periode_range, + currentPage: current_periode_range + } + expect( + timetableReducer(state, { + type: 'GO_TO_NEXT_PAGE', + dispatch, + pagination, + nextPage: true + }) + ).toEqual(Object.assign({}, state, {current_periode_range: '2017-06-01'})) + }) + + it('should handle CHANGE_PAGE', () => { + const actions = { + fetchTimeTables: function(){} + } + let newPage = '2017-05-01' + expect( + timetableReducer(state, { + type: 'CHANGE_PAGE', + dispatch, + page: newPage + }) + ).toEqual(Object.assign({}, state, {current_periode_range: newPage})) + }) + + it('should handle DELETE_PERIOD', () => { + state.time_table_periods[0].deleted = true + expect( + timetableReducer(state, { + type: 'DELETE_PERIOD', + index: 0, + dayTypes: arrDayTypes + }) + ).toEqual(state) + }) + + it('should handle INCLUDE_DATE_IN_PERIOD', () => { + state.current_month[4].include_date = true + expect( + timetableReducer(state, { + type: 'INCLUDE_DATE_IN_PERIOD', + index: 4, + dayTypes: arrDayTypes + }) + ).toEqual(state) + }) + + it('should handle EXCLUDE_DATE_FROM_PERIOD', () => { + state.current_month[0].excluded_date = true + expect( + timetableReducer(state, { + type: 'EXCLUDE_DATE_FROM_PERIOD', + index: 0, + dayTypes: arrDayTypes + }) + ).toEqual(state) + }) + + it('should handle VALIDATE_PERIOD_FORM', () => { + state.current_month[13].in_periods = false + state.time_table_periods[4].period_start = '2017-05-15' + let modalProps = { + active: false, + begin: { + day: '15', + month: '05', + year: '2017' + }, + end: { + day: '24', + month: '05', + year: '2017' + }, + error: '', + index: 4 + } + expect( + timetableReducer(state, { + type: 'VALIDATE_PERIOD_FORM', + modalProps: modalProps, + timeTablePeriods: state.time_table_periods, + metas: { + day_types: arrDayTypes + } + }) + ).toEqual(state) + }) }) -- cgit v1.2.3