// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import React from 'react'; import { mount, configure } from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; import configureMockStore from 'redux-mock-store' import { Provider } from 'react-redux'; import { CollectionFileViewerAction } from './collection-file-viewer-action'; import { ContextMenuKind } from 'views-components/context-menu/context-menu'; import { createTree, initTreeNode, setNode, getNodeValue } from "models/tree"; import { getInlineFileUrl, sanitizeToken } from "./helpers"; const middlewares = []; const mockStore = configureMockStore(middlewares); configure({ adapter: new Adapter() }); describe('CollectionFileViewerAction', () => { let defaultStore; const fileUrl = "https://download.host:12345/c=abcde-4zz18-abcdefghijklmno/t=v2/token2/token3/cat.jpg"; const insecureKeepInlineUrl = "https://download.host:12345/"; const secureKeepInlineUrl = "https://*.collections.host:12345/"; beforeEach(() => { let filesTree = createTree(); let data = {id: "000", value: {"url": fileUrl}}; filesTree = setNode(initTreeNode(data))(filesTree); defaultStore = { auth: { config: { keepWebServiceUrl: "https://download.host:12345/", keepWebInlineServiceUrl: insecureKeepInlineUrl, clusterConfig: { Collections: { TrustAllContent: false } } } }, contextMenu: { resource: { uuid: "000", menuKind: ContextMenuKind.COLLECTION_FILE_ITEM, } }, collectionPanel: { item: { uuid: "" } }, collectionPanelFiles: filesTree }; }); it('should hide open in new tab when unsafe', () => { // given const store = mockStore(defaultStore); // when const wrapper = mount( ); // then expect(wrapper).not.toBeUndefined(); // and expect(wrapper.find("a")).toHaveLength(0); }); it('should show open in new tab when TrustAllContent=true', () => { // given let initialState = defaultStore; initialState.auth.config.clusterConfig.Collections.TrustAllContent = true; const store = mockStore(initialState); // when const wrapper = mount( ); // then expect(wrapper).not.toBeUndefined(); // and expect(wrapper.find("a").prop("href")) .toEqual(sanitizeToken(getInlineFileUrl(fileUrl, initialState.auth.config.keepWebServiceUrl, initialState.auth.config.keepWebInlineServiceUrl)) ); }); it('should show open in new tab when inline url is secure', () => { // given let initialState = defaultStore; initialState.auth.config.keepWebInlineServiceUrl = secureKeepInlineUrl; const store = mockStore(initialState); // when const wrapper = mount( ); // then expect(wrapper).not.toBeUndefined(); // and expect(wrapper.find("a").prop("href")) .toEqual(sanitizeToken(getInlineFileUrl(fileUrl, initialState.auth.config.keepWebServiceUrl, initialState.auth.config.keepWebInlineServiceUrl)) ); }); });