add addon actions

jh-changes
Shin'ya Ueoka 7 years ago
parent cd6f7e7788
commit 59f7ef205d
  1. 15
      src/content/actions/addon.js
  2. 4
      src/content/actions/index.js
  3. 24
      src/content/reducers/addon.js
  4. 26
      test/content/actions/addon.test.js
  5. 38
      test/content/reducers/addon.test.js

@ -0,0 +1,15 @@
import actions from 'content/actions';
const enable = () => {
return { type: actions.ADDON_ENABLE };
};
const disable = () => {
return { type: actions.ADDON_DISABLE };
};
const toggleEnabled = () => {
return { type: actions.ADDON_TOGGLE_ENABLED };
};
export { enable, disable, toggleEnabled };

@ -1,5 +1,9 @@
export default {
// User input
ADDON_ENABLE: 'addon.enable',
ADDON_DISABLE: 'addon.disable',
ADDON_TOGGLE_ENABLED: 'addon.toggle.enabled',
INPUT_KEY_PRESS: 'input.key,press',
INPUT_CLEAR_KEYS: 'input.clear.keys',
INPUT_SET_KEYMAPS: 'input.set.keymaps',

@ -0,0 +1,24 @@
import actions from 'content/actions';
const defaultState = {
enabled: true,
};
export default function reducer(state = defaultState, action = {}) {
switch (action.type) {
case actions.ADDON_ENABLE:
return Object.assign({}, state, {
enabled: true,
});
case actions.ADDON_DISABLE:
return Object.assign({}, state, {
enabled: false,
});
case actions.ADDON_TOGGLE_ENABLED:
return Object.assign({}, state, {
enabled: !state.enabled,
});
default:
return state;
}
}

@ -0,0 +1,26 @@
import { expect } from "chai";
import actions from 'content/actions';
import * as addonActions from 'content/actions/addon';
describe("addon actions", () => {
describe("enable", () => {
it('create ADDON_ENABLE action', () => {
let action = addonActions.enable();
expect(action.type).to.equal(actions.ADDON_ENABLE);
});
});
describe("disable", () => {
it('create ADDON_DISABLE action', () => {
let action = addonActions.disable();
expect(action.type).to.equal(actions.ADDON_DISABLE);
});
});
describe("toggle", () => {
it('create ADDON_TOGGLE_ENABLED action', () => {
let action = addonActions.toggleEnabled();
expect(action.type).to.equal(actions.ADDON_TOGGLE_ENABLED);
});
});
});

@ -0,0 +1,38 @@
import { expect } from "chai";
import actions from 'content/actions';
import addonReducer from 'content/reducers/addon';
describe("addon reducer", () => {
it('return the initial state', () => {
let state = addonReducer(undefined, {});
expect(state).to.have.property('enabled', true);
});
it('return next state for ADDON_ENABLE', () => {
let action = { type: actions.ADDON_ENABLE};
let prev = { enabled: false };
let state = addonReducer(prev, action);
expect(state.enabled).is.equal(true);
});
it('return next state for ADDON_DISABLE', () => {
let action = { type: actions.ADDON_DISABLE};
let prev = { enabled: true };
let state = addonReducer(prev, action);
expect(state.enabled).is.equal(false);
});
it('return next state for ADDON_TOGGLE_ENABLED', () => {
let action = { type: actions.ADDON_TOGGLE_ENABLED };
let state = { enabled: false };
state = addonReducer(state, action);
expect(state.enabled).is.equal(true);
state = addonReducer(state, action);
expect(state.enabled).is.equal(false);
});
});