Merge "Added Policy Jest Tests"
diff --git a/gui-clamp/ui-react/src/components/dialogs/Policy/PoliciesTreeViewer.js b/gui-clamp/ui-react/src/components/dialogs/Policy/PoliciesTreeViewer.js
index 5bca4e6..7ec7eef 100644
--- a/gui-clamp/ui-react/src/components/dialogs/Policy/PoliciesTreeViewer.js
+++ b/gui-clamp/ui-react/src/components/dialogs/Policy/PoliciesTreeViewer.js
@@ -2,8 +2,8 @@
* ============LICENSE_START=======================================================
* ONAP POLICY-CLAMP
* ================================================================================
- * Copyright (C) 2021 AT&T Intellectual Property. All rights
- * reserved.
+ * Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2022 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@
*
*/
-import React, { forwardRef } from 'react'
+import React from 'react'
import TreeView from '@material-ui/lab/TreeView';
import TreeItem from '@material-ui/lab/TreeItem';
import FolderIcon from '@material-ui/icons/Folder';
@@ -31,79 +31,91 @@
export default class PoliciesTreeViewer extends React.Component {
- separator = ".";
+ separator = ".";
- nodesList = new Map();
+ nodesList = new Map();
- constructor(props, context) {
- super(props, context);
- this.createPoliciesTree = this.createPoliciesTree.bind(this);
- this.handleTreeItemClick = this.handleTreeItemClick.bind(this);
- this.buildNameWithParent = this.buildNameWithParent.bind(this);
+ constructor(props, context) {
+ super(props, context);
+ this.createPoliciesTree = this.createPoliciesTree.bind(this);
+ this.handleTreeItemClick = this.handleTreeItemClick.bind(this);
+ this.buildNameWithParent = this.buildNameWithParent.bind(this);
- }
-
- state = {
- policiesTreeData: this.createPoliciesTree(this.props.policiesData),
- }
-
- componentDidUpdate(prevProps) {
- if (prevProps.policiesData !== this.props.policiesData) {
- this.setState({ policiesTreeData: this.createPoliciesTree(this.props.policiesData) })
}
- }
- createPoliciesTree(policiesArray) {
- // put my policies array in a Json
- let nodeId = 1;
- let root = { id: nodeId, policyCount: 0, name: "ROOT", children: [], parent: undefined };
- this.nodesList.set(nodeId++, root);
-
- policiesArray.forEach(policy => {
- let currentTreeNode = root;
- policy[this.props.valueForTreeCreation].split(this.separator).forEach((policyNamePart, index, policyNamePartsArray) => {
- let node = currentTreeNode["children"].find(element => element.name === policyNamePart);
- if (typeof (node) === "undefined") {
- node = { id: nodeId, policyCount: 0, children: [], name: policyNamePart, parent: currentTreeNode };
- this.nodesList.set(nodeId++, node);
- currentTreeNode["children"].push(node);
- }
- if ((index + 1) === policyNamePartsArray.length) {
- ++currentTreeNode["policyCount"];
- }
- currentTreeNode = node;
- })
- })
- return root;
- }
-
- buildNameWithParent(node) {
- let nameToBuild = node.name;
- if (node.parent !== undefined) {
- nameToBuild = this.buildNameWithParent(node.parent) + this.separator + node.name;
+ state = {
+ policiesTreeData: this.createPoliciesTree(this.props.policiesData),
}
- return nameToBuild;
- }
- handleTreeItemClick(event, value) {
- let fullName = this.buildNameWithParent(this.nodesList.get(value[0])).substring(5);
- this.props.policiesFilterFunction(fullName);
- }
+ componentDidUpdate(prevProps) {
+ if (prevProps.policiesData !== this.props.policiesData) {
+ this.setState({policiesTreeData: this.createPoliciesTree(this.props.policiesData)})
+ }
+ }
- renderTreeItems(nodes) {
- return (<TreeItem key={ nodes.id } nodeId={ nodes.id } label={ nodes.name + "(" + nodes.policyCount + ")" } onNodeSelect={ this.handleTreeItemClick }>
- {
- Array.isArray(nodes.children) ? nodes.children.map((node) => this.renderTreeItems(node)) : null
- }
- </TreeItem>);
- };
+ createPoliciesTree(policiesArray) {
+ console.log('createPoliciesTree called')
+ // put my policies array in a Json
+ let nodeId = 1;
+ let root = {id: nodeId, policyCount: 0, name: "ROOT", children: [], parent: undefined};
+ this.nodesList.set(nodeId++, root);
- render() {
- return (
- <TreeView defaultExpanded={ ['root'] } defaultCollapseIcon={ <FolderOpenIcon/> }
- defaultExpandIcon={ <FolderIcon/> } defaultEndIcon={ <DescriptionIcon/> } onNodeSelect={ this.handleTreeItemClick } multiSelect>
- { this.renderTreeItems(this.state.policiesTreeData) }
- </TreeView>
- );
- }
+ if (policiesArray !== null && policiesArray.forEach !== undefined) {
+
+ policiesArray.forEach(policy => {
+ let currentTreeNode = root;
+ policy[this.props.valueForTreeCreation].split(this.separator).forEach((policyNamePart, index, policyNamePartsArray) => {
+ let node = currentTreeNode["children"].find(element => element.name === policyNamePart);
+ if (typeof (node) === "undefined") {
+ node = {
+ id: nodeId,
+ policyCount: 0,
+ children: [],
+ name: policyNamePart,
+ parent: currentTreeNode
+ };
+ this.nodesList.set(nodeId++, node);
+ currentTreeNode["children"].push(node);
+ }
+ if ((index + 1) === policyNamePartsArray.length) {
+ ++currentTreeNode["policyCount"];
+ }
+ currentTreeNode = node;
+ })
+ });
+ }
+ return root;
+ }
+
+ buildNameWithParent(node) {
+ let nameToBuild = node.name;
+ if (node.parent !== undefined) {
+ nameToBuild = this.buildNameWithParent(node.parent) + this.separator + node.name;
+ }
+ return nameToBuild;
+ }
+
+ handleTreeItemClick(event, value) {
+ let fullName = this.buildNameWithParent(this.nodesList.get(value[0])).substring(5);
+ this.props.policiesFilterFunction(fullName);
+ }
+
+ renderTreeItems(nodes) {
+ return (<TreeItem key={nodes.id} nodeId={nodes.id} label={nodes.name + "(" + nodes.policyCount + ")"}
+ onNodeSelect={this.handleTreeItemClick}>
+ {
+ Array.isArray(nodes.children) ? nodes.children.map((node) => this.renderTreeItems(node)) : null
+ }
+ </TreeItem>);
+ };
+
+ render() {
+ return (
+ <TreeView defaultExpanded={['root']} defaultCollapseIcon={<FolderOpenIcon/>}
+ defaultExpandIcon={<FolderIcon/>} defaultEndIcon={<DescriptionIcon/>}
+ onNodeSelect={this.handleTreeItemClick} multiSelect>
+ {this.renderTreeItems(this.state.policiesTreeData)}
+ </TreeView>
+ );
+ }
}
diff --git a/gui-clamp/ui-react/src/components/dialogs/Policy/PoliciesTreeViewer.test.js b/gui-clamp/ui-react/src/components/dialogs/Policy/PoliciesTreeViewer.test.js
new file mode 100644
index 0000000..7a6a76a
--- /dev/null
+++ b/gui-clamp/ui-react/src/components/dialogs/Policy/PoliciesTreeViewer.test.js
@@ -0,0 +1,54 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2022 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+import {shallow} from "enzyme";
+import React from "react";
+import PoliciesTreeViewer from "./PoliciesTreeViewer";
+import fs from "fs";
+import toJson from "enzyme-to-json";
+
+describe('Verify PoliciesTreeViewer', () => {
+
+ let toscaPoliciesData = fs.readFileSync('src/components/dialogs/Policy/toscaPoliciesData.test.json', {
+ encoding: 'utf8',
+ flag: 'r'
+ });
+ const toscaPoliciesDataArray = JSON.parse(toscaPoliciesData);
+
+ const logSpy = jest.spyOn(console, 'log');
+
+
+ it("renders correctly", () => {
+ const component = shallow(<PoliciesTreeViewer policiesData={'[]'} />);
+
+ expect(toJson(component)).toMatchSnapshot();
+ });
+
+ it("tests createPoliciesTree handler", () => {
+ const component = shallow(<PoliciesTreeViewer policiesData={ toscaPoliciesDataArray } valueForTreeCreation="name" />);
+ component.setState({ policiesTreeData: toscaPoliciesDataArray });
+
+ const instance = component.instance();
+ instance.createPoliciesTree(toscaPoliciesDataArray);
+
+ expect(logSpy).toHaveBeenCalledWith('createPoliciesTree called');
+ expect(component.state('policiesTreeData')).toEqual(toscaPoliciesDataArray);
+ });
+
+});
\ No newline at end of file
diff --git a/gui-clamp/ui-react/src/components/dialogs/Policy/PolicyEditor.test.js b/gui-clamp/ui-react/src/components/dialogs/Policy/PolicyEditor.test.js
index 111f2c6..5e63ab4 100644
--- a/gui-clamp/ui-react/src/components/dialogs/Policy/PolicyEditor.test.js
+++ b/gui-clamp/ui-react/src/components/dialogs/Policy/PolicyEditor.test.js
@@ -56,7 +56,6 @@
}
};
-
it('Test the render method', async () => {
PolicyToscaService.getToscaPolicyModel = jest.fn().mockImplementation(() => {
return Promise.resolve(toscaJson);
diff --git a/gui-clamp/ui-react/src/components/dialogs/Policy/PolicyToscaFileSelector.js b/gui-clamp/ui-react/src/components/dialogs/Policy/PolicyToscaFileSelector.js
index 8093b7e..8051059 100644
--- a/gui-clamp/ui-react/src/components/dialogs/Policy/PolicyToscaFileSelector.js
+++ b/gui-clamp/ui-react/src/components/dialogs/Policy/PolicyToscaFileSelector.js
@@ -3,6 +3,7 @@
* ONAP POLICY-CLAMP
* ================================================================================
* Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2022 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -27,9 +28,9 @@
import Col from 'react-bootstrap/Col';
import styled from 'styled-components';
import Alert from 'react-bootstrap/Alert';
-import { Input, InputLabel, Button, SvgIcon } from "@material-ui/core";
+import { Button, SvgIcon } from "@material-ui/core";
import PublishIcon from '@material-ui/icons/Publish';
-import PolicyService from '../../../api/PolicyService';
+import PolicyService from "../../../api/PolicyService";
const ModalStyled = styled(Modal)`
background-color: transparent;
@@ -66,6 +67,7 @@
}
onFileChange(target) {
+ console.log('onFileChange target');
this.setState({ alertMessages: [] });
target.currentTarget.files.forEach(file => {
const fileReader = new FileReader();
diff --git a/gui-clamp/ui-react/src/components/dialogs/Policy/PolicyToscaFileSelector.test.js b/gui-clamp/ui-react/src/components/dialogs/Policy/PolicyToscaFileSelector.test.js
new file mode 100644
index 0000000..412b1b0
--- /dev/null
+++ b/gui-clamp/ui-react/src/components/dialogs/Policy/PolicyToscaFileSelector.test.js
@@ -0,0 +1,128 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2022 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+import {shallow} from "enzyme";
+import toJson from "enzyme-to-json";
+import React from "react";
+import PolicyToscaFileSelector from "./PolicyToscaFileSelector";
+import PolicyService from "../../../api/PolicyService";
+import Alert from "react-bootstrap/Alert";
+import PolicyToscaService from "../../../api/PolicyToscaService";
+import fs from "fs";
+
+describe('Verify PolicyToscaFileSelector', () => {
+
+ let toscaPoliciesList = fs.readFileSync('src/components/dialogs/Policy/toscaPoliciesList.test.json', {
+ encoding: 'utf8',
+ flag: 'r'
+ });
+
+ const uploadFile = JSON.stringify(
+ {
+ name: 'test-file.yaml',
+ lastModified: 1639414348371,
+ lastModifiedDate: 'Sat Jan 1 2022 00:00:01 GMT+0000',
+ size: 32880,
+ type: ''
+ });
+
+ const file = new Blob([uploadFile], {type: 'file'})
+ const logSpy = jest.spyOn(console, 'log');
+
+ const alertMessages = [(
+ <Alert variant="success"><Alert.Heading>{file.name}</Alert.Heading><p>Policy Tosca Model Creation Test</p>
+ <hr/>
+ <p>Type: {file.type}</p><p>Size: {file.size}</p></Alert>)];
+
+ it("renders correctly", () => {
+ const component = shallow(<PolicyToscaFileSelector/>);
+ expect(toJson(component)).toMatchSnapshot();
+ });
+
+ it('Test handleClose', async () => {
+ const flushPromises = () => new Promise(setImmediate);
+ const showFileSelectorMock = jest.fn();
+ const showFileSelector = showFileSelectorMock.bind({
+ showFileSelector: false
+ });
+ const handleClose = jest.spyOn(PolicyToscaFileSelector.prototype, 'handleClose');
+ const component = shallow(<PolicyToscaFileSelector disableFunction={showFileSelector} show={false}/>);
+
+ component.find('[variant="secondary"]').get(0).props.onClick();
+ await flushPromises();
+ component.update();
+
+ expect(handleClose).toHaveBeenCalledTimes(1);
+ expect(component.state('show')).toEqual(false);
+
+ handleClose.mockClear();
+ });
+
+ it('handleClose called when top-right button clicked', async () => {
+ const flushPromises = () => new Promise(setImmediate);
+ const showFileSelectorMock = jest.fn();
+ const showFileSelector = showFileSelectorMock.bind({
+ showFileSelector: false
+ });
+ const handleClose = jest.spyOn(PolicyToscaFileSelector.prototype, 'handleClose');
+ const component = shallow(<PolicyToscaFileSelector disableFunction={showFileSelector} show={false}/>);
+
+ component.find('[size="lg"]').get(0).props.onHide();
+ await flushPromises();
+ component.update();
+
+ expect(handleClose).toHaveBeenCalledTimes(1);
+ expect(component.state('show')).toEqual(false);
+
+ handleClose.mockClear();
+ });
+
+ it("onFileChange called when upload button clicked", () => {
+ PolicyService.sendNewPolicyModel = jest.fn().mockImplementation(() => {
+ return Promise.resolve({});
+ });
+
+ const component = shallow(<PolicyToscaFileSelector/>);
+ const instance = component.instance();
+ const target = {
+ currentTarget: {files: [file]}
+ }
+
+ instance.onFileChange(target);
+
+ component.find('[type="file"]').get(0).props.onChange(target);
+ expect(logSpy).toHaveBeenCalledWith('onFileChange target');
+ });
+
+ it("setAlertMessage state", () => {
+ PolicyToscaService.getToscaPolicyModels = jest.fn().mockImplementation(() => {
+ return Promise.resolve(toscaPoliciesList);
+ });
+ const getAllToscaModelsMock = jest.fn();
+ const getAllToscaModels = getAllToscaModelsMock.bind({
+ toscaModelsListData: toscaPoliciesList,
+ toscaModelsListDataFiltered: toscaPoliciesList
+ });
+
+ const component = shallow(<PolicyToscaFileSelector toscaTableUpdateFunction={getAllToscaModels}/>);
+ component.setState({alertMessages: alertMessages});
+
+ expect(component.state('alertMessages')).toEqual(alertMessages);
+ });
+});
\ No newline at end of file
diff --git a/gui-clamp/ui-react/src/components/dialogs/Policy/ViewAllPolicies.test.js b/gui-clamp/ui-react/src/components/dialogs/Policy/ViewAllPolicies.test.js
index d477c9a..d4a3fd9 100644
--- a/gui-clamp/ui-react/src/components/dialogs/Policy/ViewAllPolicies.test.js
+++ b/gui-clamp/ui-react/src/components/dialogs/Policy/ViewAllPolicies.test.js
@@ -24,6 +24,7 @@
import PolicyToscaService from "../../../api/PolicyToscaService";
import PolicyService from "../../../api/PolicyService";
import CreateLoopModal from "../Loop/CreateLoopModal";
+import toJson from "enzyme-to-json";
describe('Verify ViewAllPolicies', () => {
let toscaPolicyModels = fs.readFileSync('src/components/dialogs/Policy/toscaData.test.json', {
@@ -35,6 +36,11 @@
flag: 'r'
});
+ it("renders correctly", () => {
+ const component = shallow(<ViewAllPolicies />);
+ expect(toJson(component)).toMatchSnapshot();
+ });
+
it('Test handleClose', () => {
const historyMock = {push: jest.fn()};
const handleClose = jest.spyOn(ViewAllPolicies.prototype, 'handleClose');
diff --git a/gui-clamp/ui-react/src/components/dialogs/Policy/__snapshots__/PoliciesTreeViewer.test.js.snap b/gui-clamp/ui-react/src/components/dialogs/Policy/__snapshots__/PoliciesTreeViewer.test.js.snap
new file mode 100644
index 0000000..8d14fa4
--- /dev/null
+++ b/gui-clamp/ui-react/src/components/dialogs/Policy/__snapshots__/PoliciesTreeViewer.test.js.snap
@@ -0,0 +1,23 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify PoliciesTreeViewer renders correctly 1`] = `
+<WithStyles(ForwardRef(TreeView))
+ defaultCollapseIcon={<Memo />}
+ defaultEndIcon={<Memo />}
+ defaultExpandIcon={<Memo />}
+ defaultExpanded={
+ Array [
+ "root",
+ ]
+ }
+ multiSelect={true}
+ onNodeSelect={[Function]}
+>
+ <WithStyles(ForwardRef(TreeItem))
+ key="1"
+ label="ROOT(0)"
+ nodeId={1}
+ onNodeSelect={[Function]}
+ />
+</WithStyles(ForwardRef(TreeView))>
+`;
diff --git a/gui-clamp/ui-react/src/components/dialogs/Policy/__snapshots__/PolicyToscaFileSelector.test.js.snap b/gui-clamp/ui-react/src/components/dialogs/Policy/__snapshots__/PolicyToscaFileSelector.test.js.snap
new file mode 100644
index 0000000..10a5559
--- /dev/null
+++ b/gui-clamp/ui-react/src/components/dialogs/Policy/__snapshots__/PolicyToscaFileSelector.test.js.snap
@@ -0,0 +1,80 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify PolicyToscaFileSelector renders correctly 1`] = `
+<Styled(Modal)
+ backdrop="static"
+ keyboard={false}
+ onHide={[Function]}
+ size="lg"
+>
+ <ModalHeader
+ closeButton={true}
+ closeLabel="Close"
+ >
+ <ModalTitle>
+ Create New Policy Tosca Model
+ </ModalTitle>
+ </ModalHeader>
+ <ModalBody>
+ <FormGroup
+ as={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "defaultProps": Object {
+ "noGutters": false,
+ },
+ "render": [Function],
+ }
+ }
+ controlId="formPlaintextEmail"
+ >
+ <Col
+ sm="10"
+ >
+ <input
+ accept=".yaml,.yml"
+ id="fileUploadButton"
+ multiple={true}
+ onChange={[Function]}
+ style={
+ Object {
+ "display": "none",
+ }
+ }
+ type="file"
+ />
+ <label
+ htmlFor="fileUploadButton"
+ >
+ <WithStyles(ForwardRef(Button))
+ color="primary"
+ component="span"
+ startIcon={
+ <WithStyles(ForwardRef(SvgIcon))
+ fontSize="small"
+ >
+ <Memo />
+ </WithStyles(ForwardRef(SvgIcon))>
+ }
+ variant="contained"
+ >
+ Upload Files
+ </WithStyles(ForwardRef(Button))>
+ <p>
+ (Only YAML files are supported)
+ </p>
+ </label>
+ <styled.div />
+ </Col>
+ </FormGroup>
+ </ModalBody>
+ <ModalFooter>
+ <WithStyles(ForwardRef(Button))
+ onClick={[Function]}
+ variant="secondary"
+ >
+ Close
+ </WithStyles(ForwardRef(Button))>
+ </ModalFooter>
+</Styled(Modal)>
+`;
diff --git a/gui-clamp/ui-react/src/components/dialogs/Policy/__snapshots__/ViewAllPolicies.test.js.snap b/gui-clamp/ui-react/src/components/dialogs/Policy/__snapshots__/ViewAllPolicies.test.js.snap
new file mode 100644
index 0000000..24b631b
--- /dev/null
+++ b/gui-clamp/ui-react/src/components/dialogs/Policy/__snapshots__/ViewAllPolicies.test.js.snap
@@ -0,0 +1,598 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify ViewAllPolicies renders correctly 1`] = `
+<Fragment>
+ <Styled(Modal)
+ backdrop="static"
+ keyboard={false}
+ onHide={[Function]}
+ show={true}
+ size="xl"
+ >
+ <ModalHeader
+ closeButton={true}
+ closeLabel="Close"
+ />
+ <Tabs
+ id="controlled-tab-example"
+ mountOnEnter={false}
+ onSelect={[Function]}
+ unmountOnExit={false}
+ variant="tabs"
+ >
+ <Tab
+ eventKey="policies"
+ title="Policies in Policy Framework"
+ >
+ <ModalBody>
+ <div>
+ <styled.div>
+ <PoliciesTreeViewer
+ policiesData={Array []}
+ policiesFilterFunction={[Function]}
+ valueForTreeCreation="name"
+ />
+ </styled.div>
+ <styled.div>
+ <WithStyles(Component)
+ actions={
+ Array [
+ Object {
+ "icon": Object {
+ "$$typeof": Symbol(react.memo),
+ "compare": null,
+ "type": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ },
+ "onClick": [Function],
+ "tooltip": "Delete Policy",
+ },
+ ]
+ }
+ columns={
+ Array [
+ Object {
+ "cellStyle": Object {
+ "backgroundColor": "#039be5",
+ "border": "1px solid black",
+ "color": "#FFF",
+ },
+ "field": "name",
+ "headerStyle": Object {
+ "backgroundColor": "#ddd",
+ "border": "2px solid black",
+ },
+ "title": "Policy Name",
+ },
+ Object {
+ "cellStyle": Object {
+ "backgroundColor": "#039be5",
+ "border": "1px solid black",
+ "color": "#FFF",
+ },
+ "field": "version",
+ "headerStyle": Object {
+ "backgroundColor": "#ddd",
+ "border": "2px solid black",
+ },
+ "title": "Policy Version",
+ },
+ Object {
+ "cellStyle": Object {
+ "backgroundColor": "#039be5",
+ "border": "1px solid black",
+ "color": "#FFF",
+ },
+ "field": "type",
+ "headerStyle": Object {
+ "backgroundColor": "#ddd",
+ "border": "2px solid black",
+ },
+ "title": "Policy Type",
+ },
+ Object {
+ "cellStyle": Object {
+ "backgroundColor": "#039be5",
+ "border": "1px solid black",
+ "color": "#FFF",
+ },
+ "field": "type_version",
+ "headerStyle": Object {
+ "backgroundColor": "#ddd",
+ "border": "2px solid black",
+ },
+ "title": "Policy Type Version",
+ },
+ Object {
+ "cellStyle": Object {
+ "backgroundColor": "#039be5",
+ "border": "1px solid black",
+ "color": "#FFF",
+ },
+ "field": "supportedPdpGroupsString",
+ "headerStyle": Object {
+ "backgroundColor": "#ddd",
+ "border": "2px solid black",
+ },
+ "title": "Deployable in PDP Group",
+ },
+ Object {
+ "cellStyle": Object {
+ "backgroundColor": "#039be5",
+ "border": "1px solid black",
+ "color": "#FFF",
+ },
+ "field": "pdpGroupInfoString",
+ "headerStyle": Object {
+ "backgroundColor": "#ddd",
+ "border": "2px solid black",
+ },
+ "title": "Deployed in PDP Group",
+ },
+ ]
+ }
+ data={Array []}
+ detailPanel={
+ Array [
+ Object {
+ "icon": Object {
+ "$$typeof": Symbol(react.memo),
+ "compare": null,
+ "type": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ },
+ "render": [Function],
+ "tooltip": "Show Configuration",
+ },
+ Object {
+ "icon": Object {
+ "$$typeof": Symbol(react.memo),
+ "compare": null,
+ "type": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ },
+ "openIcon": Object {
+ "$$typeof": Symbol(react.memo),
+ "compare": null,
+ "type": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ },
+ "render": [Function],
+ "tooltip": "Show Raw Data",
+ },
+ Object {
+ "icon": Object {
+ "$$typeof": Symbol(react.memo),
+ "compare": null,
+ "type": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ },
+ "openIcon": Object {
+ "$$typeof": Symbol(react.memo),
+ "compare": null,
+ "type": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ },
+ "render": [Function],
+ "tooltip": "PDP Group Deployment",
+ },
+ ]
+ }
+ icons={
+ Object {
+ "Add": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Check": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Clear": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Delete": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "DetailPanel": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Edit": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Export": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Filter": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "FirstPage": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "LastPage": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "NextPage": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "PreviousPage": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "ResetSearch": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Search": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "SortArrow": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "ThirdStateCheck": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "ViewColumn": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ }
+ }
+ onRowClick={[Function]}
+ options={
+ Object {
+ "actionsColumnIndex": -1,
+ "exportButton": true,
+ "grouping": true,
+ "headerStyle": Object {
+ "backgroundColor": "#ddd",
+ "border": "1px solid black",
+ "fontSize": "15pt",
+ "text": "bold",
+ },
+ }
+ }
+ title="Policies"
+ />
+ </styled.div>
+ </div>
+ </ModalBody>
+ </Tab>
+ <Tab
+ eventKey="tosca models"
+ title="Tosca Models in Policy Framework"
+ >
+ <ModalBody>
+ <div>
+ <styled.div>
+ <PoliciesTreeViewer
+ policiesData={Array []}
+ policiesFilterFunction={[Function]}
+ valueForTreeCreation="policyModelType"
+ />
+ </styled.div>
+ <styled.div>
+ <WithStyles(Component)
+ actions={
+ Array [
+ Object {
+ "icon": Object {
+ "$$typeof": Symbol(react.memo),
+ "compare": null,
+ "type": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ },
+ "isFreeAction": true,
+ "onClick": [Function],
+ "tooltip": "Add New Tosca Model",
+ },
+ ]
+ }
+ columns={
+ Array [
+ Object {
+ "cellStyle": Object {
+ "backgroundColor": "#039be5",
+ "border": "1px solid black",
+ "color": "#FFF",
+ },
+ "field": "policyModelType",
+ "headerStyle": Object {
+ "backgroundColor": "#ddd",
+ "border": "2px solid black",
+ },
+ "title": "Policy Model Type",
+ },
+ Object {
+ "cellStyle": Object {
+ "backgroundColor": "#039be5",
+ "border": "1px solid black",
+ "color": "#FFF",
+ },
+ "field": "policyAcronym",
+ "headerStyle": Object {
+ "backgroundColor": "#ddd",
+ "border": "2px solid black",
+ },
+ "title": "Policy Acronym",
+ },
+ Object {
+ "cellStyle": Object {
+ "backgroundColor": "#039be5",
+ "border": "1px solid black",
+ "color": "#FFF",
+ },
+ "field": "version",
+ "headerStyle": Object {
+ "backgroundColor": "#ddd",
+ "border": "2px solid black",
+ },
+ "title": "Version",
+ },
+ Object {
+ "cellStyle": Object {
+ "backgroundColor": "#039be5",
+ "border": "1px solid black",
+ "color": "#FFF",
+ },
+ "field": "updatedBy",
+ "headerStyle": Object {
+ "backgroundColor": "#ddd",
+ "border": "2px solid black",
+ },
+ "title": "Uploaded By",
+ },
+ Object {
+ "cellStyle": Object {
+ "backgroundColor": "#039be5",
+ "border": "1px solid black",
+ "color": "#FFF",
+ },
+ "editable": "never",
+ "field": "updatedDate",
+ "headerStyle": Object {
+ "backgroundColor": "#ddd",
+ "border": "2px solid black",
+ },
+ "title": "Uploaded Date",
+ },
+ ]
+ }
+ data={Array []}
+ detailPanel={
+ Array [
+ Object {
+ "icon": Object {
+ "$$typeof": Symbol(react.memo),
+ "compare": null,
+ "type": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ },
+ "render": [Function],
+ "tooltip": "Show Tosca",
+ },
+ Object {
+ "icon": Object {
+ "$$typeof": Symbol(react.memo),
+ "compare": null,
+ "type": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ },
+ "openIcon": Object {
+ "$$typeof": Symbol(react.memo),
+ "compare": null,
+ "type": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ },
+ "render": [Function],
+ "tooltip": "Show Raw Data",
+ },
+ Object {
+ "icon": Object {
+ "$$typeof": Symbol(react.memo),
+ "compare": null,
+ "type": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ },
+ "openIcon": Object {
+ "$$typeof": Symbol(react.memo),
+ "compare": null,
+ "type": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ },
+ "render": [Function],
+ "tooltip": "Create a policy from this model",
+ },
+ ]
+ }
+ icons={
+ Object {
+ "Add": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Check": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Clear": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Delete": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "DetailPanel": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Edit": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Export": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Filter": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "FirstPage": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "LastPage": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "NextPage": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "PreviousPage": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "ResetSearch": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "Search": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "SortArrow": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "ThirdStateCheck": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ "ViewColumn": Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "render": [Function],
+ },
+ }
+ }
+ onRowClick={[Function]}
+ options={
+ Object {
+ "actionsColumnIndex": -1,
+ "exportButton": true,
+ "grouping": true,
+ "headerStyle": Object {
+ "backgroundColor": "#ddd",
+ "border": "1px solid black",
+ "fontSize": "15pt",
+ "text": "bold",
+ },
+ }
+ }
+ title="Tosca Models"
+ />
+ </styled.div>
+ </div>
+ </ModalBody>
+ </Tab>
+ </Tabs>
+ <Alert
+ closeLabel="Close alert"
+ dismissible={true}
+ onClose={[Function]}
+ show={false}
+ transition={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "defaultProps": Object {
+ "appear": false,
+ "in": false,
+ "mountOnEnter": false,
+ "timeout": 300,
+ "unmountOnExit": false,
+ },
+ "render": [Function],
+ }
+ }
+ variant="success"
+ >
+ <styled.div />
+ </Alert>
+ <Alert
+ closeLabel="Close alert"
+ dismissible={true}
+ onClose={[Function]}
+ show={false}
+ transition={
+ Object {
+ "$$typeof": Symbol(react.forward_ref),
+ "defaultProps": Object {
+ "appear": false,
+ "in": false,
+ "mountOnEnter": false,
+ "timeout": 300,
+ "unmountOnExit": false,
+ },
+ "render": [Function],
+ }
+ }
+ variant="danger"
+ >
+ <styled.div />
+ </Alert>
+ <ModalFooter>
+ <Button
+ active={false}
+ disabled={false}
+ onClick={[Function]}
+ variant="secondary"
+ >
+ Close
+ </Button>
+ </ModalFooter>
+ </Styled(Modal)>
+ <PolicyToscaFileSelector
+ disableFunction={[Function]}
+ show={false}
+ toscaTableUpdateFunction={[Function]}
+ />
+</Fragment>
+`;
diff --git a/gui-clamp/ui-react/src/components/dialogs/Policy/toscaPoliciesData.test.json b/gui-clamp/ui-react/src/components/dialogs/Policy/toscaPoliciesData.test.json
index 9305243..a852daf 100644
--- a/gui-clamp/ui-react/src/components/dialogs/Policy/toscaPoliciesData.test.json
+++ b/gui-clamp/ui-react/src/components/dialogs/Policy/toscaPoliciesData.test.json
@@ -88,5 +88,249 @@
"tableData": {
"id": 0
}
+ },
+ {
+ "type": "onap.policies.controlloop.operational.common.Drools",
+ "type_version": "1.0.0",
+ "properties": {
+ "abatement": false,
+ "operations": [
+ {
+ "failure_retries": "final_failure_retries",
+ "id": "test1",
+ "failure_timeout": "final_failure_timeout",
+ "failure": "final_failure",
+ "operation": {
+ "payload": {
+ "artifact_name": "baseconfiguration",
+ "artifact_version": "1.0.0",
+ "mode": "async",
+ "data": "{\"resource-assignment-properties\":{\"request-id\":\"\",\"service-instance-id\":\"\",\"hostname\":\"\",\"request-info\":{\"prop1\":\"\",\"prop2\":\"\"}}}"
+ },
+ "target": {
+ "entityIds": {
+ "resourceID": "Vloadbalancerms..vdns..module-3",
+ "modelInvariantId": "4c10ba9b-f88f-415e-9de3-5d33336047fa",
+ "modelVersionId": "4fa73b49-8a6c-493e-816b-eb401567b720",
+ "modelName": "Vloadbalancerms..vdns..module-3",
+ "modelVersion": "1",
+ "modelCustomizationId": "bafcdab0-801d-4d81-9ead-f464640a38b1"
+ },
+ "targetType": "VNF"
+ },
+ "actor": "SDNR",
+ "operation": "BandwidthOnDemand"
+ },
+ "failure_guard": "final_failure_guard",
+ "retries": 0,
+ "timeout": 0,
+ "failure_exception": "final_failure_exception",
+ "description": "test",
+ "success": "final_success"
+ }
+ ],
+ "trigger": "test1",
+ "timeout": 0,
+ "id": "LOOP_test"
+ },
+ "name": "OPERATIONAL_vLoadBalancerMS_v1_0_Drools_1_0_0_7xd",
+ "version": "1.0.0",
+ "metadata": {
+ "policy-id": "OPERATIONAL_vLoadBalancerMS_v1_0_Drools_1_0_0_7xd",
+ "policy-version": "1.0.0"
+ },
+ "pdpGroupInfo": [
+ {
+ "controlloop": {
+ "name": "controlloop",
+ "description": "This group should be used for managing all control loop related policies and pdps",
+ "pdpGroupState": "ACTIVE",
+ "properties": {},
+ "pdpSubgroups": [
+ {
+ "pdpType": "apex",
+ "supportedPolicyTypes": [
+ {
+ "name": "onap.policies.controlloop.Operational",
+ "version": "1.0.0"
+ },
+ {
+ "name": "onap.policies.controlloop.operational.common.*",
+ "version": "1.0.0"
+ }
+ ],
+ "policies": [
+ {
+ "name": "OPERATIONAL_vLoadBalancerMS_v1_0_Drools_1_0_0_7xd",
+ "version": "1.0.0"
+ }
+ ],
+ "currentInstanceCount": 0,
+ "desiredInstanceCount": 1,
+ "properties": {},
+ "pdpInstances": [
+ {
+ "instanceId": "controlloop-f8287777-5f3e-4f0f-b21b-d8829c93f57b",
+ "pdpState": "ACTIVE",
+ "healthy": "HEALTHY",
+ "message": "Pdp Heartbeat",
+ "lastUpdate": "2021-09-29T02:51:21Z"
+ }
+ ]
+ },
+ {
+ "pdpType": "drools",
+ "supportedPolicyTypes": [
+ {
+ "name": "onap.policies.controlloop.operational.common.*",
+ "version": "1.0.0"
+ },
+ {
+ "name": "onap.policies.controlloop.Operational",
+ "version": "1.0.0"
+ }
+ ],
+ "policies": [
+ {
+ "name": "OPERATIONAL_vLoadBalancerMS_v1_0_Drools_1_0_0_7xd",
+ "version": "1.0.0"
+ }
+ ],
+ "currentInstanceCount": 0,
+ "desiredInstanceCount": 1,
+ "properties": {},
+ "pdpInstances": [
+ {
+ "instanceId": "drools-f8287777-5f3e-4f0f-b21b-d8829c93f57b",
+ "pdpState": "ACTIVE",
+ "healthy": "HEALTHY",
+ "message": "Pdp Heartbeat",
+ "lastUpdate": "2021-09-29T02:51:21Z"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ],
+ "supportedPdpGroups": [
+ {
+ "controlloop": [
+ "apex",
+ "drools"
+ ]
+ }
+ ],
+ "supportedPdpGroupsString": "controlloop/apex\r\ncontrolloop/drools\r\n",
+ "pdpGroupInfoString": "controlloop/apex (ACTIVE)\r\ncontrolloop/drools (ACTIVE)\r\n",
+ "tableData": {
+ "id": 1
+ }
+ },
+ {
+ "type": "onap.policies.Naming",
+ "type_version": "1.0.0",
+ "properties": {
+ "naming-models": [
+ {
+ "naming-type": "VNF",
+ "naming-recipe": "AIC_CLOUD_REGION|DELIMITER|CONSTANT|DELIMITER|TIMESTAMP",
+ "name-operation": "to_lower_case()",
+ "naming-properties": [
+ {
+ "property-name": "AIC_CLOUD_REGION"
+ },
+ {
+ "property-name": "CONSTANT",
+ "property-value": "onap-nf"
+ },
+ {
+ "property-name": "TIMESTAMP"
+ },
+ {
+ "property-value": "-",
+ "property-name": "DELIMITER"
+ }
+ ]
+ },
+ {
+ "naming-type": "VNFC",
+ "naming-recipe": "VNF_NAME|DELIMITER|NFC_NAMING_CODE|DELIMITER|SEQUENCE",
+ "name-operation": "to_lower_case()",
+ "naming-properties": [
+ {
+ "property-name": "VNF_NAME"
+ },
+ {
+ "property-name": "SEQUENCE",
+ "increment-sequence": {
+ "max": "zzz",
+ "scope": "ENTIRETY",
+ "start-value": "1",
+ "length": "3",
+ "increment": "1",
+ "sequence-type": "alpha-numeric"
+ }
+ },
+ {
+ "property-name": "NFC_NAMING_CODE"
+ },
+ {
+ "property-value": "-",
+ "property-name": "DELIMITER"
+ }
+ ]
+ },
+ {
+ "naming-type": "VF-MODULE",
+ "naming-recipe": "VNF_NAME|DELIMITER|VF_MODULE_LABEL|DELIMITER|VF_MODULE_TYPE|DELIMITER|SEQUENCE",
+ "name-operation": "to_lower_case()",
+ "naming-properties": [
+ {
+ "property-name": "VNF_NAME"
+ },
+ {
+ "property-value": "-",
+ "property-name": "DELIMITER"
+ },
+ {
+ "property-name": "VF_MODULE_LABEL"
+ },
+ {
+ "property-name": "VF_MODULE_TYPE"
+ },
+ {
+ "property-name": "SEQUENCE",
+ "increment-sequence": {
+ "max": "zzz",
+ "scope": "PRECEEDING",
+ "start-value": "1",
+ "length": "3",
+ "increment": "1",
+ "sequence-type": "alpha-numeric"
+ }
+ }
+ ]
+ }
+ ],
+ "policy-instance-name": "ONAP_NF_NAMING_TIMESTAMP"
+ },
+ "name": "SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP",
+ "version": "1.0.0",
+ "metadata": {
+ "policy-id": "SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP",
+ "policy-version": "1.0.0"
+ },
+ "supportedPdpGroups": [
+ {
+ "monitoring": [
+ "xacml"
+ ]
+ }
+ ],
+ "supportedPdpGroupsString": "monitoring/xacml\r\n",
+ "tableData": {
+ "id": 2
+ }
}
]
\ No newline at end of file
diff --git a/gui-clamp/ui-react/src/components/dialogs/Tosca/ViewLoopTemplatesModal.test.js b/gui-clamp/ui-react/src/components/dialogs/Tosca/ViewLoopTemplatesModal.test.js
index d93f0b0..fd52761 100644
--- a/gui-clamp/ui-react/src/components/dialogs/Tosca/ViewLoopTemplatesModal.test.js
+++ b/gui-clamp/ui-react/src/components/dialogs/Tosca/ViewLoopTemplatesModal.test.js
@@ -2,8 +2,8 @@
* ============LICENSE_START=======================================================
* ONAP CLAMP
* ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights
- * reserved.
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2022 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -68,7 +68,7 @@
}
});
});
- const component = shallow(<ViewLoopTemplatesModal/>);
+ shallow(<ViewLoopTemplatesModal/>);
});
it('Test API Rejection', () => {
@@ -78,7 +78,7 @@
}),
100
);
- const component = shallow(<ViewLoopTemplatesModal/>);
+ shallow(<ViewLoopTemplatesModal/>);
expect(myMockFunc.mock.calls.length).toBe(1);
});
diff --git a/gui-clamp/ui-react/src/components/menu/MenuBar.test.js b/gui-clamp/ui-react/src/components/menu/MenuBar.test.js
index 1e6dd1c..bd55687 100644
--- a/gui-clamp/ui-react/src/components/menu/MenuBar.test.js
+++ b/gui-clamp/ui-react/src/components/menu/MenuBar.test.js
@@ -82,7 +82,6 @@
it('Finds StyledNavLink', () => {
const component = shallow(<MenuBar />);
- console.log(component.debug());
expect(component.find('Styled(NavLink)').length).toEqual(2);
});
});