Skip to content
This repository has been archived by the owner on Jun 10, 2024. It is now read-only.

Commit

Permalink
Check integrity exception in "usersettings_init"
Browse files Browse the repository at this point in the history
  • Loading branch information
akolpakov committed Sep 25, 2014
1 parent 4d9b388 commit 7fd7d9a
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 10 deletions.
42 changes: 38 additions & 4 deletions tests/test_management.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,58 @@
from django.contrib.auth import get_user_model
from django.core.management import call_command
from django.contrib.sites.models import Site
from django.core.management.base import CommandError


class CommandsTest(TestCase):
username = 'superuser'
email = 'superuser@example.com'
password = 'pa$sw0Rd'

usersettings_model = get_usersettings_model()

def setUp(self):
Site.objects.get_or_create(id=settings.SITE_ID, domain='example.com', name='example.com')

def setUpUser(self):
self.user = get_user_model().objects.create_superuser(self.username, self.email, self.password)

def test_usersettings_init(self):
self.setUpUser()

call_command('usersettings_init')
self.assertEqual(self.usersettings_model.objects.all().count(), 1)

self.assertEqual(get_usersettings_model().objects.all().count(), 1)

def test_usersettings_init_many(self):
self.setUpUser()

Site.objects.get_or_create(id=(settings.SITE_ID + 1), domain='example.com', name='example.com')

call_command('usersettings_init')

self.assertEqual(get_usersettings_model().objects.all().count(), 2)

def test_usersettings_init_allready_exists(self):
self.setUpUser()

call_command('usersettings_init')
call_command('usersettings_init')
self.assertEqual(self.usersettings_model.objects.all().count(), 1)

self.assertEqual(get_usersettings_model().objects.all().count(), 1)

def test_usersettings_no_user(self):
with self.assertRaises(CommandError):
call_command('usersettings_init')

self.assertEqual(get_usersettings_model().objects.all().count(), 0)

def test_usersettings_integrity_constraint(self):
self.setUpUser()

# little hack, but don't know another way to test
get_usersettings_model()._meta.get_field_by_name('tag_line')[0].empty_strings_allowed = False

with self.assertRaises(CommandError):
call_command('usersettings_init')

self.assertEqual(get_usersettings_model().objects.all().count(), 0)

17 changes: 11 additions & 6 deletions usersettings/management/commands/usersettings_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from usersettings.shortcuts import get_usersettings_model
from django.contrib.sites.models import Site
from django.contrib.auth import get_user_model
from django.db import IntegrityError


class Command(BaseCommand):
Expand All @@ -22,12 +23,16 @@ def handle(self, **options):
for site in Site.objects.all():
print('Processing site %s' % site)

config, created = get_usersettings_model().objects.get_or_create(
site=site,
user=user
)
try:
config, created = get_usersettings_model().objects.get_or_create(
site=site,
user=user
)

if not created:
print('Userconfig for site %s already exists' % Site.objects.get_current())
if not created:
print('Userconfig for site %s already exists' % Site.objects.get_current())

except IntegrityError as e:
raise CommandError("Couldn't create userconfig record. Please check default values. Error %s" % e)

print('Done')

0 comments on commit 7fd7d9a

Please sign in to comment.