I am creating an authentication system for a website, I have no previous testing experience with Django. I wrote some basic tests.
model,
class User(AbstractBaseUser, PermissionsMixin): username = models.CharField(max_length=25, unique=True, error_messages={ 'unique': 'The username is taken' }) first_name = models.CharField(max_length=60, blank=True, null=True) last_name = models.CharField(max_length=60, blank=True, null=True) email = models.EmailField(unique=True, db_index=True, error_messages={ 'unique': 'This email id is already registered!' }) is_active = models.BooleanField(default=True) is_staff = models.BooleanField(default=False) date_joined = models.DateTimeField(auto_now_add=True) USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['username',] objects = UserManager() def get_full_name(self): return ' '.join([self.first_name, self.last_name]) def get_short_name(self): return self.email def __unicode__(self): return self.username
and model manager,
class UserManager(BaseUserManager): def create_user(self, email, password=None, **kwargs): if not email: raise ValueError('Enter Email address') if not kwargs.get('username'): raise ValueError('Enter Username') account = self.model( email=self.normalize_email(email), username=kwargs.get('username') ) account.set_password(password) account.save() return account def create_superuser(self, email, password, **kwargs): account = self.create_user(email, password, **kwargs) account.is_superuser = True account.save() return account
and my tests
class SettingsTest(TestCase): def test_account_is_configured(self): self.assertTrue('accounts' in INSTALLED_APPS) self.assertTrue('accounts.User' == AUTH_USER_MODEL) class UserTest(TestCase): def setUp(self): self.username = "testuser" self.email = " testuser@testbase.com " self.first_name = "Test" self.last_name = "User" self.password = "z" self.test_user = User.objects.create_user( username=self.username, email=self.email, first_name=self.first_name, last_name=self.last_name ) def tearDown(self): del self.username del self.email del self.first_name del self.last_name del self.password def test_create_user(self): self.assertIsInstance(self.test_user, User) def test_default_user_is_active(self): self.assertTrue(self.test_user.is_active) def test_default_user_is_staff(self): self.assertFalse(self.test_user.is_staff) def test_default_user_is_superuser(self): self.assertFalse(self.test_user.is_superuser) def test_get_full_name(self): self.assertEqual('Test User', self.test_user.get_full_name()) def test_get_short_name(self): self.assertEqual(self.email, self.test_user.get_short_name()) def test_unicode(self): self.assertEqual(self.username, self.test_user.__unicode__())
fortunately, all the passes, and my question is, are these tests exaggerated or exaggerated or normal? What needs to be tested in the model? is there any procedure missing? Is there something wrong with these tests? how to write tests efficiently?
Thank you for any ideas.
python django testing testcase django-testing
Marty
source share