diff --git a/awx/ui/src/screens/WorkflowApproval/WorkflowApprovalDetail/WorkflowApprovalDetail.js b/awx/ui/src/screens/WorkflowApproval/WorkflowApprovalDetail/WorkflowApprovalDetail.js
index be2987221f..90ae47c044 100644
--- a/awx/ui/src/screens/WorkflowApproval/WorkflowApprovalDetail/WorkflowApprovalDetail.js
+++ b/awx/ui/src/screens/WorkflowApproval/WorkflowApprovalDetail/WorkflowApprovalDetail.js
@@ -17,11 +17,7 @@ import { CardBody, CardActionsRow } from 'components/Card';
import { Detail, DetailList, UserDateDetail } from 'components/DetailList';
import { VariablesDetail } from 'components/CodeEditor';
import { formatDateString, secondsToHHMMSS } from 'util/dates';
-import {
- WorkflowApprovalsAPI,
- WorkflowJobTemplatesAPI,
- WorkflowJobsAPI,
-} from 'api';
+import { WorkflowApprovalsAPI, WorkflowJobsAPI } from 'api';
import useRequest, { useDismissableError } from 'hooks/useRequest';
import { WorkflowApproval } from 'types';
import StatusLabel from 'components/StatusLabel';
@@ -67,8 +63,10 @@ function WorkflowApprovalDetail({ workflowApproval, fetchWorkflowApproval }) {
const { error: deleteError, dismissError: dismissDeleteError } =
useDismissableError(deleteApprovalError);
- const workflowJobTemplateId =
- workflowApproval.summary_fields.workflow_job_template.id;
+ const sourceWorkflowJob =
+ workflowApproval?.summary_fields?.source_workflow_job;
+ const sourceWorkflowJobTemplate =
+ workflowApproval?.summary_fields?.workflow_job_template;
const {
error: fetchWorkflowJobError,
@@ -77,23 +75,10 @@ function WorkflowApprovalDetail({ workflowApproval, fetchWorkflowApproval }) {
result: workflowJob,
} = useRequest(
useCallback(async () => {
- if (!workflowJobTemplateId) {
- return {};
- }
- const { data: workflowJobTemplate } =
- await WorkflowJobTemplatesAPI.readDetail(workflowJobTemplateId);
-
- let jobId = null;
-
- if (workflowJobTemplate.summary_fields?.current_job) {
- jobId = workflowJobTemplate.summary_fields.current_job.id;
- } else if (workflowJobTemplate.summary_fields?.last_job) {
- jobId = workflowJobTemplate.summary_fields.last_job.id;
- }
- const { data } = await WorkflowJobsAPI.readDetail(jobId);
-
+ if (!sourceWorkflowJob?.id) return {};
+ const { data } = await WorkflowJobsAPI.readDetail(sourceWorkflowJob?.id);
return data;
- }, [workflowJobTemplateId]),
+ }, [sourceWorkflowJob?.id]),
{
workflowJob: null,
isLoading: true,
@@ -116,11 +101,6 @@ function WorkflowApprovalDetail({ workflowApproval, fetchWorkflowApproval }) {
},
[addToast, fetchWorkflowApproval]
);
- const sourceWorkflowJob =
- workflowApproval?.summary_fields?.source_workflow_job;
-
- const sourceWorkflowJobTemplate =
- workflowApproval?.summary_fields?.workflow_job_template;
const isLoading = isDeleteLoading || isLoadingWorkflowJob;
diff --git a/awx/ui/src/screens/WorkflowApproval/WorkflowApprovalDetail/WorkflowApprovalDetail.test.js b/awx/ui/src/screens/WorkflowApproval/WorkflowApprovalDetail/WorkflowApprovalDetail.test.js
index 49aebfe5ec..cead4ea88c 100644
--- a/awx/ui/src/screens/WorkflowApproval/WorkflowApprovalDetail/WorkflowApprovalDetail.test.js
+++ b/awx/ui/src/screens/WorkflowApproval/WorkflowApprovalDetail/WorkflowApprovalDetail.test.js
@@ -1,10 +1,6 @@
import React from 'react';
import { act } from 'react-dom/test-utils';
-import {
- WorkflowApprovalsAPI,
- WorkflowJobTemplatesAPI,
- WorkflowJobsAPI,
-} from 'api';
+import { WorkflowApprovalsAPI, WorkflowJobsAPI } from 'api';
import { formatDateString } from 'util/dates';
import {
mountWithContexts,
@@ -23,146 +19,6 @@ jest.mock('react-router-dom', () => ({
}),
}));
-const workflowJobTemplate = {
- id: 8,
- type: 'workflow_job_template',
- url: '/api/v2/workflow_job_templates/8/',
- related: {
- named_url: '/api/v2/workflow_job_templates/00++/',
- created_by: '/api/v2/users/1/',
- modified_by: '/api/v2/users/1/',
- last_job: '/api/v2/workflow_jobs/111/',
- workflow_jobs: '/api/v2/workflow_job_templates/8/workflow_jobs/',
- schedules: '/api/v2/workflow_job_templates/8/schedules/',
- launch: '/api/v2/workflow_job_templates/8/launch/',
- webhook_key: '/api/v2/workflow_job_templates/8/webhook_key/',
- webhook_receiver: '/api/v2/workflow_job_templates/8/github/',
- workflow_nodes: '/api/v2/workflow_job_templates/8/workflow_nodes/',
- labels: '/api/v2/workflow_job_templates/8/labels/',
- activity_stream: '/api/v2/workflow_job_templates/8/activity_stream/',
- notification_templates_started:
- '/api/v2/workflow_job_templates/8/notification_templates_started/',
- notification_templates_success:
- '/api/v2/workflow_job_templates/8/notification_templates_success/',
- notification_templates_error:
- '/api/v2/workflow_job_templates/8/notification_templates_error/',
- notification_templates_approvals:
- '/api/v2/workflow_job_templates/8/notification_templates_approvals/',
- access_list: '/api/v2/workflow_job_templates/8/access_list/',
- object_roles: '/api/v2/workflow_job_templates/8/object_roles/',
- survey_spec: '/api/v2/workflow_job_templates/8/survey_spec/',
- copy: '/api/v2/workflow_job_templates/8/copy/',
- },
- summary_fields: {
- last_job: {
- id: 111,
- name: '00',
- description: '',
- finished: '2022-05-10T17:29:52.978531Z',
- status: 'successful',
- failed: false,
- },
- last_update: {
- id: 111,
- name: '00',
- description: '',
- status: 'successful',
- failed: false,
- },
- created_by: {
- id: 1,
- username: 'admin',
- first_name: '',
- last_name: '',
- },
- modified_by: {
- id: 1,
- username: 'admin',
- first_name: '',
- last_name: '',
- },
- object_roles: {
- admin_role: {
- description: 'Can manage all aspects of the workflow job template',
- name: 'Admin',
- id: 34,
- },
- execute_role: {
- description: 'May run the workflow job template',
- name: 'Execute',
- id: 35,
- },
- read_role: {
- description: 'May view settings for the workflow job template',
- name: 'Read',
- id: 36,
- },
- approval_role: {
- description: 'Can approve or deny a workflow approval node',
- name: 'Approve',
- id: 37,
- },
- },
- user_capabilities: {
- edit: true,
- delete: true,
- start: true,
- schedule: true,
- copy: true,
- },
- labels: {
- count: 1,
- results: [
- {
- id: 2,
- name: 'Test2',
- },
- ],
- },
- survey: {
- title: '',
- description: '',
- },
- recent_jobs: [
- {
- id: 111,
- status: 'successful',
- finished: '2022-05-10T17:29:52.978531Z',
- canceled_on: null,
- type: 'workflow_job',
- },
- {
- id: 104,
- status: 'failed',
- finished: '2022-05-10T15:26:22.233170Z',
- canceled_on: null,
- type: 'workflow_job',
- },
- ],
- },
- created: '2022-05-05T14:13:36.123027Z',
- modified: '2022-05-05T17:44:44.071447Z',
- name: '00',
- description: '',
- last_job_run: '2022-05-10T17:29:52.978531Z',
- last_job_failed: false,
- next_job_run: null,
- status: 'successful',
- extra_vars: '{\n "foo": "bar",\n "baz": "qux"\n}',
- organization: null,
- survey_enabled: true,
- allow_simultaneous: true,
- ask_variables_on_launch: true,
- inventory: null,
- limit: null,
- scm_branch: '',
- ask_inventory_on_launch: true,
- ask_scm_branch_on_launch: true,
- ask_limit_on_launch: true,
- webhook_service: 'github',
- webhook_credential: null,
-};
-
const workflowJob = {
id: 111,
type: 'workflow_job',
@@ -270,9 +126,6 @@ const workflowJob = {
describe('', () => {
beforeEach(() => {
- WorkflowJobTemplatesAPI.readDetail.mockResolvedValue({
- data: workflowJobTemplate,
- });
WorkflowJobsAPI.readDetail.mockResolvedValue({ data: workflowJob });
});
@@ -482,9 +335,6 @@ describe('', () => {
});
test('should not load Labels', async () => {
- WorkflowJobTemplatesAPI.readDetail.mockResolvedValue({
- data: workflowJobTemplate,
- });
WorkflowJobsAPI.readDetail.mockResolvedValue({
data: {
...workflowApproval,
@@ -621,4 +471,16 @@ describe('', () => {
(el) => el.length === 0
);
});
+
+ test('should fetch its workflow job details', async () => {
+ let wrapper;
+ await act(async () => {
+ wrapper = mountWithContexts(
+
+ );
+ });
+ waitForElement(wrapper, 'WorkflowApprovalDetail', (el) => el.length > 0);
+ expect(WorkflowJobsAPI.readDetail).toHaveBeenCalledTimes(1);
+ expect(WorkflowJobsAPI.readDetail).toHaveBeenCalledWith(216);
+ });
});