client/src/reducers/__tests__/notesReducer.test.js
changeset 168 ea92f4fe783d
parent 3 3b5d37d84cfe
--- a/client/src/reducers/__tests__/notesReducer.test.js	Tue Oct 09 19:07:47 2018 +0200
+++ b/client/src/reducers/__tests__/notesReducer.test.js	Mon Oct 08 18:35:47 2018 +0200
@@ -1,66 +1,662 @@
 // cf http://redux.js.org/docs/recipes/WritingTests.html
 
-import Immutable from 'immutable';
-
 import uuidV1 from 'uuid/v1';
+import * as R from 'ramda';
 
-import reducer from '../notesReducer'
-import * as types from '../../constants/ActionTypes'
-import noteRecord from '../../store/noteRecord';
+import reducer from '../notesReducer';
+import * as types from '../../constants/ActionTypes';
+import NoteRecord from '../../store/noteRecord';
+import { ActionEnum } from '../../constants';
 
 describe('note reducer', () => {
   it('should return the initial state', () => {
     expect(
       reducer(undefined, {})
-    ).toEqual(Immutable.List([]))
+    ).toEqual([])
   });
 
   it('should handle ADD_NOTE', () => {
 
     const newId = uuidV1();
     expect(
-      reducer(Immutable.List([]), {
+      reducer([], {
         type: types.ADD_NOTE,
         note: {
-          id: newId,
-          text: 'Run the tests'
+          _id: newId,
+          plain: 'Run the tests'
         }
       })
     ).toEqual(
-      Immutable.List([
-        new noteRecord({
-          id: newId,
-          text: 'Run the tests',
+      [
+        NoteRecord({
+          _id: newId,
+          plain: 'Run the tests',
         })
-      ])
+      ]
     );
 
-    const initialStore = Immutable.List([
-        new noteRecord({
-          id: uuidV1(),
-          text: 'origial note',
+    const initialStore = [
+        NoteRecord({
+          _id: uuidV1(),
+          plain: 'original note',
         })
-    ]);
+    ];
     expect(
       reducer(initialStore, {
         type: types.ADD_NOTE,
         note: {
-          id: newId,
-          text: 'Run the tests'
+          _id: newId,
+          plain: 'Run the tests'
         }
       })
     ).toEqual(
-      initialStore.push(
-        new noteRecord({
-          id: newId,
-          text: 'Run the tests',
-        })
-      )
+      R.append(NoteRecord({
+        _id: newId,
+        plain: 'Run the tests',
+      }),initialStore)
     );
 
   });
 
+  it("Handle DELETE_NOTE", () => {
 
+    const initialStore = [
+      NoteRecord({
+        _id: "id1",
+        plain: 'original note',
+      }),
+      NoteRecord({
+        _id: "id2",
+        plain: 'original note 2',
+      }),
+      NoteRecord({
+        _id: "id3",
+        plain: 'original note 3',
+      }),
+    ];
+
+    expect(
+      reducer(initialStore, {
+        type: types.DELETE_NOTE,
+        note: {
+          _id: "id1",
+        }
+      })
+    ).toEqual(
+      [
+        NoteRecord({
+          _id: "id1",
+          plain: 'original note',
+          action: ActionEnum.DELETED
+        }),
+        NoteRecord({
+          _id: "id2",
+          plain: 'original note 2',
+        }),
+        NoteRecord({
+          _id: "id3",
+          plain: 'original note 3',
+        }),
+      ]
+    );
+
+    expect(
+      reducer(initialStore, {
+        type: types.DELETE_NOTE,
+        note: {
+          _id: "id0",
+        }
+      })
+    ).toEqual(initialStore);
+
+    expect(
+      reducer([], {
+        type: types.DELETE_NOTE,
+        note: {
+          _id: "id0",
+        }
+      })
+    ).toEqual([]);
+
+  });
+
+
+  it("Handle DO_DELETE_NOTE", () => {
+
+    const initialStore = [
+      NoteRecord({
+        _id: "id1",
+        plain: 'original note',
+      }),
+      NoteRecord({
+        _id: "id2",
+        plain: 'original note 2',
+      }),
+      NoteRecord({
+        _id: "id3",
+        plain: 'original note 3',
+      }),
+    ];
+
+    expect(
+      reducer(initialStore, {
+        type: types.DO_DELETE_NOTE,
+        noteId: "id1"
+      })
+    ).toEqual(
+      [
+        NoteRecord({
+          _id: "id2",
+          plain: 'original note 2',
+        }),
+        NoteRecord({
+          _id: "id3",
+          plain: 'original note 3',
+        }),
+      ]
+    );
+
+    expect(
+      reducer(initialStore, {
+        type: types.DO_DELETE_NOTE,
+        noteId: "id0"
+      })
+    ).toEqual(initialStore);
+
+    expect(
+      reducer([], {
+        type: types.DO_DELETE_NOTE,
+        noteId: "id0"
+      })
+    ).toEqual([]);
+
+  });
+
+
+  it("Handle UPDATE_NOTE", () => {
+    const initialStore = [
+      NoteRecord({
+        _id: "id1",
+        plain: 'original note 1',
+      }),
+      NoteRecord({
+        _id: "id2",
+        plain: 'original note 2',
+        action: ActionEnum.CREATED
+      }),
+      NoteRecord({
+        _id: "id3",
+        plain: 'original note 3',
+        action: ActionEnum.DELETED
+      }),
+    ];
+
+    expect(
+      reducer(initialStore, {
+        type: types.UPDATE_NOTE,
+        note: NoteRecord({
+          _id: "id1",
+          plain: 'original note 1',
+          action: ActionEnum.None
+        }),
+        data: {
+          plain: 'new note 1'
+        }
+      })
+    ).toEqual(
+      [
+        NoteRecord({
+          _id: "id1",
+          plain: 'new note 1',
+          action: ActionEnum.UPDATED
+        }),
+        NoteRecord({
+          _id: "id2",
+          plain: 'original note 2',
+          action: ActionEnum.CREATED
+        }),
+        NoteRecord({
+          _id: "id3",
+          plain: 'original note 3',
+          action: ActionEnum.DELETED
+        }),
+      ]
+    );
+
+    expect(
+      reducer(initialStore, {
+        type: types.UPDATE_NOTE,
+        note: NoteRecord({
+          _id: "id2",
+        }),
+        data: {
+          plain: 'new note 2'
+        }
+      })
+    ).toEqual(
+      [
+        NoteRecord({
+          _id: "id1",
+          plain: 'original note 1'
+        }),
+        NoteRecord({
+          _id: "id2",
+          plain: 'new note 2',
+          action: ActionEnum.CREATED
+        }),
+        NoteRecord({
+          _id: "id3",
+          plain: 'original note 3',
+          action: ActionEnum.DELETED
+        }),
+      ]
+    );
+
+    expect(
+      reducer(initialStore, {
+        type: types.UPDATE_NOTE,
+        note: NoteRecord({
+          _id: "id3",
+        }),
+        data: {
+          plain: 'new note 3'
+        }
+      })
+    ).toEqual(
+      [
+        NoteRecord({
+          _id: "id1",
+          plain: 'original note 1'
+        }),
+        NoteRecord({
+          _id: "id2",
+          plain: 'original note 2',
+          action: ActionEnum.CREATED
+        }),
+        NoteRecord({
+          _id: "id3",
+          plain: 'new note 3',
+          action: ActionEnum.DELETED
+        }),
+      ]
+    );
+
+    expect(
+      reducer(initialStore, {
+        type: types.UPDATE_NOTE,
+        note: {
+          _id: "id0",
+          plain: 'new note 0',
+        }
+      })
+    ).toEqual(initialStore);
+
+    expect(
+      reducer([], {
+        type: types.UPDATE_NOTE,
+        note: {
+          _id: "id0",
+        }
+      })
+    ).toEqual([]);
+
+  });
+
+
+
+  it("Handle DELETE_SESSION", () => {
+    const initialStore = [
+      NoteRecord({
+        _id: "id1",
+        plain: 'original note 1',
+        session: "session1"
+      }),
+      NoteRecord({
+        _id: "id2",
+        plain: 'original note 2',
+        session: "session1"
+      }),
+      NoteRecord({
+        _id: "id3",
+        plain: 'original note 3',
+        session: "session2"
+      }),
+    ];
+
+    expect(
+      reducer(initialStore, {
+        type: types.DELETE_SESSION,
+        session: {
+          _id: "session1",
+        }
+      })
+    ).toEqual(
+      [
+        NoteRecord({
+          _id: "id1",
+          plain: 'original note 1',
+          session: "session1",
+          action: ActionEnum.DELETED
+        }),
+        NoteRecord({
+          _id: "id2",
+          plain: 'original note 2',
+          session: "session1",
+          action: ActionEnum.DELETED
+        }),
+        NoteRecord({
+          _id: "id3",
+          plain: 'original note 3',
+          session: "session2"
+        }),
+      ]
+    );
+
+    expect(
+      reducer(initialStore, {
+        type: types.DELETE_SESSION,
+        session: {
+          _id: "session0",
+        }
+      })
+    ).toEqual(initialStore);
+
+    expect(
+      reducer([], {
+        type: types.DELETE_SESSION,
+        session: {
+          _id: "session0",
+        }
+      })
+    ).toEqual([]);
+
+  });
+
+
+  it("Handle DO_DELETE_SESSION", () => {
+    const initialStore = [
+      NoteRecord({
+        _id: "id1",
+        plain: 'original note 1',
+        session: "session1"
+      }),
+      NoteRecord({
+        _id: "id2",
+        plain: 'original note 2',
+        session: "session1"
+      }),
+      NoteRecord({
+        _id: "id3",
+        plain: 'original note 3',
+        session: "session2"
+      }),
+    ];
+
+    expect(
+      reducer(initialStore, {
+        type: types.DO_DELETE_SESSION,
+        sessionId: "session1"
+      })
+    ).toEqual(
+      [
+        NoteRecord({
+          _id: "id3",
+          plain: 'original note 3',
+          session: "session2"
+        }),
+      ]
+    );
+
+    expect(
+      reducer(initialStore, {
+        type: types.DO_DELETE_SESSION,
+        sessionId: "session0"
+      })
+    ).toEqual(initialStore);
+
+    expect(
+      reducer([], {
+        type: types.DO_DELETE_SESSION,
+        sessionId: "session0"
+      })
+    ).toEqual([]);
+
+  });
+
+
+  ///
+  /// Handle RESET_ACTION_NOTE
+  ///
+  it("Handle RESET_ACTION_NOTE", () => {
+
+    const initialStore = [
+      NoteRecord({
+        _id: "id1",
+        plain: 'original note 1',
+        action: ActionEnum.UPDATED
+      }),
+      NoteRecord({
+        _id: "id2",
+        plain: 'original note 2',
+        action: ActionEnum.UPDATED
+      }),
+      NoteRecord({
+        _id: "id3",
+        plain: 'original note 3',
+        action: ActionEnum.UPDATED
+      }),
+    ];
+
+    expect(
+      reducer(initialStore, {
+        type: types.RESET_ACTION_NOTE,
+        note: {
+          _id: "id1",
+        }
+      })
+    ).toEqual(
+      [
+        NoteRecord({
+          _id: "id1",
+          plain: 'original note 1',
+          action: ActionEnum.NONE
+        }),
+        NoteRecord({
+          _id: "id2",
+          plain: 'original note 2',
+          action: ActionEnum.UPDATED
+        }),
+        NoteRecord({
+          _id: "id3",
+          plain: 'original note 3',
+          action: ActionEnum.UPDATED
+        }),
+      ]
+    );
+
+    expect(
+      reducer(initialStore, {
+        type: types.RESET_ACTION_NOTE,
+        note: {
+          _id: "id0",
+        }
+      })
+    ).toEqual(initialStore);
+
+    expect(
+      reducer([], {
+        type: types.RESET_ACTION_NOTE,
+        note: {
+          _id: "id0",
+        }
+      })
+    ).toEqual([]);
+
+  });
+
+  it("Handle SYNC_RESET_ALL", () => {
+
+    const initialStore = [
+      NoteRecord({
+        _id: "id1",
+        plain: 'original note 1',
+        action: ActionEnum.UPDATED
+      }),
+      NoteRecord({
+        _id: "id2",
+        plain: 'original note 2',
+        action: ActionEnum.UPDATED
+      }),
+      NoteRecord({
+        _id: "id3",
+        plain: 'original note 3',
+        action: ActionEnum.UPDATED
+      }),
+    ];
+
+    expect(
+      reducer(initialStore, {
+        type: types.SYNC_RESET_ALL,
+      })
+    ).toEqual(
+      [
+        NoteRecord({
+          _id: "id1",
+          plain: 'original note 1',
+          action: ActionEnum.NONE
+        }),
+        NoteRecord({
+          _id: "id2",
+          plain: 'original note 2',
+          action: ActionEnum.NONE
+        }),
+        NoteRecord({
+          _id: "id3",
+          plain: 'original note 3',
+          action: ActionEnum.NONE
+        }),
+      ]
+    );
+
+    expect(
+      reducer([], {
+        type: types.SYNC_RESET_ALL,
+      })
+    ).toEqual([]);
+
+  });
+
+  it("Handle LOAD_NOTE", () => {
+    expect(
+      reducer([], {
+        type: types.LOAD_NOTE,
+        note: NoteRecord({
+          _id: 'note1',
+          plain: 'Run the tests'
+        })
+      })
+    ).toEqual(
+      [
+        NoteRecord({
+          _id: 'note1',
+          plain: 'Run the tests',
+        })
+      ]
+    );
+
+    const initialStore = [
+        NoteRecord({
+          _id: 'note1',
+          plain: 'original note 1',
+        }),
+        NoteRecord({
+          _id: 'note2',
+          plain: 'original note 2',
+        })
+
+    ];
+    expect(
+      reducer(initialStore, {
+        type: types.LOAD_NOTE,
+        note: NoteRecord({
+          _id: 'note1',
+          plain: 'Run the tests'
+        })
+      })
+    ).toEqual(
+      [
+        NoteRecord({
+          _id: 'note1',
+          plain: 'Run the tests',
+        }),
+        NoteRecord({
+          _id: 'note2',
+          plain: 'original note 2',
+        })
+      ]
+    );
+
+  expect(
+    reducer(initialStore, {
+      type: types.LOAD_NOTE,
+      note: NoteRecord({
+        _id: 'note3',
+        plain: 'Run the tests'
+      })
+    })
+  ).toEqual(
+    [
+      NoteRecord({
+        _id: 'note1',
+        plain: 'original note 1',
+      }),
+      NoteRecord({
+        _id: 'note2',
+        plain: 'original note 2',
+      }),
+      NoteRecord({
+        _id: 'note3',
+        plain: 'Run the tests'
+      })
+    ]
+  );
+
+  });
+
+  it("Handle AUTH_LOGOUT", () => {
+    const initialStore = [
+      NoteRecord({
+        _id: "id1",
+        plain: 'original note 1',
+        action: ActionEnum.UPDATED
+      }),
+      NoteRecord({
+        _id: "id2",
+        plain: 'original note 2',
+        action: ActionEnum.UPDATED
+      }),
+      NoteRecord({
+        _id: "id3",
+        plain: 'original note 3',
+        action: ActionEnum.UPDATED
+      }),
+    ];
+
+    expect(
+      reducer(initialStore, {
+        type: types.AUTH_LOGOUT,
+      })
+    ).toEqual(
+      []
+    );
+
+    expect(
+      reducer([], {
+        type: types.AUTH_LOGOUT,
+      })
+    ).toEqual([]);
+
+  });
 
 });