blob: f2f9f12b08d0f437aef363cb4f4a434a21e6e659 [file] [log] [blame]
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
import ActionTypes from '../actiontypes';
import reducer from '../reducers';
describe('NavBar Reducer', () => {
describe('add links', () => {
it('to nav links', () => {
const action = {
type: ActionTypes.ADD_NAVBAR_LINK,
link: {
id: 'mylink'
}
};
const newState = reducer(undefined, action);
expect(newState.navLinks[0].id).toMatch(action.link.id);
});
it('to top nav links', () => {
const action1 = {
type: ActionTypes.ADD_NAVBAR_LINK,
link: { id: 'mylink1' }
};
const action2 = {
type: ActionTypes.ADD_NAVBAR_LINK,
link: { id: 'mylink2', top: true }
};
let newState = reducer(undefined, action1);
newState = reducer(newState, action2);
expect(newState.navLinks[0].id).toMatch(action2.link.id);
});
it('to bottom nav', () => {
const action = {
type: ActionTypes.ADD_NAVBAR_LINK,
link: {
id: 'bottomNav',
bottomNav: true
}
};
const newState = reducer(undefined, action);
expect(newState.bottomNavLinks[0].id).toMatch(action.link.id);
});
it('to top of bottom nav', () => {
const action = {
type: ActionTypes.ADD_NAVBAR_LINK,
link: {
id: 'bottomNav',
bottomNav: true,
top: true
}
};
const newState = reducer(undefined, action);
expect(newState.bottomNavLinks[0].id).toMatch(action.link.id);
});
it('to footer nav', () => {
const action = {
type: ActionTypes.ADD_NAVBAR_LINK,
link: {
id: 'footerNav',
footerNav: true
}
};
const newState = reducer(undefined, action);
expect(newState.footerNavLinks[0].id).toMatch(action.link.id);
});
});
describe('remove link', () => {
it('from nav links', () => {
const action = {
type: ActionTypes.ADD_NAVBAR_LINK,
link: {
id: 'remove_link'
}
};
let newState = reducer(undefined, action);
action.type = ActionTypes.REMOVE_NAVBAR_LINK;
newState = reducer(newState, action);
expect(newState.navLinks.length).toBe(0);
});
it('remove link from list only when it exists', () => {
const addAction = {
type: ActionTypes.ADD_NAVBAR_LINK,
link: {
id: 'remove_link1',
footerNav: true
}
};
let newState = reducer(undefined, addAction);
addAction.link = { id: 'remove_link2', footerNav: true };
newState = reducer(newState, addAction);
addAction.link = { id: 'remove_link3', footerNav: true };
newState = reducer(newState, addAction);
expect(newState.footerNavLinks.length).toBe(3);
const removeAction = {
type: ActionTypes.REMOVE_NAVBAR_LINK,
link: addAction.link
};
newState = reducer(newState, removeAction);
newState = reducer(newState, removeAction);
newState = reducer(newState, removeAction);
expect(newState.footerNavLinks.length).toBe(2);
});
it('from bottom nav links', () => {
const action = {
type: ActionTypes.ADD_NAVBAR_LINK,
link: {
id: 'remove_link',
bottomNav: true
}
};
let newState = reducer(undefined, action);
action.type = ActionTypes.REMOVE_NAVBAR_LINK;
newState = reducer(newState, action);
expect(newState.bottomNavLinks.length).toBe(0);
});
it('from footer nav links', () => {
const action = {
type: ActionTypes.ADD_NAVBAR_LINK,
link: {
id: 'remove_link',
footerNav: true
}
};
let newState = reducer(undefined, action);
action.type = ActionTypes.REMOVE_NAVBAR_LINK;
newState = reducer(newState, action);
expect(newState.footerNavLinks.length).toBe(0);
});
});
describe('update link', () => {
it('for nav links', () => {
const action = {
type: ActionTypes.ADD_NAVBAR_LINK,
link: {
id: 'update-link',
title: 'first'
}
};
let newState = reducer(undefined, action);
action.type = ActionTypes.UPDATE_NAVBAR_LINK;
action.link.title = 'second';
newState = reducer(newState, action);
expect(newState.navLinks[0].title).toMatch('second');
});
});
describe('set version', () => {
it('stores version number', () => {
const action = {
type: ActionTypes.NAVBAR_SET_VERSION_INFO,
version: 1234
};
const newState = reducer(undefined, action);
expect(newState.version).toBe(1234);
});
});
});