targets.test.js (4650B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 /** 7 * Unit tests for targets management on the toolbox store. 8 */ 9 10 const createStore = require("resource://devtools/client/shared/redux/create-store.js"); 11 const reducer = require("resource://devtools/shared/commands/target/reducers/targets.js"); 12 const actions = require("resource://devtools/shared/commands/target/actions/targets.js"); 13 const { 14 getSelectedTarget, 15 getToolboxTargets, 16 } = require("resource://devtools/shared/commands/target/selectors/targets.js"); 17 18 describe("Toolbox store - targets", () => { 19 describe("registerTarget", () => { 20 it("adds the target to the list", () => { 21 const store = createStore(reducer); 22 23 const targetFront1 = { 24 actorID: "target/1", 25 }; 26 27 store.dispatch(actions.registerTarget(targetFront1)); 28 29 let targets = getToolboxTargets(store.getState()); 30 expect(targets.length).toEqual(1); 31 expect(targets[0].actorID).toEqual("target/1"); 32 33 const targetFront2 = { 34 actorID: "target/2", 35 }; 36 37 store.dispatch(actions.registerTarget(targetFront2)); 38 39 targets = getToolboxTargets(store.getState()); 40 expect(targets.length).toEqual(2); 41 expect(targets[0].actorID).toEqual("target/1"); 42 expect(targets[1].actorID).toEqual("target/2"); 43 }); 44 }); 45 46 describe("selectTarget", () => { 47 it("updates the selected property when the target is known", () => { 48 const store = createStore(reducer); 49 const targetFront1 = { 50 actorID: "target/1", 51 }; 52 store.dispatch(actions.registerTarget(targetFront1)); 53 store.dispatch(actions.selectTarget("target/1")); 54 expect(getSelectedTarget(store.getState()).actorID).toBe("target/1"); 55 }); 56 57 it("does not update the selected property when the target is unknown", () => { 58 const store = createStore(reducer); 59 const targetFront1 = { 60 actorID: "target/1", 61 }; 62 store.dispatch(actions.registerTarget(targetFront1)); 63 store.dispatch(actions.selectTarget("target/1")); 64 expect(getSelectedTarget(store.getState()).actorID).toBe("target/1"); 65 66 store.dispatch(actions.selectTarget("target/unknown")); 67 expect(getSelectedTarget(store.getState()).actorID).toBe("target/1"); 68 }); 69 70 it("does not update the state when the target is already selected", () => { 71 const store = createStore(reducer); 72 const targetFront1 = { 73 actorID: "target/1", 74 }; 75 store.dispatch(actions.registerTarget(targetFront1)); 76 store.dispatch(actions.selectTarget("target/1")); 77 78 const state = store.getState(); 79 store.dispatch(actions.selectTarget("target/1")); 80 expect(store.getState()).toStrictEqual(state); 81 }); 82 }); 83 84 describe("unregisterTarget", () => { 85 it("removes the target from the list", () => { 86 const store = createStore(reducer); 87 88 const targetFront1 = { 89 actorID: "target/1", 90 }; 91 const targetFront2 = { 92 actorID: "target/2", 93 }; 94 95 store.dispatch(actions.registerTarget(targetFront1)); 96 store.dispatch(actions.registerTarget(targetFront2)); 97 98 let targets = getToolboxTargets(store.getState()); 99 expect(targets.length).toEqual(2); 100 101 store.dispatch(actions.unregisterTarget(targetFront1)); 102 targets = getToolboxTargets(store.getState()); 103 expect(targets.length).toEqual(1); 104 expect(targets[0].actorID).toEqual("target/2"); 105 106 store.dispatch(actions.unregisterTarget(targetFront2)); 107 expect(getToolboxTargets(store.getState()).length).toEqual(0); 108 }); 109 110 it("does not update the state when the target is unknown", () => { 111 const store = createStore(reducer); 112 113 const targetFront1 = { 114 actorID: "target/1", 115 }; 116 const targetFront2 = { 117 actorID: "target/unknown", 118 }; 119 120 store.dispatch(actions.registerTarget(targetFront1)); 121 122 const state = store.getState(); 123 store.dispatch(actions.unregisterTarget(targetFront2)); 124 expect(store.getState()).toStrictEqual(state); 125 }); 126 127 it("resets the selected property when it was the selected target", () => { 128 const store = createStore(reducer); 129 130 const targetFront1 = { 131 actorID: "target/1", 132 }; 133 134 store.dispatch(actions.registerTarget(targetFront1)); 135 store.dispatch(actions.selectTarget("target/1")); 136 expect(getSelectedTarget(store.getState()).actorID).toBe("target/1"); 137 138 store.dispatch(actions.unregisterTarget(targetFront1)); 139 expect(getSelectedTarget(store.getState())).toBe(null); 140 }); 141 }); 142 });