diff --git a/awx/main/migrations/_rbac.py b/awx/main/migrations/_rbac.py index 0c78c32495..32c399df81 100644 --- a/awx/main/migrations/_rbac.py +++ b/awx/main/migrations/_rbac.py @@ -274,13 +274,14 @@ def migrate_projects(apps, schema_editor): original_project_name = project.name project_orgs = project.deprecated_organizations.distinct().all() - if len(project_orgs) > 1: + if len(project_orgs) >= 1: first_org = None for org in project_orgs: if first_org is None: # For the first org, re-use our existing Project object, so don't do the below duplication effort first_org = org - project.name = smart_text(u'{} - {}'.format(first_org.name, original_project_name)) + if len(project_orgs) > 1: + project.name = smart_text(u'{} - {}'.format(first_org.name, original_project_name)) project.organization = first_org project.save() else: diff --git a/awx/main/tests/functional/test_rbac_project.py b/awx/main/tests/functional/test_rbac_project.py index 4d45d0e446..6fae236667 100644 --- a/awx/main/tests/functional/test_rbac_project.py +++ b/awx/main/tests/functional/test_rbac_project.py @@ -91,6 +91,46 @@ def test_project_migration(): assert o2.projects.all()[0].jobtemplates.count() == 1 assert o3.projects.all()[0].jobtemplates.count() == 0 +@pytest.mark.django_db +def test_single_org_project_migration(organization): + project = Project.objects.create(name='my project', + description="description", + organization=None) + organization.deprecated_projects.add(project) + assert project.organization is None + rbac.migrate_projects(apps, None) + project = Project.objects.get(id=project.id) + assert project.organization.id == organization.id + +@pytest.mark.django_db +def test_no_org_project_migration(organization): + project = Project.objects.create(name='my project', + description="description", + organization=None) + assert project.organization is None + rbac.migrate_projects(apps, None) + assert project.organization is None + +@pytest.mark.django_db +def test_multi_org_project_migration(): + org1 = Organization.objects.create(name="org1", description="org1 desc") + org2 = Organization.objects.create(name="org2", description="org2 desc") + project = Project.objects.create(name='my project', + description="description", + organization=None) + + assert Project.objects.all().count() == 1 + assert Project.objects.filter(organization=org1).count() == 0 + assert Project.objects.filter(organization=org2).count() == 0 + + project.deprecated_organizations.add(org1) + project.deprecated_organizations.add(org2) + assert project.organization is None + rbac.migrate_projects(apps, None) + assert Project.objects.filter(organization=org1).count() == 1 + assert Project.objects.filter(organization=org2).count() == 1 + + @pytest.mark.django_db def test_project_user_project(user_project, project, user): u = user('owner')