// Copyright (C) The Arvados Authors. All rights reserved.
//
// SPDX-License-Identifier: AGPL-3.0
import React from 'react';
import { mount, configure } from 'enzyme';
import { combineReducers, createStore } from "redux";
import { CircularProgress, MuiThemeProvider, Tab, TableBody } from "@material-ui/core";
import { CustomTheme } from 'common/custom-theme';
import Adapter from "enzyme-adapter-react-16";
import { Provider } from 'react-redux';
import { ProcessIOCard, ProcessIOCardType } from './process-io-card';
import { DefaultView } from "components/default-view/default-view";
import { DefaultVirtualCodeSnippet } from "components/default-code-snippet/default-virtual-code-snippet";
import { ProcessOutputCollectionFiles } from './process-output-collection-files';
import { MemoryRouter } from 'react-router-dom';
import { CopyIcon } from 'components/icon/icon';
import copy from 'copy-to-clipboard';
// Mock collection files component since it just needs to exist
jest.mock('views/process-panel/process-output-collection-files');
// Mock autosizer for the io panel virtual list
jest.mock('react-virtualized-auto-sizer', () => ({ children }: any) => children({ height: 600, width: 600 }));
// Mock copy to clipboard
jest.mock('copy-to-clipboard');
configure({ adapter: new Adapter() });
describe('renderers', () => {
let store;
describe('ProcessStatus', () => {
beforeEach(() => {
store = createStore(combineReducers({
auth: (state: any = {}, action: any) => state,
}));
});
it('shows main process input loading when raw or params null', () => {
// when
let panel = mount(
);
// then
expect(panel.find(Tab).exists()).toBeFalsy();
expect(panel.find(CircularProgress));
// when
panel = mount(
);
// then
expect(panel.find(Tab).exists()).toBeFalsy();
expect(panel.find(CircularProgress));
});
it('shows main process empty params and raw', () => {
// when
let panel = mount(
);
// then
expect(panel.find(CircularProgress).exists()).toBeFalsy();
expect(panel.find(Tab).exists()).toBeFalsy();
expect(panel.find(DefaultView).text()).toEqual('No parameters found');
});
it('shows main process with raw and allows copying json', () => {
// when
const raw = {some: 'data'};
let panel = mount(
);
// then
expect(panel.find(CircularProgress).exists()).toBeFalsy();
expect(panel.find(Tab).length).toBe(1);
expect(panel.find(DefaultVirtualCodeSnippet).text()).toContain(JSON.stringify(raw, null, 2).replace(/\n/g, ''));
// when
panel.find(CopyIcon).simulate('click');
expect(copy).toHaveBeenCalledWith(JSON.stringify(raw, null, 2), undefined);
});
it('shows main process with params', () => {
// when
const parameters = [{id: 'someId', label: 'someLabel', value: {display: 'someValue'}}];
let panel = mount(
);
// then
expect(panel.find(CircularProgress).exists()).toBeFalsy();
expect(panel.find(Tab).length).toBe(2); // Empty raw is shown if parameters are present
expect(panel.find(TableBody).text()).toContain('someId');
expect(panel.find(TableBody).text()).toContain('someLabel');
expect(panel.find(TableBody).text()).toContain('someValue');
});
it('shows main process with output collection', () => {
// when
const outputCollection = '987654321';
const parameters = [{id: 'someId', label: 'someLabel', value: {display: 'someValue'}}];
let panel = mount(
);
// then
expect(panel.find(CircularProgress).exists()).toBeFalsy();
expect(panel.find(Tab).length).toBe(3); // Empty raw is shown if parameters are present
expect(panel.find(TableBody).text()).toContain('someId');
expect(panel.find(TableBody).text()).toContain('someLabel');
expect(panel.find(TableBody).text()).toContain('someValue');
// Visit output tab
panel.find(Tab).at(2).simulate('click');
expect(panel.find(ProcessOutputCollectionFiles).prop('currentItemUuid')).toBe(outputCollection);
});
// Subprocess
it('shows subprocess loading', () => {
// when
const subprocess = {containerRequest: {requestingContainerUuid: 'xyz'}};
let panel = mount(
);
// then
expect(panel.find(Tab).exists()).toBeFalsy();
expect(panel.find(CircularProgress));
});
it('shows subprocess mounts', () => {
// when
const subprocess = {containerRequest: {requestingContainerUuid: 'xyz'}};
const sampleMount = {path: '/', pdh: 'abcdef12abcdef12abcdef12abcdef12+0'};
let panel = mount(
);
// then
expect(panel.find(CircularProgress).exists()).toBeFalsy();
expect(panel.find(Tab).length).toBe(1); // Empty raw is hidden in subprocesses
expect(panel.find(TableBody).text()).toContain(sampleMount.pdh);
});
it('shows subprocess output collection', () => {
// when
const subprocess = {containerRequest: {requestingContainerUuid: 'xyz'}};
const outputCollection = '123456789';
let panel = mount(
);
// then
expect(panel.find(CircularProgress).exists()).toBeFalsy();
expect(panel.find(Tab).length).toBe(1); // Unloaded raw is hidden in subprocesses
expect(panel.find(ProcessOutputCollectionFiles).prop('currentItemUuid')).toBe(outputCollection);
});
it('shows empty subprocess raw', () => {
// when
const subprocess = {containerRequest: {requestingContainerUuid: 'xyz'}};
const outputCollection = '123456789';
let panel = mount(
);
// then
expect(panel.find(CircularProgress).exists()).toBeFalsy();
expect(panel.find(Tab).length).toBe(2); // Empty raw is visible in subprocesses
expect(panel.find(Tab).first().text()).toBe('Collection');
expect(panel.find(ProcessOutputCollectionFiles).prop('currentItemUuid')).toBe(outputCollection);
});
});
});