18874: Add 'services/workbench2/' from commit 'f6f88d9ca9cdeeeebfadcfe999789bfb9f69e5c6'
[arvados.git] / services / workbench2 / src / store / auth / auth-middleware.test.ts
diff --git a/services/workbench2/src/store/auth/auth-middleware.test.ts b/services/workbench2/src/store/auth/auth-middleware.test.ts
new file mode 100644 (file)
index 0000000..5a0364e
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import 'jest-localstorage-mock';
+import Axios, { AxiosInstance } from "axios";
+import { createBrowserHistory } from "history";
+
+import { authMiddleware } from "./auth-middleware";
+import { RootStore, configureStore } from "../store";
+import { ServiceRepository, createServices } from "services/services";
+import { ApiActions } from "services/api/api-actions";
+import { mockConfig } from "common/config";
+import { authActions } from "./auth-action";
+import { API_TOKEN_KEY } from 'services/auth-service/auth-service';
+
+describe("AuthMiddleware", () => {
+    let store: RootStore;
+    let services: ServiceRepository;
+    let axiosInst: AxiosInstance;
+    const config: any = {};
+    const actions: ApiActions = {
+        progressFn: (id: string, working: boolean) => { },
+        errorFn: (id: string, message: string) => { }
+    };
+
+    beforeEach(() => {
+        axiosInst = Axios.create({ headers: {} });
+        services = createServices(mockConfig({}), actions, axiosInst);
+        store = configureStore(createBrowserHistory(), services, config);
+        localStorage.clear();
+    });
+
+    it("handles LOGOUT action", () => {
+        localStorage.setItem(API_TOKEN_KEY, 'someToken');
+        window.location.assign = jest.fn();
+        const next = jest.fn();
+        const middleware = authMiddleware(services)(store)(next);
+        middleware(authActions.LOGOUT({deleteLinkData: false, preservePath: false}));
+        expect(window.location.assign).toBeCalledWith(
+            `/logout?api_token=someToken&return_to=${location.protocol}//${location.host}`
+        );
+        expect(localStorage.getItem(API_TOKEN_KEY)).toBeFalsy();
+    });
+});