Skip to content

Commit 3ec4e78

Browse files
authored
Adding test for clear cache on logout (#1794)
* adding test for clear cache on logout Signed-off-by: Shenoy Pratik <[email protected]> * update name to logout Signed-off-by: Shenoy Pratik <[email protected]> --------- Signed-off-by: Shenoy Pratik <[email protected]>
1 parent f1b920c commit 3ec4e78

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed

common/constants/data_sources.ts

+1
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,4 @@ export const OBS_DEFAULT_CLUSTER = 'observability-default'; // prefix key for ge
9494
export const OBS_S3_DATA_SOURCE = 'observability-s3'; // prefix key for generating data source id for s3 data sources in data selector
9595
export const S3_DATA_SOURCE_GROUP_DISPLAY_NAME = 'Amazon S3'; // display group name for Amazon-managed-s3 data sources in data selector
9696
export const S3_DATA_SOURCE_GROUP_SPARK_DISPLAY_NAME = 'Spark'; // display group name for OpenSearch-spark-s3 data sources in data selector
97+
export const SECURITY_DASHBOARDS_LOGOUT_URL = '/logout';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright OpenSearch Contributors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import { SECURITY_DASHBOARDS_LOGOUT_URL } from '../../../common/constants/data_sources';
7+
import {
8+
ASYNC_QUERY_ACCELERATIONS_CACHE,
9+
ASYNC_QUERY_DATASOURCE_CACHE,
10+
} from '../../../common/constants/shared';
11+
import { catalogRequestIntercept } from './cache_intercept';
12+
13+
interface LooseObject {
14+
[key: string]: any;
15+
}
16+
17+
// Mock sessionStorage
18+
const sessionStorageMock = (() => {
19+
let store = {} as LooseObject;
20+
return {
21+
getItem(key: string) {
22+
return store[key] || null;
23+
},
24+
setItem(key: string, value: string) {
25+
store[key] = value.toString();
26+
},
27+
removeItem(key: string) {
28+
delete store[key];
29+
},
30+
clear() {
31+
store = {};
32+
},
33+
};
34+
})();
35+
36+
Object.defineProperty(window, 'sessionStorage', { value: sessionStorageMock });
37+
38+
describe('Intercept logout handler', () => {
39+
beforeEach(() => {
40+
jest.spyOn(window.sessionStorage, 'removeItem');
41+
});
42+
43+
afterEach(() => {
44+
jest.restoreAllMocks();
45+
});
46+
47+
const logoutPath = {
48+
path: SECURITY_DASHBOARDS_LOGOUT_URL,
49+
};
50+
51+
it('Intercept logout handler should clear the cache session', () => {
52+
const logoutInterceptFn = catalogRequestIntercept();
53+
logoutInterceptFn(logoutPath, null);
54+
expect(sessionStorage.removeItem).toBeCalledWith(ASYNC_QUERY_DATASOURCE_CACHE);
55+
expect(sessionStorage.removeItem).toBeCalledWith(ASYNC_QUERY_ACCELERATIONS_CACHE);
56+
});
57+
});

public/framework/catalog_cache/cache_intercept.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
*/
55

66
import { HttpFetchOptionsWithPath, IHttpInterceptController } from '../../../../../src/core/public';
7+
import { SECURITY_DASHBOARDS_LOGOUT_URL } from '../../../common/constants/data_sources';
78
import { CatalogCacheManager } from './cache_manager';
89

910
export function catalogRequestIntercept(): any {
1011
return (
1112
fetchOptions: Readonly<HttpFetchOptionsWithPath>,
1213
_controller: IHttpInterceptController
1314
) => {
14-
if (fetchOptions.path.includes('/logout')) {
15+
if (fetchOptions.path.includes(SECURITY_DASHBOARDS_LOGOUT_URL)) {
1516
// Clears all user catalog cache details
1617
CatalogCacheManager.clearDataSourceCache();
1718
CatalogCacheManager.clearAccelerationsCache();

0 commit comments

Comments
 (0)