diff --git a/src/content/actions/addon.js b/src/content/actions/addon.js new file mode 100644 index 0000000..8d38025 --- /dev/null +++ b/src/content/actions/addon.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 }; diff --git a/src/content/actions/index.js b/src/content/actions/index.js index f8db948..085d510 100644 --- a/src/content/actions/index.js +++ b/src/content/actions/index.js @@ -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', diff --git a/src/content/reducers/addon.js b/src/content/reducers/addon.js new file mode 100644 index 0000000..8cc5ef1 --- /dev/null +++ b/src/content/reducers/addon.js @@ -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; + } +} diff --git a/test/content/actions/addon.test.js b/test/content/actions/addon.test.js new file mode 100644 index 0000000..7f244dc --- /dev/null +++ b/test/content/actions/addon.test.js @@ -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); + }); + }); +}); diff --git a/test/content/reducers/addon.test.js b/test/content/reducers/addon.test.js new file mode 100644 index 0000000..93f97e8 --- /dev/null +++ b/test/content/reducers/addon.test.js @@ -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); + }); + +});