diff --git a/awx/ui_next/src/screens/Project/shared/ProjectForm.test.jsx b/awx/ui_next/src/screens/Project/shared/ProjectForm.test.jsx index a7680921f2..e2d82c6653 100644 --- a/awx/ui_next/src/screens/Project/shared/ProjectForm.test.jsx +++ b/awx/ui_next/src/screens/Project/shared/ProjectForm.test.jsx @@ -288,8 +288,6 @@ describe('', () => { }); await waitForElement(wrapper, 'ContentLoading', el => el.length === 0); - console.log(wrapper.debug()); - const scmTypeSelect = wrapper.find( 'FormGroup[label="Source Control Credential Type"] FormSelect' ); diff --git a/awx/ui_next/src/screens/Template/JobTemplateEdit/JobTemplateEdit.test.jsx b/awx/ui_next/src/screens/Template/JobTemplateEdit/JobTemplateEdit.test.jsx index fef5d89920..8c296b0630 100644 --- a/awx/ui_next/src/screens/Template/JobTemplateEdit/JobTemplateEdit.test.jsx +++ b/awx/ui_next/src/screens/Template/JobTemplateEdit/JobTemplateEdit.test.jsx @@ -35,7 +35,7 @@ const mockJobTemplate = { limit: '', name: 'Foo', playbook: 'Baz', - project: { id: 3, summary_fields: { organization: { id: 1 } } }, + project: 3, scm_branch: '', skip_tags: '', summary_fields: { diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplate.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplate.jsx index f07f51db12..98de6a9432 100644 --- a/awx/ui_next/src/screens/Template/WorkflowJobTemplate.jsx +++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplate.jsx @@ -32,7 +32,6 @@ class WorkflowJobTemplate extends Component { contentError: null, hasContentLoading: true, template: null, - webhook_key: null, isNotifAdmin: false, }; this.createSchedule = this.createSchedule.bind(this); @@ -59,11 +58,9 @@ class WorkflowJobTemplate extends Component { this.setState({ contentError: null }); try { const { data } = await WorkflowJobTemplatesAPI.readDetail(id); + let webhookKey; if (data?.related?.webhook_key) { - const { - data: { webhook_key }, - } = await WorkflowJobTemplatesAPI.readWebhookKey(id); - this.setState({ webhook_key }); + webhookKey = await WorkflowJobTemplatesAPI.readWebhookKey(id); } if (data?.summary_fields?.webhook_credential) { const { @@ -83,7 +80,7 @@ class WorkflowJobTemplate extends Component { }); setBreadcrumb(data); this.setState({ - template: data, + template: { ...data, webhook_key: webhookKey.data.webhook_key }, isNotifAdmin: notifAdminRes.data.results.length > 0, }); } catch (err) { @@ -114,7 +111,6 @@ class WorkflowJobTemplate extends Component { contentError, hasContentLoading, template, - webhook_key, isNotifAdmin, } = this.state; @@ -211,10 +207,7 @@ class WorkflowJobTemplate extends Component { key="wfjt-details" path="/templates/workflow_job_template/:id/details" > - + )} {template && ( @@ -239,10 +232,7 @@ class WorkflowJobTemplate extends Component { key="wfjt-edit" path="/templates/workflow_job_template/:id/edit" > - + )} {template && ( diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateAdd/WorkflowJobTemplateAdd.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateAdd/WorkflowJobTemplateAdd.jsx index f69349bb70..6bfa3d3707 100644 --- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateAdd/WorkflowJobTemplateAdd.jsx +++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateAdd/WorkflowJobTemplateAdd.jsx @@ -17,18 +17,18 @@ function WorkflowJobTemplateAdd() { inventory, organization, webhook_credential, - webhookKey, - ...remainingValues + webhook_key, + ...templatePayload } = values; - remainingValues.inventory = inventory?.id; - remainingValues.organization = organization?.id; - remainingValues.webhook_credential = webhook_credential?.id; + templatePayload.inventory = inventory?.id; + templatePayload.organization = organization?.id; + templatePayload.webhook_credential = webhook_credential?.id; const organizationId = - organization?.id || inventory?.summary_fields?.organization.id || null; + organization?.id || inventory?.summary_fields?.organization.id; try { const { data: { id }, - } = await WorkflowJobTemplatesAPI.create(remainingValues); + } = await WorkflowJobTemplatesAPI.create(templatePayload); await Promise.all(await submitLabels(id, labels, organizationId)); history.push(`/templates/workflow_job_template/${id}/details`); } catch (err) { diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateAdd/WorkflowJobTemplateAdd.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateAdd/WorkflowJobTemplateAdd.test.jsx index c76b71a4f1..ab390f4fcd 100644 --- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateAdd/WorkflowJobTemplateAdd.test.jsx +++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateAdd/WorkflowJobTemplateAdd.test.jsx @@ -85,8 +85,7 @@ describe('', () => { act(() => { wrapper .find('SelectOption') - .find('button') - .at(2) + .find('button[aria-label="Label 3"]') .prop('onClick')(); }); diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateDetail/WorkflowJobTemplateDetail.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateDetail/WorkflowJobTemplateDetail.jsx index cb0b91ecd0..93aa40a212 100644 --- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateDetail/WorkflowJobTemplateDetail.jsx +++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateDetail/WorkflowJobTemplateDetail.jsx @@ -25,7 +25,7 @@ import LaunchButton from '@components/LaunchButton'; import Sparkline from '@components/Sparkline'; import { toTitleCase } from '@util/strings'; -function WorkflowJobTemplateDetail({ template, i18n, webhook_key }) { +function WorkflowJobTemplateDetail({ template, i18n }) { const { id, ask_inventory_on_launch, @@ -38,6 +38,7 @@ function WorkflowJobTemplateDetail({ template, i18n, webhook_key }) { summary_fields, related, webhook_credential, + webhook_key, } = template; const urlOrigin = window.location.origin; diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateDetail/WorkflowJobTemplateDetail.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateDetail/WorkflowJobTemplateDetail.test.jsx index f693672d20..bfb850c83b 100644 --- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateDetail/WorkflowJobTemplateDetail.test.jsx +++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateDetail/WorkflowJobTemplateDetail.test.jsx @@ -39,6 +39,7 @@ describe('', () => { user_capabilities: { edit: true, delete: true }, }, webhook_service: 'Github', + webhook_key: 'Foo webhook key', }; beforeEach(async () => { @@ -52,7 +53,6 @@ describe('', () => { component={() => ( {}} /> diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateEdit/WorkflowJobTemplateEdit.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateEdit/WorkflowJobTemplateEdit.jsx index 0d0d94b7de..a860589020 100644 --- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateEdit/WorkflowJobTemplateEdit.jsx +++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateEdit/WorkflowJobTemplateEdit.jsx @@ -6,7 +6,7 @@ import { getAddedAndRemoved } from '@util/lists'; import { WorkflowJobTemplatesAPI, OrganizationsAPI } from '@api'; import { WorkflowJobTemplateForm } from '../shared'; -function WorkflowJobTemplateEdit({ template, webhook_key }) { +function WorkflowJobTemplateEdit({ template }) { const history = useHistory(); const [formSubmitError, setFormSubmitError] = useState(null); @@ -16,12 +16,12 @@ function WorkflowJobTemplateEdit({ template, webhook_key }) { inventory, organization, webhook_credential, - webhookKey, - ...remainingValues + webhook_key, + ...templatePayload } = values; - remainingValues.inventory = inventory?.id; - remainingValues.organization = organization?.id; - remainingValues.webhook_credential = webhook_credential?.id || null; + templatePayload.inventory = inventory?.id; + templatePayload.organization = organization?.id; + templatePayload.webhook_credential = webhook_credential?.id || null; const formOrgId = organization?.id || inventory?.summary_fields?.organization.id || null; @@ -29,7 +29,7 @@ function WorkflowJobTemplateEdit({ template, webhook_key }) { await Promise.all( await submitLabels(labels, formOrgId, template.organization) ); - await WorkflowJobTemplatesAPI.update(template.id, remainingValues); + await WorkflowJobTemplatesAPI.update(template.id, templatePayload); history.push(`/templates/workflow_job_template/${template.id}/details`); } catch (err) { setFormSubmitError(err); @@ -73,7 +73,6 @@ function WorkflowJobTemplateEdit({ template, webhook_key }) { handleSubmit={handleSubmit} handleCancel={handleCancel} template={template} - webhookKey={webhook_key} submitError={formSubmitError} /> diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateEdit/WorkflowJobTemplateEdit.test.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateEdit/WorkflowJobTemplateEdit.test.jsx index 9acf279c1e..6b2c7be5aa 100644 --- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateEdit/WorkflowJobTemplateEdit.test.jsx +++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateEdit/WorkflowJobTemplateEdit.test.jsx @@ -100,8 +100,7 @@ describe('', () => { act(() => { wrapper .find('SelectOption') - .find('button') - .at(2) + .find('button[aria-label="Label 3"]') .prop('onClick')(); }); @@ -110,8 +109,7 @@ describe('', () => { act(() => wrapper .find('SelectOption') - .find('button') - .at(0) + .find('button[aria-label="Label 1"]') .prop('onClick')() ); diff --git a/awx/ui_next/src/screens/Template/shared/JobTemplateForm.test.jsx b/awx/ui_next/src/screens/Template/shared/JobTemplateForm.test.jsx index 47b9f6b436..383bef39f0 100644 --- a/awx/ui_next/src/screens/Template/shared/JobTemplateForm.test.jsx +++ b/awx/ui_next/src/screens/Template/shared/JobTemplateForm.test.jsx @@ -14,7 +14,7 @@ describe('', () => { description: 'Bar', job_type: 'run', inventory: 2, - project: { id: 3, summary_fields: { organization: { id: 1 } } }, + project: 3, playbook: 'Baz', type: 'job_template', scm_branch: 'Foo', diff --git a/awx/ui_next/src/screens/Template/shared/LabelSelect.jsx b/awx/ui_next/src/screens/Template/shared/LabelSelect.jsx index 72863cd5f5..a00e90073e 100644 --- a/awx/ui_next/src/screens/Template/shared/LabelSelect.jsx +++ b/awx/ui_next/src/screens/Template/shared/LabelSelect.jsx @@ -47,7 +47,7 @@ function LabelSelect({ value, placeholder, onChange, onError }) { const renderOptions = opts => { return opts.map(option => ( - + {option.name} )); diff --git a/awx/ui_next/src/screens/Template/shared/WorkflowJobTemplateForm.jsx b/awx/ui_next/src/screens/Template/shared/WorkflowJobTemplateForm.jsx index 673bce96cb..2ae30ffed3 100644 --- a/awx/ui_next/src/screens/Template/shared/WorkflowJobTemplateForm.jsx +++ b/awx/ui_next/src/screens/Template/shared/WorkflowJobTemplateForm.jsx @@ -1,6 +1,6 @@ import React, { useState, useEffect, useCallback } from 'react'; import { t } from '@lingui/macro'; -import { useRouteMatch, useParams, withRouter } from 'react-router-dom'; +import { useRouteMatch, useParams } from 'react-router-dom'; import PropTypes, { shape } from 'prop-types'; @@ -67,7 +67,7 @@ function WorkflowJobTemplateForm({ ] = useField('webhook_service'); const [webhookKeyField, webhookKeyMeta, webhookKeyHelpers] = useField( - 'webhookKey' + 'webhook_key' ); const [hasWebhooks, setHasWebhooks] = useState( @@ -339,7 +339,7 @@ function WorkflowJobTemplateForm({ fieldId="wfjt-webhook-key" type="text" id="wfjt-webhook-key" - name="webhookKey" + name="webhook_key" label={i18n._(t`Webhook Key`)} > { @@ -430,4 +430,4 @@ const FormikApp = withFormik({ })(WorkflowJobTemplateForm); export { WorkflowJobTemplateForm as _WorkflowJobTemplateForm }; -export default withI18n()(withRouter(FormikApp)); +export default withI18n()(FormikApp); diff --git a/awx/ui_next/src/screens/Template/shared/WorkflowJobTemplateForm.test.jsx b/awx/ui_next/src/screens/Template/shared/WorkflowJobTemplateForm.test.jsx index f123abe91b..02f721f8a6 100644 --- a/awx/ui_next/src/screens/Template/shared/WorkflowJobTemplateForm.test.jsx +++ b/awx/ui_next/src/screens/Template/shared/WorkflowJobTemplateForm.test.jsx @@ -40,6 +40,7 @@ describe('', () => { related: { webhook_receiver: '/api/v2/workflow_job_templates/57/gitlab/', }, + webhook_key: 'sdfghjklmnbvcdsew435678iokjhgfd', }; beforeEach(async () => { @@ -74,7 +75,6 @@ describe('', () => { template={mockTemplate} handleCancel={handleCancel} handleSubmit={handleSubmit} - webhookKey="sdfghjklmnbvcdsew435678iokjhgfd" /> )} />, @@ -172,7 +172,7 @@ describe('', () => { test('webhooks and enable concurrent jobs functions properly', async () => { act(() => { - wrapper.find('Checkbox[aria-label="Enable Webhooks"]').invoke('onChange')( + wrapper.find('Checkbox[aria-label="Enable Webhook"]').invoke('onChange')( true, { currentTarget: { value: true, type: 'change', checked: true }, @@ -181,7 +181,7 @@ describe('', () => { }); wrapper.update(); expect( - wrapper.find('Checkbox[aria-label="Enable Webhooks"]').prop('isChecked') + wrapper.find('Checkbox[aria-label="Enable Webhook"]').prop('isChecked') ).toBe(true); expect( @@ -192,7 +192,7 @@ describe('', () => { ).toBe('sdfghjklmnbvcdsew435678iokjhgfd'); await act(() => wrapper - .find('FormGroup[name="webhookKey"]') + .find('FormGroup[name="webhook_key"]') .find('Button[variant="tertiary"]') .prop('onClick')() );