From f594f62dfcb8c1fb5c59b9577a820b509041f511 Mon Sep 17 00:00:00 2001 From: Wayne Witzel III Date: Fri, 16 Mar 2018 08:27:01 -0400 Subject: [PATCH] Project needs to expose all of its ProjectUpdate jobs in an active state --- awx/main/models/projects.py | 14 +++++++++++--- awx/main/tests/functional/test_projects.py | 7 +++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/awx/main/models/projects.py b/awx/main/models/projects.py index 8c7ee0db35..32796df32a 100644 --- a/awx/main/models/projects.py +++ b/awx/main/models/projects.py @@ -447,6 +447,14 @@ class Project(UnifiedJobTemplate, ProjectOptions, ResourceMixin, CustomVirtualEn def get_absolute_url(self, request=None): return reverse('api:project_detail', kwargs={'pk': self.pk}, request=request) + def get_active_jobs(self): + for project_update in self.project_updates.all(): + active_jobs = project_update.get_active_jobs() + if active_jobs is None: + continue + return active_jobs + return [] + class ProjectUpdate(UnifiedJob, ProjectOptions, JobNotificationMixin, TaskManagerProjectUpdateMixin, RelatedJobsMixin): ''' @@ -568,10 +576,10 @@ class ProjectUpdate(UnifiedJob, ProjectOptions, JobNotificationMixin, TaskManage ''' def _get_active_jobs(self): return UnifiedJob.objects.non_polymorphic().filter( - Q(status__in=ACTIVE_STATES) & + models.Q(status__in=ACTIVE_STATES) & ( - Q(Job___project=self) | - Q(ProjectUpdate___project=self) + models.Q(Job___project=self) | + models.Q(ProjectUpdate___project=self) ) ) diff --git a/awx/main/tests/functional/test_projects.py b/awx/main/tests/functional/test_projects.py index 31792683d9..a6cef20f6f 100644 --- a/awx/main/tests/functional/test_projects.py +++ b/awx/main/tests/functional/test_projects.py @@ -251,3 +251,10 @@ def test_project_unique_together_with_org(organization): proj2.validate_unique() proj2 = Project(name='foo', organization=None) proj2.validate_unique() + + +@pytest.mark.django_db +def test_project_delete(delete, organization, admin): + proj = Project(name='foo', organization=organization) + proj.save() + delete(reverse('api:project_detail', kwargs={'pk':proj.id,}), admin)