From 8965f1934e2251097fbebb434380c3f23878f030 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Fri, 19 Oct 2018 16:02:56 -0400 Subject: [PATCH] fix bug with relaunching with changed JT --- awx/main/models/unified_jobs.py | 8 +++---- awx/main/tests/functional/conftest.py | 18 +++++++++++++++ .../functional/models/test_unified_job.py | 22 ++++++++++++++++++- .../functional/test_rbac_job_templates.py | 18 --------------- 4 files changed, 43 insertions(+), 23 deletions(-) diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index 28f348d1e6..da3f43ad80 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -847,10 +847,10 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique setattr(unified_job, fd, val) unified_job.save() - # Labels copied here - from awx.main.signals import disable_activity_stream - with disable_activity_stream(): - copy_m2m_relationships(self, unified_job, fields) + # Labels copied here + from awx.main.signals import disable_activity_stream + with disable_activity_stream(): + copy_m2m_relationships(self, unified_job, fields) return unified_job diff --git a/awx/main/tests/functional/conftest.py b/awx/main/tests/functional/conftest.py index a3e6199137..459471b6e8 100644 --- a/awx/main/tests/functional/conftest.py +++ b/awx/main/tests/functional/conftest.py @@ -671,6 +671,24 @@ def job_template_labels(organization, job_template): return job_template +@pytest.fixture +def jt_linked(job_template_factory, credential, net_credential, vault_credential): + ''' + A job template with a reasonably complete set of related objects to + test RBAC and other functionality affected by related objects + ''' + objects = job_template_factory( + 'testJT', organization='org1', project='proj1', inventory='inventory1', + credential='cred1') + jt = objects.job_template + jt.credentials.add(vault_credential) + jt.save() + # Add AWS cloud credential and network credential + jt.credentials.add(credential) + jt.credentials.add(net_credential) + return jt + + @pytest.fixture def workflow_job_template(organization): wjt = WorkflowJobTemplate(name='test-workflow_job_template', organization=organization) diff --git a/awx/main/tests/functional/models/test_unified_job.py b/awx/main/tests/functional/models/test_unified_job.py index 4242b96ee7..ff3af2439b 100644 --- a/awx/main/tests/functional/models/test_unified_job.py +++ b/awx/main/tests/functional/models/test_unified_job.py @@ -1,11 +1,16 @@ import itertools import pytest +import six # Django from django.contrib.contenttypes.models import ContentType # AWX -from awx.main.models import UnifiedJobTemplate, Job, JobTemplate, WorkflowJobTemplate, Project, WorkflowJob, Schedule +from awx.main.models import ( + UnifiedJobTemplate, Job, JobTemplate, WorkflowJobTemplate, + Project, WorkflowJob, Schedule, + Credential +) @pytest.mark.django_db @@ -63,6 +68,21 @@ class TestCreateUnifiedJob: assert second_job.limit == 'my_server' assert net_credential in second_job.credentials.all() + def test_job_relaunch_modifed_jt(self, jt_linked): + # Replace all credentials with a new one of same type + new_creds = [] + for cred in jt_linked.credentials.all(): + new_creds.append(Credential.objects.create( + name=six.text_type(cred.name) + six.text_type('_new'), + credential_type=cred.credential_type, + inputs=cred.inputs + )) + job = jt_linked.create_unified_job() + jt_linked.credentials.clear() + jt_linked.credentials.add(*new_creds) + relaunched_job = job.copy_unified_job() + assert set(relaunched_job.credentials.all()) == set(new_creds) + @pytest.mark.django_db class TestMetaVars: diff --git a/awx/main/tests/functional/test_rbac_job_templates.py b/awx/main/tests/functional/test_rbac_job_templates.py index 7ccc5f4c5e..f26843c881 100644 --- a/awx/main/tests/functional/test_rbac_job_templates.py +++ b/awx/main/tests/functional/test_rbac_job_templates.py @@ -15,24 +15,6 @@ from awx.main.models.organization import Organization from awx.main.models.schedules import Schedule -@pytest.fixture -def jt_linked(job_template_factory, credential, net_credential, vault_credential): - ''' - A job template with a reasonably complete set of related objects to - test RBAC and other functionality affected by related objects - ''' - objects = job_template_factory( - 'testJT', organization='org1', project='proj1', inventory='inventory1', - credential='cred1') - jt = objects.job_template - jt.credentials.add(vault_credential) - jt.save() - # Add AWS cloud credential and network credential - jt.credentials.add(credential) - jt.credentials.add(net_credential) - return jt - - @mock.patch.object(BaseAccess, 'check_license', return_value=None) @pytest.mark.django_db def test_job_template_access_superuser(check_license, user, deploy_jobtemplate):