aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/content/actions/addon.js15
-rw-r--r--src/content/actions/index.js4
-rw-r--r--src/content/reducers/addon.js24
-rw-r--r--test/content/actions/addon.test.js26
-rw-r--r--test/content/reducers/addon.test.js38
5 files changed, 107 insertions, 0 deletions
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);
+ });
+
+});