diff --git a/awx/ui_next/src/screens/Template/JobTemplateDetail/JobTemplateDetail.jsx b/awx/ui_next/src/screens/Template/JobTemplateDetail/JobTemplateDetail.jsx
index 303e82a5c6..28bdcec16f 100644
--- a/awx/ui_next/src/screens/Template/JobTemplateDetail/JobTemplateDetail.jsx
+++ b/awx/ui_next/src/screens/Template/JobTemplateDetail/JobTemplateDetail.jsx
@@ -9,6 +9,7 @@ import {
TextListItem,
TextListItemVariants,
TextListVariants,
+ Label,
} from '@patternfly/react-core';
import { t } from '@lingui/macro';
@@ -53,6 +54,9 @@ function JobTemplateDetail({ i18n, template }) {
use_fact_cache,
url,
verbosity,
+ webhook_service,
+ related: { webhook_receiver },
+ webhook_key,
} = template;
const [contentError, setContentError] = useState(null);
const [deletionError, setDeletionError] = useState(null);
@@ -240,6 +244,35 @@ function JobTemplateDetail({ i18n, template }) {
/>
)}
+ {webhook_service && (
+
+ )}
+ {webhook_receiver && (
+
+ )}
+
+ {summary_fields.webhook_credential && (
+
+
+
+ }
+ />
+ )}
{renderOptionsField && (
)}
diff --git a/awx/ui_next/src/screens/Template/JobTemplateDetail/JobTemplateDetail.test.jsx b/awx/ui_next/src/screens/Template/JobTemplateDetail/JobTemplateDetail.test.jsx
index 4ba33ac5c0..8e382f8adc 100644
--- a/awx/ui_next/src/screens/Template/JobTemplateDetail/JobTemplateDetail.test.jsx
+++ b/awx/ui_next/src/screens/Template/JobTemplateDetail/JobTemplateDetail.test.jsx
@@ -30,7 +30,6 @@ describe('', () => {
afterEach(() => {
jest.clearAllMocks();
});
-
test('should render successfully with missing summary fields', async () => {
await act(async () => {
wrapper = mountWithContexts(
@@ -138,4 +137,16 @@ describe('', () => {
el => el.length === 0
);
});
+ test('webhook fields should render properly', () => {
+ expect(wrapper.find('Detail[label="Webhook Service"]').length).toBe(1);
+ expect(wrapper.find('Detail[label="Webhook Service"]').prop('value')).toBe(
+ 'GitHub'
+ );
+ expect(wrapper.find('Detail[label="Webhook URL"]').length).toBe(1);
+ expect(wrapper.find('Detail[label="Webhook URL"]').prop('value')).toContain(
+ 'api/v2/job_templates/7/github/'
+ );
+ expect(wrapper.find('Detail[label="Webhook Key"]').length).toBe(1);
+ expect(wrapper.find('Detail[label="Webhook Credential"]').length).toBe(1);
+ });
});
diff --git a/awx/ui_next/src/screens/Template/shared/data.job_template.json b/awx/ui_next/src/screens/Template/shared/data.job_template.json
index 2fc2e460d7..6f1caa3e3f 100644
--- a/awx/ui_next/src/screens/Template/shared/data.job_template.json
+++ b/awx/ui_next/src/screens/Template/shared/data.job_template.json
@@ -1,174 +1,182 @@
{
- "id": 7,
- "type": "job_template",
- "url": "/api/v2/job_templates/7/",
- "related": {
- "named_url": "/api/v2/job_templates/Mike's JT/",
- "created_by": "/api/v2/users/1/",
- "modified_by": "/api/v2/users/1/",
- "labels": "/api/v2/job_templates/7/labels/",
- "inventory": "/api/v2/inventories/1/",
- "project": "/api/v2/projects/6/",
- "extra_credentials": "/api/v2/job_templates/7/extra_credentials/",
- "credentials": "/api/v2/job_templates/7/credentials/",
- "last_job": "/api/v2/jobs/12/",
- "jobs": "/api/v2/job_templates/7/jobs/",
- "schedules": "/api/v2/job_templates/7/schedules/",
- "activity_stream": "/api/v2/job_templates/7/activity_stream/",
- "launch": "/api/v2/job_templates/7/launch/",
- "notification_templates_started": "/api/v2/job_templates/7/notification_templates_started/",
- "notification_templates_success": "/api/v2/job_templates/7/notification_templates_success/",
- "notification_templates_error": "/api/v2/job_templates/7/notification_templates_error/",
- "access_list": "/api/v2/job_templates/7/access_list/",
- "survey_spec": "/api/v2/job_templates/7/survey_spec/",
- "object_roles": "/api/v2/job_templates/7/object_roles/",
- "instance_groups": "/api/v2/job_templates/7/instance_groups/",
- "slice_workflow_jobs": "/api/v2/job_templates/7/slice_workflow_jobs/",
- "copy": "/api/v2/job_templates/7/copy/"
- },
- "summary_fields": {
- "inventory": {
- "id": 1,
- "name": "Mike's Inventory",
- "description": "",
- "has_active_failures": false,
- "total_hosts": 1,
- "hosts_with_active_failures": 0,
- "total_groups": 0,
- "groups_with_active_failures": 0,
- "has_inventory_sources": false,
- "total_inventory_sources": 0,
- "inventory_sources_with_failures": 0,
- "organization_id": 1,
- "kind": ""
- },
- "project": {
- "id": 6,
- "name": "Mike's Project",
- "description": "",
- "status": "successful",
- "scm_type": "git"
- },
- "last_job": {
- "id": 12,
- "name": "Mike's JT",
- "description": "",
- "finished": "2019-10-01T14:34:35.142483Z",
- "status": "successful",
- "failed": false
- },
- "last_update": {
- "id": 12,
- "name": "Mike's JT",
- "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 job template",
- "name": "Admin",
- "id": 24
- },
- "execute_role": {
- "description": "May run the job template",
- "name": "Execute",
- "id": 25
- },
- "read_role": {
- "description": "May view settings for the job template",
- "name": "Read",
- "id": 26
- }
- },
- "user_capabilities": {
- "edit": true,
- "delete": true,
- "start": true,
- "schedule": true,
- "copy": true
- },
- "labels": {
- "count": 1,
- "results": [
- {
+ "id": 7,
+ "type": "job_template",
+ "url": "/api/v2/job_templates/7/",
+ "related": {
+ "named_url": "/api/v2/job_templates/Mike's JT/",
+ "created_by": "/api/v2/users/1/",
+ "modified_by": "/api/v2/users/1/",
+ "labels": "/api/v2/job_templates/7/labels/",
+ "inventory": "/api/v2/inventories/1/",
+ "project": "/api/v2/projects/6/",
+ "extra_credentials": "/api/v2/job_templates/7/extra_credentials/",
+ "credentials": "/api/v2/job_templates/7/credentials/",
+ "last_job": "/api/v2/jobs/12/",
+ "jobs": "/api/v2/job_templates/7/jobs/",
+ "schedules": "/api/v2/job_templates/7/schedules/",
+ "activity_stream": "/api/v2/job_templates/7/activity_stream/",
+ "launch": "/api/v2/job_templates/7/launch/",
+ "notification_templates_started": "/api/v2/job_templates/7/notification_templates_started/",
+ "notification_templates_success": "/api/v2/job_templates/7/notification_templates_success/",
+ "notification_templates_error": "/api/v2/job_templates/7/notification_templates_error/",
+ "access_list": "/api/v2/job_templates/7/access_list/",
+ "survey_spec": "/api/v2/job_templates/7/survey_spec/",
+ "object_roles": "/api/v2/job_templates/7/object_roles/",
+ "instance_groups": "/api/v2/job_templates/7/instance_groups/",
+ "slice_workflow_jobs": "/api/v2/job_templates/7/slice_workflow_jobs/",
+ "copy": "/api/v2/job_templates/7/copy/",
+ "webhook_receiver": "/api/v2/job_templates/7/github/"
+ },
+ "summary_fields": {
+ "inventory": {
+ "id": 1,
+ "name": "Mike's Inventory",
+ "description": "",
+ "has_active_failures": false,
+ "total_hosts": 1,
+ "hosts_with_active_failures": 0,
+ "total_groups": 0,
+ "groups_with_active_failures": 0,
+ "has_inventory_sources": false,
+ "total_inventory_sources": 0,
+ "inventory_sources_with_failures": 0,
+ "organization_id": 1,
+ "kind": ""
+ },
+ "project": {
+ "id": 6,
+ "name": "Mike's Project",
+ "description": "",
+ "status": "successful",
+ "scm_type": "git"
+ },
+ "last_job": {
+ "id": 12,
+ "name": "Mike's JT",
+ "description": "",
+ "finished": "2019-10-01T14:34:35.142483Z",
+ "status": "successful",
+ "failed": false
+ },
+ "last_update": {
+ "id": 12,
+ "name": "Mike's JT",
+ "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 job template",
+ "name": "Admin",
+ "id": 24
+ },
+ "execute_role": {
+ "description": "May run the job template",
+ "name": "Execute",
+ "id": 25
+ },
+ "read_role": {
+ "description": "May view settings for the job template",
+ "name": "Read",
+ "id": 26
+ }
+ },
+ "user_capabilities": {
+ "edit": true,
+ "delete": true,
+ "start": true,
+ "schedule": true,
+ "copy": true
+ },
+ "labels": {
+ "count": 1,
+ "results": [{
"id": 91,
"name": "L_91o2"
- }
- ]
- },
- "survey": {
- "title": "",
- "description": ""
- },
- "recent_jobs": [
- {
- "id": 12,
- "status": "successful",
- "finished": "2019-10-01T14:34:35.142483Z",
- "type": "job"
- }
- ],
- "extra_credentials": [],
- "credentials": [
- {
- "id": 1, "kind": "ssh" , "name": "Credential 1"
+ }]
},
- {
- "id": 2, "kind": "awx" , "name": "Credential 2"
+ "survey": {
+ "title": "",
+ "description": ""
+ },
+ "recent_jobs": [{
+ "id": 12,
+ "status": "successful",
+ "finished": "2019-10-01T14:34:35.142483Z",
+ "type": "job"
+ }],
+ "extra_credentials": [],
+ "credentials": [{
+ "id": 1,
+ "kind": "ssh",
+ "name": "Credential 1"
+ },
+ {
+ "id": 2,
+ "kind": "awx",
+ "name": "Credential 2"
+ }
+ ],
+ "webhook_credential": {
+ "id": "1",
+ "name": "Webhook Credential"
+
}
- ]
- },
- "created": "2019-09-30T16:18:34.564820Z",
- "modified": "2019-10-01T14:47:31.818431Z",
- "name": "Mike's JT",
- "description": "",
- "job_type": "run",
- "inventory": 1,
- "project": 6,
- "playbook": "ping.yml",
- "scm_branch": "Foo branch",
- "forks": 0,
- "limit": "",
- "verbosity": 0,
- "extra_vars": "",
- "job_tags": "T_100,T_200",
- "force_handlers": false,
- "skip_tags": "S_100,S_200",
- "start_at_task": "",
- "timeout": 0,
- "use_fact_cache": true,
- "last_job_run": "2019-10-01T14:34:35.142483Z",
- "last_job_failed": false,
- "next_job_run": null,
- "status": "successful",
- "host_config_key": "",
- "ask_scm_branch_on_launch": false,
- "ask_diff_mode_on_launch": false,
- "ask_variables_on_launch": false,
- "ask_limit_on_launch": false,
- "ask_tags_on_launch": false,
- "ask_skip_tags_on_launch": false,
- "ask_job_type_on_launch": false,
- "ask_verbosity_on_launch": false,
- "ask_inventory_on_launch": false,
- "ask_credential_on_launch": false,
- "survey_enabled": true,
- "become_enabled": false,
- "diff_mode": false,
- "allow_simultaneous": false,
- "custom_virtualenv": null,
- "job_slice_count": 1
-}
\ No newline at end of file
+ },
+ "created": "2019-09-30T16:18:34.564820Z",
+ "modified": "2019-10-01T14:47:31.818431Z",
+ "name": "Mike's JT",
+ "description": "",
+ "job_type": "run",
+ "inventory": 1,
+ "project": 6,
+ "playbook": "ping.yml",
+ "scm_branch": "Foo branch",
+ "forks": 0,
+ "limit": "",
+ "verbosity": 0,
+ "extra_vars": "",
+ "job_tags": "T_100,T_200",
+ "force_handlers": false,
+ "skip_tags": "S_100,S_200",
+ "start_at_task": "",
+ "timeout": 0,
+ "use_fact_cache": true,
+ "last_job_run": "2019-10-01T14:34:35.142483Z",
+ "last_job_failed": false,
+ "next_job_run": null,
+ "status": "successful",
+ "host_config_key": "",
+ "ask_scm_branch_on_launch": false,
+ "ask_diff_mode_on_launch": false,
+ "ask_variables_on_launch": false,
+ "ask_limit_on_launch": false,
+ "ask_tags_on_launch": false,
+ "ask_skip_tags_on_launch": false,
+ "ask_job_type_on_launch": false,
+ "ask_verbosity_on_launch": false,
+ "ask_inventory_on_launch": false,
+ "ask_credential_on_launch": false,
+ "survey_enabled": true,
+ "become_enabled": false,
+ "diff_mode": false,
+ "allow_simultaneous": false,
+ "custom_virtualenv": null,
+ "job_slice_count": 1,
+ "webhook_credential": 1,
+ "webhook_key": "asertdyuhjkhgfd234567kjgfds",
+ "webhook_service": "github"
+}