diff --git a/awx/ui_next/src/components/AddRole/AddResourceRole.test.jsx b/awx/ui_next/src/components/AddRole/AddResourceRole.test.jsx
index 1f6ba521b7..53c450f0b9 100644
--- a/awx/ui_next/src/components/AddRole/AddResourceRole.test.jsx
+++ b/awx/ui_next/src/components/AddRole/AddResourceRole.test.jsx
@@ -16,7 +16,6 @@ jest.mock('../../api/models/Users');
jest.mock('react-router-dom', () => ({
...jest.requireActual('react-router-dom'),
-
useHistory: () => ({ push: jest.fn(), location: { pathname: {} } }),
}));
// TODO: Once error handling is functional in
diff --git a/awx/ui_next/src/components/ScreenHeader/ScreenHeader.test.jsx b/awx/ui_next/src/components/ScreenHeader/ScreenHeader.test.jsx
index f16fd774e1..a0ba2b35dc 100644
--- a/awx/ui_next/src/components/ScreenHeader/ScreenHeader.test.jsx
+++ b/awx/ui_next/src/components/ScreenHeader/ScreenHeader.test.jsx
@@ -5,10 +5,6 @@ import { mountWithContexts } from '../../../testUtils/enzymeHelpers';
import ScreenHeader from './ScreenHeader';
-jest.mock('react-router-dom', () => ({
- ...jest.requireActual('react-router-dom'),
-}));
-
describe('', () => {
let breadcrumbWrapper;
let breadcrumb;
diff --git a/awx/ui_next/src/screens/Application/Application/Application.test.jsx b/awx/ui_next/src/screens/Application/Application/Application.test.jsx
index 136c468075..58f29395db 100644
--- a/awx/ui_next/src/screens/Application/Application/Application.test.jsx
+++ b/awx/ui_next/src/screens/Application/Application/Application.test.jsx
@@ -15,6 +15,7 @@ jest.mock('react-router-dom', () => ({
}),
useParams: () => ({ id: 1 }),
}));
+
const options = {
data: {
actions: {
diff --git a/awx/ui_next/src/screens/Setting/Settings.test.jsx b/awx/ui_next/src/screens/Setting/Settings.test.jsx
index 13b8ec77ba..0a8a4cd0a9 100644
--- a/awx/ui_next/src/screens/Setting/Settings.test.jsx
+++ b/awx/ui_next/src/screens/Setting/Settings.test.jsx
@@ -11,10 +11,6 @@ import Settings from './Settings';
jest.mock('../../api');
-jest.mock('react-router-dom', () => ({
- ...jest.requireActual('react-router-dom'),
-}));
-
describe('', () => {
let wrapper;
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplate.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplate.test.jsx
index b68d0f6b56..2888b8682d 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplate.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplate.test.jsx
@@ -50,10 +50,11 @@ describe('', () => {
},
});
});
+
afterEach(() => {
jest.clearAllMocks();
- wrapper.unmount();
});
+
test('initially renders successfully', async () => {
await act(async () => {
wrapper = mountWithContexts(
@@ -61,6 +62,7 @@ describe('', () => {
);
});
});
+
test('When component mounts API is called and the response is put in state', async () => {
await act(async () => {
wrapper = mountWithContexts(
@@ -70,6 +72,7 @@ describe('', () => {
expect(WorkflowJobTemplatesAPI.readDetail).toBeCalled();
expect(OrganizationsAPI.read).toBeCalled();
});
+
test('notifications tab shown for admins', async () => {
await act(async () => {
wrapper = mountWithContexts(
@@ -84,6 +87,7 @@ describe('', () => {
);
expect(tabs.at(3).text()).toEqual('Notifications');
});
+
test('notifications tab hidden with reduced permissions', async () => {
OrganizationsAPI.read.mockResolvedValue({
data: {
@@ -135,6 +139,7 @@ describe('', () => {
await waitForElement(wrapper, 'ContentError', el => el.length === 1);
});
+
test('should call to get webhook key', async () => {
const history = createMemoryHistory({
initialEntries: ['/templates/workflow_job_template/1/foobar'],
@@ -161,6 +166,7 @@ describe('', () => {
});
expect(WorkflowJobTemplatesAPI.readWebhookKey).toHaveBeenCalled();
});
+
test('should not call to get webhook key', async () => {
WorkflowJobTemplatesAPI.readWorkflowJobTemplateOptions.mockResolvedValueOnce(
{
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/DeleteAllNodesModal.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/DeleteAllNodesModal.test.jsx
index 26c806da26..1924c82092 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/DeleteAllNodesModal.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/DeleteAllNodesModal.test.jsx
@@ -15,10 +15,6 @@ describe('DeleteAllNodesModal', () => {
);
});
- afterAll(() => {
- wrapper.unmount();
- });
-
test('Delete All button dispatches as expected', () => {
wrapper.find('button#confirm-delete-all-nodes').simulate('click');
expect(dispatch).toHaveBeenCalledWith({
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/LinkModals/LinkDeleteModal.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/LinkModals/LinkDeleteModal.test.jsx
index d0cee96579..64103aeb78 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/LinkModals/LinkDeleteModal.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/LinkModals/LinkDeleteModal.test.jsx
@@ -32,10 +32,6 @@ describe('LinkDeleteModal', () => {
);
});
- afterAll(() => {
- wrapper.unmount();
- });
-
test('Confirm button dispatches as expected', () => {
wrapper.find('button#confirm-link-removal').simulate('click');
expect(dispatch).toHaveBeenCalledWith({
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/LinkModals/LinkModal.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/LinkModals/LinkModal.test.jsx
index 787e891306..e98a49f10d 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/LinkModals/LinkModal.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/LinkModals/LinkModal.test.jsx
@@ -27,10 +27,6 @@ describe('LinkModal', () => {
);
});
- afterAll(() => {
- wrapper.unmount();
- });
-
test('Dropdown defaults to success when adding new link', () => {
expect(wrapper.find('AnsibleSelect').prop('value')).toBe('success');
});
@@ -57,6 +53,7 @@ describe('LinkModal', () => {
expect(onConfirm).toHaveBeenCalledWith('always');
});
});
+
describe('Editing existing link', () => {
test('Dropdown defaults to existing link type when editing link', () => {
wrapper = mountWithContexts(
@@ -79,7 +76,6 @@ describe('LinkModal', () => {
);
expect(wrapper.find('AnsibleSelect').prop('value')).toBe('failure');
- wrapper.unmount();
});
});
});
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeDeleteModal.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeDeleteModal.test.jsx
index 880af36e50..0bc87046c2 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeDeleteModal.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeDeleteModal.test.jsx
@@ -32,10 +32,6 @@ describe('NodeDeleteModal', () => {
);
});
- afterAll(() => {
- wrapper.unmount();
- });
-
test('Mounts successfully', () => {
expect(wrapper.length).toBe(1);
});
@@ -63,6 +59,7 @@ describe('NodeDeleteModal', () => {
});
});
});
+
describe('Node without unified job template', () => {
test('Mounts successfully', () => {
wrapper = mountWithContexts(
@@ -79,7 +76,6 @@ describe('NodeDeleteModal', () => {
);
expect(wrapper.length).toBe(1);
- wrapper.unmount();
});
});
});
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeNextButton.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeNextButton.test.jsx
index 8a254db9b1..4950e12391 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeNextButton.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeNextButton.test.jsx
@@ -28,10 +28,6 @@ describe('NodeNextButton', () => {
);
});
- afterAll(() => {
- wrapper.unmount();
- });
-
test('Button text matches', () => {
expect(wrapper.find('button').text()).toBe(buttonText);
});
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/InventorySourcesList.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/InventorySourcesList.test.jsx
index e5237734b0..e6b339500d 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/InventorySourcesList.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/InventorySourcesList.test.jsx
@@ -15,9 +15,6 @@ const onUpdateNodeResource = jest.fn();
describe('InventorySourcesList', () => {
let wrapper;
- afterEach(() => {
- wrapper.unmount();
- });
test('Row selected when nodeResource id matches row id and clicking new row makes expected callback', async () => {
InventorySourcesAPI.read.mockResolvedValueOnce({
data: {
@@ -74,6 +71,7 @@ describe('InventorySourcesList', () => {
url: '/api/v2/inventory_sources/2',
});
});
+
test('Error shown when read() request errors', async () => {
InventorySourcesAPI.read.mockRejectedValue(new Error());
await act(async () => {
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/JobTemplatesList.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/JobTemplatesList.test.jsx
index b66a6b1c38..8c15382a2c 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/JobTemplatesList.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/JobTemplatesList.test.jsx
@@ -17,8 +17,8 @@ describe('JobTemplatesList', () => {
let wrapper;
afterEach(() => {
jest.clearAllMocks();
- wrapper.unmount();
});
+
test('Row selected when nodeResource id matches row id and clicking new row makes expected callback', async () => {
JobTemplatesAPI.read.mockResolvedValueOnce({
data: {
@@ -81,6 +81,7 @@ describe('JobTemplatesList', () => {
project: 2,
});
});
+
test('Error shown when read() request errors', async () => {
JobTemplatesAPI.read.mockRejectedValue(new Error());
JobTemplatesAPI.readOptions.mockResolvedValue({
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/ProjectsList.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/ProjectsList.test.jsx
index a6761c999e..7ecf17c088 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/ProjectsList.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/ProjectsList.test.jsx
@@ -15,9 +15,7 @@ const onUpdateNodeResource = jest.fn();
describe('ProjectsList', () => {
let wrapper;
- afterEach(() => {
- wrapper.unmount();
- });
+
test('Row selected when nodeResource id matches row id and clicking new row makes expected callback', async () => {
ProjectsAPI.read.mockResolvedValueOnce({
data: {
@@ -70,6 +68,7 @@ describe('ProjectsList', () => {
url: '/api/v2/projects/2',
});
});
+
test('Error shown when read() request errors', async () => {
ProjectsAPI.read.mockRejectedValue(new Error());
await act(async () => {
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/WorkflowJobTemplatesList.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/WorkflowJobTemplatesList.test.jsx
index a844f56a11..5ad36450ab 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/WorkflowJobTemplatesList.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/WorkflowJobTemplatesList.test.jsx
@@ -15,9 +15,7 @@ const onUpdateNodeResource = jest.fn();
describe('WorkflowJobTemplatesList', () => {
let wrapper;
- afterEach(() => {
- wrapper.unmount();
- });
+
test('Row selected when nodeResource id matches row id and clicking new row makes expected callback', async () => {
WorkflowJobTemplatesAPI.read.mockResolvedValueOnce({
data: {
@@ -76,6 +74,7 @@ describe('WorkflowJobTemplatesList', () => {
url: '/api/v2/workflow_job_templates/2',
});
});
+
test('Error shown when read() request errors', async () => {
WorkflowJobTemplatesAPI.read.mockRejectedValue(new Error());
await act(async () => {
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeViewModal.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeViewModal.test.jsx
index 5abca07f18..e7d7a92f06 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeViewModal.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeViewModal.test.jsx
@@ -85,7 +85,6 @@ describe('NodeViewModal', () => {
afterAll(() => {
jest.resetAllMocks();
- wrapper.unmount();
});
test('should render prompt detail', () => {
@@ -151,7 +150,6 @@ describe('NodeViewModal', () => {
expect(JobTemplatesAPI.readWebhookKey).not.toHaveBeenCalledWith();
expect(JobTemplatesAPI.readLaunch).toHaveBeenCalledWith(1);
expect(JobTemplatesAPI.readInstanceGroups).toHaveBeenCalledTimes(1);
- wrapper.unmount();
jest.clearAllMocks();
});
@@ -169,7 +167,6 @@ describe('NodeViewModal', () => {
});
waitForLoaded(wrapper);
expect(wrapper.find('ContentError').length).toBe(1);
- wrapper.unmount();
jest.clearAllMocks();
});
@@ -186,7 +183,6 @@ describe('NodeViewModal', () => {
});
waitForLoaded(wrapper);
expect(wrapper.find('Button#node-view-edit-button').length).toBe(1);
- wrapper.unmount();
jest.clearAllMocks();
});
@@ -203,7 +199,6 @@ describe('NodeViewModal', () => {
});
waitForLoaded(wrapper);
expect(wrapper.find('Button#node-view-edit-button').length).toBe(0);
- wrapper.unmount();
jest.clearAllMocks();
});
});
@@ -237,7 +232,6 @@ describe('NodeViewModal', () => {
expect(WorkflowJobTemplatesAPI.readLaunch).not.toHaveBeenCalled();
expect(JobTemplatesAPI.readLaunch).not.toHaveBeenCalled();
expect(JobTemplatesAPI.readInstanceGroups).not.toHaveBeenCalled();
- wrapper.unmount();
jest.clearAllMocks();
});
});
@@ -271,7 +265,6 @@ describe('NodeViewModal', () => {
expect(WorkflowJobTemplatesAPI.readLaunch).not.toHaveBeenCalled();
expect(JobTemplatesAPI.readLaunch).not.toHaveBeenCalled();
expect(JobTemplatesAPI.readInstanceGroups).not.toHaveBeenCalled();
- wrapper.unmount();
jest.clearAllMocks();
});
});
@@ -305,7 +298,6 @@ describe('NodeViewModal', () => {
expect(WorkflowJobTemplatesAPI.readLaunch).not.toHaveBeenCalled();
expect(JobTemplatesAPI.readLaunch).not.toHaveBeenCalled();
expect(JobTemplatesAPI.readInstanceGroups).not.toHaveBeenCalled();
- wrapper.unmount();
jest.clearAllMocks();
});
});
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/RunStep.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/RunStep.test.jsx
index e8ff15780c..2424d819b6 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/RunStep.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/RunStep.test.jsx
@@ -16,10 +16,6 @@ describe('RunStep', () => {
);
});
- afterAll(() => {
- wrapper.unmount();
- });
-
test('Default selected card matches default link type when present', () => {
expect(wrapper.find('#link-type-success').props().isSelected).toBe(true);
expect(wrapper.find('#link-type-failure').props().isSelected).toBe(false);
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/UnsavedChangesModal.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/UnsavedChangesModal.test.jsx
index 5695469ce2..92fe520e06 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/UnsavedChangesModal.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/UnsavedChangesModal.test.jsx
@@ -17,10 +17,6 @@ describe('UnsavedChangesModal', () => {
);
});
- afterAll(() => {
- wrapper.unmount();
- });
-
test('Exit Without Saving button dispatches as expected', () => {
wrapper.find('button#confirm-exit-without-saving').simulate('click');
expect(onExit).toHaveBeenCalled();
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Visualizer.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Visualizer.test.jsx
index 8a93cd116d..0ee9209487 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Visualizer.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Visualizer.test.jsx
@@ -141,7 +141,6 @@ describe('Visualizer', () => {
});
afterAll(() => {
- wrapper.unmount();
delete window.SVGElement.prototype.getBBox;
delete window.SVGElement.prototype.getBoundingClientRect;
delete window.SVGElement.prototype.height;
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerLink.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerLink.test.jsx
index ceb16b6b2d..5a8c90ef5d 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerLink.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerLink.test.jsx
@@ -62,9 +62,6 @@ describe('VisualizerLink', () => {
);
});
- afterAll(() => {
- wrapper.unmount();
- });
test('Displays action tooltip on hover and updates help text on hover', () => {
expect(wrapper.find('WorkflowActionTooltip').length).toBe(0);
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerNode.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerNode.test.jsx
index 184b56373b..7a47356557 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerNode.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerNode.test.jsx
@@ -73,12 +73,11 @@ describe('VisualizerNode', () => {
afterEach(() => {
jest.clearAllMocks();
});
- afterAll(() => {
- wrapper.unmount();
- });
+
test('Displays unified job template name inside node', () => {
expect(wrapper.find('NodeResourceName').text()).toBe('Automation JT');
});
+
test('Displays action tooltip on hover and updates help text on hover', () => {
expect(wrapper.find('WorkflowActionTooltip').length).toBe(0);
wrapper.find('g').simulate('mouseenter');
@@ -234,9 +233,7 @@ describe('VisualizerNode', () => {
);
});
- afterAll(() => {
- wrapper.unmount();
- });
+
test('Displays correct help text when hovering over node while adding link', () => {
expect(wrapper.find('WorkflowActionTooltip').length).toBe(0);
wrapper.find('g').simulate('mouseenter');
@@ -248,6 +245,7 @@ describe('VisualizerNode', () => {
expect(wrapper.find('WorkflowActionTooltip').length).toBe(0);
expect(updateHelpText).toHaveBeenCalledWith(null);
});
+
test('Dispatches properly when node is clicked', () => {
wrapper
.find('foreignObject')
@@ -259,6 +257,7 @@ describe('VisualizerNode', () => {
});
});
});
+
describe('Node without unified job template', () => {
test('Displays DELETED text inside node when unified job template is missing', () => {
const wrapper = mountWithContexts(
@@ -279,6 +278,7 @@ describe('VisualizerNode', () => {
expect(wrapper.find('NodeResourceName').text()).toBe('DELETED');
});
});
+
describe('Node without full unified job template', () => {
let wrapper;
beforeEach(() => {
@@ -336,9 +336,7 @@ describe('VisualizerNode', () => {
);
});
- afterEach(() => {
- wrapper.unmount();
- });
+
test('Attempts to fetch full unified job template on view', async () => {
wrapper.find('g').simulate('mouseenter');
await act(async () => {
@@ -348,6 +346,7 @@ describe('VisualizerNode', () => {
});
expect(JobTemplatesAPI.readDetail).toHaveBeenCalledWith(7);
});
+
test('Displays error fetching full unified job template', async () => {
JobTemplatesAPI.readDetail.mockRejectedValueOnce(
new Error({
@@ -371,6 +370,7 @@ describe('VisualizerNode', () => {
wrapper.update();
expect(wrapper.find('AlertModal').length).toBe(1);
});
+
test('Attempts to fetch credentials on view', async () => {
JobTemplatesAPI.readDetail.mockResolvedValueOnce({
data: {
diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerToolbar.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerToolbar.test.jsx
index 3a6035eff1..aa55c4c6f3 100644
--- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerToolbar.test.jsx
+++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/VisualizerToolbar.test.jsx
@@ -54,10 +54,6 @@ describe('VisualizerToolbar', () => {
);
});
- afterAll(() => {
- wrapper.unmount();
- });
-
test('Shows correct number of nodes', () => {
// The start node (id=1) and deleted nodes (isDeleted=true) should be ignored
expect(wrapper.find('Badge').text()).toBe('1');
diff --git a/awx/ui_next/src/screens/User/UserList/UserListItem.test.jsx b/awx/ui_next/src/screens/User/UserList/UserListItem.test.jsx
index d41104b1dc..5bc6b4d7ac 100644
--- a/awx/ui_next/src/screens/User/UserList/UserListItem.test.jsx
+++ b/awx/ui_next/src/screens/User/UserList/UserListItem.test.jsx
@@ -16,10 +16,6 @@ i18n.activate('en');
let wrapper;
-afterEach(() => {
- wrapper.unmount();
-});
-
describe('UserListItem with full permissions', () => {
beforeEach(() => {
wrapper = mountWithContexts(
@@ -39,9 +35,11 @@ describe('UserListItem with full permissions', () => {
);
});
+
test('initially renders successfully', () => {
expect(wrapper.length).toBe(1);
});
+
test('edit button shown to users with edit capabilities', () => {
expect(wrapper.find('PencilAltIcon').exists()).toBeTruthy();
});
diff --git a/awx/ui_next/src/screens/User/UserRoles/UserRolesList.test.jsx b/awx/ui_next/src/screens/User/UserRoles/UserRolesList.test.jsx
index a4e11c93f9..367ded2bb0 100644
--- a/awx/ui_next/src/screens/User/UserRoles/UserRolesList.test.jsx
+++ b/awx/ui_next/src/screens/User/UserRoles/UserRolesList.test.jsx
@@ -94,6 +94,7 @@ const roles = {
};
describe('', () => {
+ let wrapper;
beforeEach(() => {
UsersAPI.readOptions.mockResolvedValue({
data: {
@@ -102,11 +103,11 @@ describe('', () => {
},
});
});
- let wrapper;
+
afterEach(() => {
jest.clearAllMocks();
- wrapper.unmount();
});
+
test('should render properly', async () => {
UsersAPI.readRoles.mockResolvedValue(roles);
diff --git a/awx/ui_next/src/screens/User/UserTeams/UserTeamList.test.jsx b/awx/ui_next/src/screens/User/UserTeams/UserTeamList.test.jsx
index 5d17e6e7ee..b1b385e4ad 100644
--- a/awx/ui_next/src/screens/User/UserTeams/UserTeamList.test.jsx
+++ b/awx/ui_next/src/screens/User/UserTeams/UserTeamList.test.jsx
@@ -118,7 +118,6 @@ describe('', () => {
afterEach(() => {
jest.clearAllMocks();
- wrapper.unmount();
});
test('should load and render teams', async () => {
diff --git a/awx/ui_next/src/screens/User/UserTokenAdd/UserTokenAdd.test.jsx b/awx/ui_next/src/screens/User/UserTokenAdd/UserTokenAdd.test.jsx
index b74d2712c1..c003b059fd 100644
--- a/awx/ui_next/src/screens/User/UserTokenAdd/UserTokenAdd.test.jsx
+++ b/awx/ui_next/src/screens/User/UserTokenAdd/UserTokenAdd.test.jsx
@@ -22,9 +22,9 @@ const onSuccessfulAdd = jest.fn();
describe('', () => {
afterEach(() => {
- wrapper.unmount();
jest.clearAllMocks();
});
+
test('handleSubmit should post to api', async () => {
await act(async () => {
wrapper = mountWithContexts(
diff --git a/awx/ui_next/src/screens/User/UserTokens/UserTokens.test.jsx b/awx/ui_next/src/screens/User/UserTokens/UserTokens.test.jsx
index 7a66eadca7..16017a5aa5 100644
--- a/awx/ui_next/src/screens/User/UserTokens/UserTokens.test.jsx
+++ b/awx/ui_next/src/screens/User/UserTokens/UserTokens.test.jsx
@@ -8,10 +8,6 @@ import UserTokens from './UserTokens';
describe('', () => {
let wrapper;
- afterEach(() => {
- wrapper.unmount();
- });
-
test('renders successfully', () => {
wrapper = mountWithContexts();
expect(wrapper.length).toBe(1);
diff --git a/awx/ui_next/src/screens/User/Users.test.jsx b/awx/ui_next/src/screens/User/Users.test.jsx
index 146599b762..605aa9b797 100644
--- a/awx/ui_next/src/screens/User/Users.test.jsx
+++ b/awx/ui_next/src/screens/User/Users.test.jsx
@@ -1,38 +1,23 @@
import React from 'react';
-import { createMemoryHistory } from 'history';
-
-import { mountWithContexts } from '../../../testUtils/enzymeHelpers';
-
+import { shallow } from 'enzyme';
import Users from './Users';
jest.mock('react-router-dom', () => ({
...jest.requireActual('react-router-dom'),
+ useRouteMatch: () => ({
+ path: 'users',
+ }),
}));
describe('', () => {
- test('initially renders successfully', () => {
- const wrapper = mountWithContexts();
- wrapper.unmount();
- });
+ test('should set breadcrumbs', () => {
+ const wrapper = shallow();
- test('should display a breadcrumb heading', () => {
- const history = createMemoryHistory({
- initialEntries: ['/users'],
+ const header = wrapper.find('ScreenHeader');
+ expect(header.prop('streamType')).toBe('user');
+ expect(header.prop('breadcrumbConfig')).toEqual({
+ '/users': 'Users',
+ '/users/add': 'Create New User',
});
- const match = { path: '/users', url: '/users', isExact: true };
-
- const wrapper = mountWithContexts(, {
- context: {
- router: {
- history,
- route: {
- location: history.location,
- match,
- },
- },
- },
- });
- expect(wrapper.find('Title').length).toBe(1);
- wrapper.unmount();
});
});
diff --git a/awx/ui_next/src/screens/User/shared/UserForm.test.jsx b/awx/ui_next/src/screens/User/shared/UserForm.test.jsx
index 69c777bc5b..6e327290a9 100644
--- a/awx/ui_next/src/screens/User/shared/UserForm.test.jsx
+++ b/awx/ui_next/src/screens/User/shared/UserForm.test.jsx
@@ -27,7 +27,6 @@ describe('', () => {
});
afterEach(() => {
- wrapper.unmount();
jest.clearAllMocks();
});
diff --git a/awx/ui_next/src/screens/User/shared/UserTokenForm.test.jsx b/awx/ui_next/src/screens/User/shared/UserTokenForm.test.jsx
index ddfcbd6cb4..9e6f2df703 100644
--- a/awx/ui_next/src/screens/User/shared/UserTokenForm.test.jsx
+++ b/awx/ui_next/src/screens/User/shared/UserTokenForm.test.jsx
@@ -28,9 +28,7 @@ const applications = {
};
describe('', () => {
let wrapper;
- beforeEach(() => {});
afterEach(() => {
- wrapper.unmount();
jest.clearAllMocks();
});
diff --git a/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalList.test.jsx b/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalList.test.jsx
index 78a299d1ad..0358252713 100644
--- a/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalList.test.jsx
+++ b/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalList.test.jsx
@@ -29,7 +29,6 @@ describe('', () => {
});
afterEach(() => {
- wrapper.unmount();
jest.clearAllMocks();
});
diff --git a/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalListItem.test.jsx b/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalListItem.test.jsx
index e64db9f3cc..06a0f18600 100644
--- a/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalListItem.test.jsx
+++ b/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovalList/WorkflowApprovalListItem.test.jsx
@@ -9,9 +9,6 @@ jest.mock('../../../api/models/WorkflowApprovals');
describe('', () => {
let wrapper;
- afterEach(() => {
- wrapper.unmount();
- });
test('should display never expires status', () => {
wrapper = mountWithContexts(
@@ -28,6 +25,7 @@ describe('', () => {
);
expect(wrapper.find('Label[children="Never expires"]').length).toBe(1);
});
+
test('should display timed out status', () => {
wrapper = mountWithContexts(
@@ -47,6 +45,7 @@ describe('', () => {
);
expect(wrapper.find('Label[children="Timed out"]').length).toBe(1);
});
+
test('should display canceled status', () => {
wrapper = mountWithContexts(
@@ -66,6 +65,7 @@ describe('', () => {
);
expect(wrapper.find('Label[children="Canceled"]').length).toBe(1);
});
+
test('should display approved status', () => {
wrapper = mountWithContexts(
@@ -93,6 +93,7 @@ describe('', () => {
);
expect(wrapper.find('Label[children="Approved"]').length).toBe(1);
});
+
test('should display denied status', () => {
wrapper = mountWithContexts(
diff --git a/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovals.test.jsx b/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovals.test.jsx
index 4e7d81b18f..05b1bf08b2 100644
--- a/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovals.test.jsx
+++ b/awx/ui_next/src/screens/WorkflowApproval/WorkflowApprovals.test.jsx
@@ -11,10 +11,6 @@ import mockWorkflowApprovals from './data.workflowApprovals.json';
jest.mock('../../api');
-jest.mock('react-router-dom', () => ({
- ...jest.requireActual('react-router-dom'),
-}));
-
describe('', () => {
beforeEach(() => {
WorkflowApprovalsAPI.read.mockResolvedValue({
@@ -70,6 +66,5 @@ describe('', () => {
await waitForElement(wrapper, 'ContentLoading', el => el.length === 0);
expect(wrapper.find('Title').length).toBe(1);
- wrapper.unmount();
});
});
diff --git a/awx/ui_next/src/screens/WorkflowApproval/shared/WorkflowApprovalStatus.test.jsx b/awx/ui_next/src/screens/WorkflowApproval/shared/WorkflowApprovalStatus.test.jsx
index 41d4965d26..e28ff7638b 100644
--- a/awx/ui_next/src/screens/WorkflowApproval/shared/WorkflowApprovalStatus.test.jsx
+++ b/awx/ui_next/src/screens/WorkflowApproval/shared/WorkflowApprovalStatus.test.jsx
@@ -8,15 +8,14 @@ const workflowApproval = mockWorkflowApprovals.results[0];
describe('', () => {
let wrapper;
- afterEach(() => {
- wrapper.unmount();
- });
+
test('shows no expiration when approval status is pending and no approval_expiration', () => {
wrapper = mountWithContexts(
);
expect(wrapper.text()).toBe('Never expires');
});
+
test('shows expiration date/time when approval status is pending and approval_expiration present', () => {
wrapper = mountWithContexts(
', () => {
`Expires on ${formatDateString('2020-10-10T17:13:12.067947Z')}`
);
});
+
test('shows when an approval has timed out', () => {
wrapper = mountWithContexts(
', () => {
);
expect(wrapper.find('Label').text()).toBe('Timed out');
});
+
test('shows when an approval has canceled', () => {
wrapper = mountWithContexts(
', () => {
);
expect(wrapper.find('Label').text()).toBe('Canceled');
});
+
test('shows when an approval has approved', () => {
wrapper = mountWithContexts(
', () => {
);
expect(wrapper.find('Label').text()).toBe('Approved');
});
+
test('shows when an approval has denied', () => {
wrapper = mountWithContexts(