From 8eb69b96d1e720fa2c5f42626080665e1608fd9e Mon Sep 17 00:00:00 2001 From: Chris Church Date: Sat, 30 May 2015 16:23:12 -0400 Subject: [PATCH] Set created_by and modified_by on default org to superuser (if found). Fixes https://trello.com/c/gERRKtXa --- .../management/commands/create_default_org.py | 16 +++++--- .../tests/commands/commands_monolithic.py | 38 ++++++++++++++++++- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/awx/main/management/commands/create_default_org.py b/awx/main/management/commands/create_default_org.py index 0d8dfefc94..ac18890e29 100644 --- a/awx/main/management/commands/create_default_org.py +++ b/awx/main/management/commands/create_default_org.py @@ -2,8 +2,8 @@ # All Rights Reserved from django.core.management.base import BaseCommand - -from awx.main.models import Organization +from crum import impersonate +from awx.main.models import User, Organization class Command(BaseCommand): @@ -17,7 +17,11 @@ class Command(BaseCommand): if Organization.objects.count(): return - # Create a default organization. - org, new = Organization.objects.get_or_create(name='Default') - if new: - print('Default organization added.') + # Create a default organization as the first superuser found. + try: + superuser = User.objects.filter(is_superuser=True, is_active=True).order_by('pk')[0] + except IndexError: + superuser = None + with impersonate(superuser): + org = Organization.objects.create(name='Default') + print('Default organization added.') diff --git a/awx/main/tests/commands/commands_monolithic.py b/awx/main/tests/commands/commands_monolithic.py index 4ce0959e52..0e4d0d11c0 100644 --- a/awx/main/tests/commands/commands_monolithic.py +++ b/awx/main/tests/commands/commands_monolithic.py @@ -29,8 +29,9 @@ from awx.main.tests.base import BaseTest, BaseLiveServerTest if not hasattr(unittest, 'skipIf'): import unittest2 as unittest -__all__ = ['DumpDataTest', 'CleanupDeletedTest', 'CleanupJobsTest', - 'CleanupActivityStreamTest', 'InventoryImportTest'] +__all__ = ['CreateDefaultOrgTest', 'DumpDataTest', 'CleanupDeletedTest', + 'CleanupJobsTest', 'CleanupActivityStreamTest', + 'InventoryImportTest'] TEST_PLAYBOOK = '''- hosts: test-group gather_facts: False @@ -175,6 +176,39 @@ class BaseCommandMixin(object): sys.stderr = original_stderr return result, captured_stdout, captured_stderr +class CreateDefaultOrgTest(BaseCommandMixin, BaseTest): + ''' + Test cases for create_default_org management command. + ''' + + def setUp(self): + super(CreateDefaultOrgTest, self).setUp() + + def test_create_default_org(self): + self.setup_users() + self.assertEqual(Organization.objects.count(), 0) + result, stdout, stderr = self.run_command('create_default_org') + self.assertEqual(result, None) + self.assertTrue('Default organization added' in stdout) + self.assertEqual(Organization.objects.count(), 1) + org = Organization.objects.all()[0] + self.assertEqual(org.created_by, self.super_django_user) + self.assertEqual(org.modified_by, self.super_django_user) + result, stdout, stderr = self.run_command('create_default_org') + self.assertEqual(result, None) + self.assertFalse('Default organization added' in stdout) + self.assertEqual(Organization.objects.count(), 1) + + def test_create_default_org_when_no_superuser_exists(self): + self.assertEqual(Organization.objects.count(), 0) + result, stdout, stderr = self.run_command('create_default_org') + self.assertEqual(result, None) + self.assertTrue('Default organization added' in stdout) + self.assertEqual(Organization.objects.count(), 1) + org = Organization.objects.all()[0] + self.assertEqual(org.created_by, None) + self.assertEqual(org.modified_by, None) + class DumpDataTest(BaseCommandMixin, BaseTest): ''' Test cases for dumpdata management command.