Add tests to Inventory module
[aai/sparky-fe.git] / test / app / inventory / InventoryActions.test.js
diff --git a/test/app/inventory/InventoryActions.test.js b/test/app/inventory/InventoryActions.test.js
new file mode 100644 (file)
index 0000000..9efe54d
--- /dev/null
@@ -0,0 +1,219 @@
+import configureMockStore from 'redux-mock-store';
+import thunk from 'redux-thunk';
+import fetchMock from 'fetch-mock';
+import expect from 'expect';
+
+import {onLoadTotalCountByDate, onCountByTypeLoad, onTopographicMapMounted} from 'app/inventory/InventoryActions';
+import {InventoryActionTypes} from 'app/inventory/InventoryConstants';
+
+
+const middlewares = [thunk];
+const mockStore = configureMockStore(middlewares);
+
+
+function mockRequestToEntityCountHistoryEndpoint(postfix, response) {
+    fetchMock.getOnce(
+        `http://localhost:/rest/visualization${postfix}`,
+        response
+    );
+}
+
+describe('InventoryActions', () => {
+
+    afterEach(() => {
+        fetchMock.restore()
+    });
+
+    describe('verify onLoadTotalCountByDate', () => {
+        it('creates COUNT_BY_DATE_SUCCESS response when there is no error', async () => {
+
+            // given
+            mockRequestToEntityCountHistoryEndpoint("/entityCountHistory?type=graph",{
+                status: 200,
+                body: {
+                    "result": {
+                        "keyA": "valueA",
+                        "keyB": "valueB"
+                    }
+                }
+            });
+
+            const expectedActions = [
+                {
+                    type: InventoryActionTypes.COUNT_BY_DATE_SUCCESS,
+                    data: {
+                        countByDate: {
+                            "keyA": "valueA",
+                            "keyB": "valueB"
+                        }
+                    }
+                }];
+
+            const store = mockStore();
+
+            // when
+            await store.dispatch(onLoadTotalCountByDate());
+
+            // then
+            expect(store.getActions()).toEqual(expectedActions);
+        });
+
+
+        it('creates COUNT_BY_DATE_FAILED response when there is a problem with remote service', async () => {
+
+            // given
+            mockRequestToEntityCountHistoryEndpoint("/entityCountHistory?type=graph",{
+                status: 500
+            });
+
+            const expectedActions = [
+                {
+                    type: InventoryActionTypes.COUNT_BY_DATE_FAILED,
+                    data: {
+                        message: 'Error fetching data from server',
+                        severity: 'danger'
+                    }
+                }];
+
+            const store = mockStore();
+
+            // when
+            await store.dispatch(onLoadTotalCountByDate());
+
+            // then
+            expect(store.getActions()).toEqual(expectedActions);
+        });
+    });
+
+
+
+    describe('verify onCountByTypeLoad', () => {
+        it('creates COUNT_BY_ENTITY_SUCCESS response when there is no error', async () => {
+
+            // given
+            mockRequestToEntityCountHistoryEndpoint("/entityCountHistory?type=table",{
+                status: 200,
+                body: {
+                    "result": {
+                        "keyA": "valueA",
+                        "keyB": "valueB"
+                    }
+                }
+            });
+
+            const expectedActions = [
+                {
+                    type: InventoryActionTypes.COUNT_BY_ENTITY_SUCCESS,
+                    data: {
+                        countByType: {
+                            "keyA": "valueA",
+                            "keyB": "valueB"
+                        }
+                    }
+                }];
+
+            const store = mockStore();
+
+            // when
+            await store.dispatch(onCountByTypeLoad());
+
+            // then
+            expect(store.getActions()).toEqual(expectedActions);
+        });
+
+
+        it('creates COUNT_BY_ENTITY_FAILED response when there is a problem with remote service', async () => {
+
+            // given
+            mockRequestToEntityCountHistoryEndpoint("/entityCountHistory?type=table",{
+                status: 500
+            });
+
+            const expectedActions = [
+                {
+                    type: InventoryActionTypes.COUNT_BY_ENTITY_FAILED,
+                    data: {
+                        message: 'Error fetching data from server',
+                        severity: 'danger'
+                    }
+                }];
+
+            const store = mockStore();
+
+            // when
+            await store.dispatch(onCountByTypeLoad());
+
+            // then
+            expect(store.getActions()).toEqual(expectedActions);
+        });
+    });
+
+
+
+    describe('verify onTopographicMapMounted', () => {
+        it('creates TOPOGRAPHIC_QUERY_SUCCESS response when there is no error', async () => {
+
+            // given
+            const requestObject = {
+                entityType: "entityType"
+            };
+            mockRequestToEntityCountHistoryEndpoint("/geovisualization/?entity=entityType",{
+                status: 200,
+                body: {
+                    "plotPoints": {
+                        "keyA": "valueA",
+                        "keyB": "valueB"
+                    }
+                }
+            });
+
+            const expectedActions = [
+                {
+                    type: InventoryActionTypes.TOPOGRAPHIC_QUERY_SUCCESS,
+                    data: {
+                        plotPoints: {
+                            "keyA": "valueA",
+                            "keyB": "valueB"
+                        }
+                    }
+                }];
+
+            const store = mockStore();
+
+            // when
+            await store.dispatch(onTopographicMapMounted(requestObject));
+
+            // then
+            expect(store.getActions()).toEqual(expectedActions);
+        });
+
+
+        it('creates TOPOGRAPHIC_QUERY_FAILED response when there is a problem with remote service', async () => {
+
+            // given
+            const requestObject = {
+                entityType: "entityType"
+            };
+            mockRequestToEntityCountHistoryEndpoint("/geovisualization/?entity=entityType",{
+                status: 500
+            });
+
+            const expectedActions = [
+                {
+                    type: InventoryActionTypes.TOPOGRAPHIC_QUERY_FAILED,
+                    data: {
+                        message: 'Error fetching data from server',
+                        severity: 'danger'
+                    }
+                }];
+
+            const store = mockStore();
+
+            // when
+            await store.dispatch(onTopographicMapMounted(requestObject));
+
+            // then
+            expect(store.getActions()).toEqual(expectedActions);
+        });
+    });
+});