aboutsummaryrefslogtreecommitdiff
path: root/src/client/react
diff options
context:
space:
mode:
authorNoah Loomans <noahloomans@gmail.com>2017-12-14 12:32:13 +0100
committerNoah Loomans <noahloomans@gmail.com>2017-12-14 12:32:13 +0100
commita77272bfbebed7239c0c49049e211f4a6e597617 (patch)
treec0b6f9f7af6fa0eb6e602ff3020b9a4bb34b6249 /src/client/react
parent778dfdc728a101fca9ece3a14e590d3b8e1d43e1 (diff)
Add tests for search.js
Diffstat (limited to 'src/client/react')
-rw-r--r--src/client/react/reducers/search.test.js142
1 files changed, 142 insertions, 0 deletions
diff --git a/src/client/react/reducers/search.test.js b/src/client/react/reducers/search.test.js
new file mode 100644
index 0000000..ccf6fae
--- /dev/null
+++ b/src/client/react/reducers/search.test.js
@@ -0,0 +1,142 @@
+window.USERS = [];
+
+const deepFreeze = require('deep-freeze');
+const search = require('./search').default;
+const { changeSelectedResult } = require('../actions/search');
+
+describe('reducers', () => {
+ describe('search', () => {
+ describe('SEARCH/CHANGE_SELECTED_RESULT', () => {
+ it('Does nothing when there are no results', () => {
+ const prevState = {
+ results: [],
+ selectedResult: null,
+ isExactMatch: false,
+ };
+
+ const actionPlus = changeSelectedResult(+1);
+ const actionMin = changeSelectedResult(-1);
+
+ deepFreeze([prevState, actionPlus, actionMin]);
+
+ const nextStatePlus = search(prevState, actionPlus);
+ const nextStateMin = search(prevState, actionMin);
+ expect(nextStatePlus).toEqual(prevState);
+ expect(nextStateMin).toEqual(prevState);
+ });
+
+ it('Does nothing when there is an exact match', () => {
+ const prevState = {
+ results: ['s/18561'],
+ selectedResult: 's/18561',
+ isExactMatch: true,
+ };
+
+ const actionPlus = changeSelectedResult(+1);
+ const actionMin = changeSelectedResult(-1);
+
+ deepFreeze([prevState, actionPlus, actionMin]);
+
+ const nextStatePlus = search(prevState, actionPlus);
+ const nextStateMin = search(prevState, actionMin);
+
+ expect(nextStatePlus).toEqual(prevState);
+ expect(nextStateMin).toEqual(prevState);
+ });
+
+ it('Switches to the correct selectedResult when no selected result is selected', () => {
+ const prevState = {
+ results: ['s/18561', 's/18562', 's/18563'],
+ selectedResult: null,
+ isExactMatch: false,
+ };
+
+ const actionPlus = changeSelectedResult(+1);
+ const actionMin = changeSelectedResult(-1);
+
+ deepFreeze([prevState, actionPlus, actionMin]);
+
+ const nextStatePlus = search(prevState, actionPlus);
+ const nextStateMin = search(prevState, actionMin);
+
+ expect(nextStatePlus).toEqual({
+ ...prevState,
+ selectedResult: 's/18561',
+ });
+ expect(nextStateMin).toEqual({
+ ...prevState,
+ selectedResult: 's/18563',
+ });
+ });
+
+ it('Switches to the correct selectedResult when there is a selected result selected', () => {
+ const prevState = {
+ results: ['s/18561', 's/18562', 's/18563'],
+ selectedResult: 's/18562',
+ isExactMatch: false,
+ };
+
+ const actionPlus = changeSelectedResult(+1);
+ const actionMin = changeSelectedResult(-1);
+
+ deepFreeze([prevState, actionPlus, actionMin]);
+
+ const nextStatePlus = search(prevState, actionPlus);
+ const nextStateMin = search(prevState, actionMin);
+
+ expect(nextStatePlus).toEqual({
+ ...prevState,
+ selectedResult: 's/18563',
+ });
+ expect(nextStateMin).toEqual({
+ ...prevState,
+ selectedResult: 's/18561',
+ });
+ });
+
+ it('Properly wraps arround when incrementing', () => {
+ expect(search({
+ results: ['s/18561', 's/18562', 's/18563'],
+ selectedResult: 's/18563',
+ isExactMatch: false,
+ }, changeSelectedResult(+1))).toEqual({
+ results: ['s/18561', 's/18562', 's/18563'],
+ selectedResult: null,
+ isExactMatch: false,
+ });
+
+ expect(search({
+ results: ['s/18561', 's/18562', 's/18563'],
+ selectedResult: null,
+ isExactMatch: false,
+ }, changeSelectedResult(+1))).toEqual({
+ results: ['s/18561', 's/18562', 's/18563'],
+ selectedResult: 's/18561',
+ isExactMatch: false,
+ });
+ });
+
+ it('Properly wraps arround when decrementing', () => {
+ expect(search({
+ results: ['s/18561', 's/18562', 's/18563'],
+ selectedResult: 's/18561',
+ isExactMatch: false,
+ }, changeSelectedResult(-1))).toEqual({
+ results: ['s/18561', 's/18562', 's/18563'],
+ selectedResult: null,
+ isExactMatch: false,
+ });
+
+ expect(search({
+ results: ['s/18561', 's/18562', 's/18563'],
+ selectedResult: null,
+ isExactMatch: false,
+ }, changeSelectedResult(-1))).toEqual({
+ results: ['s/18561', 's/18562', 's/18563'],
+ selectedResult: 's/18563',
+ isExactMatch: false,
+ });
+ });
+ });
+ });
+});