From 83562ba2bf2b106f1b8700113b80ec81c39e6336 Mon Sep 17 00:00:00 2001
From: Jan Dittberner <jan@dittberner.info>
Date: Sun, 1 Jun 2014 14:51:33 +0200
Subject: [PATCH] implement test for User.set_password, add Shadow.set_password

---
 gnuviechadmin/osusers/models.py            |  8 ++++++--
 gnuviechadmin/osusers/tests/test_models.py | 21 ++++++++++++++++++++-
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/gnuviechadmin/osusers/models.py b/gnuviechadmin/osusers/models.py
index b61dda3..e586c66 100644
--- a/gnuviechadmin/osusers/models.py
+++ b/gnuviechadmin/osusers/models.py
@@ -221,6 +221,7 @@ class User(TimeStampedModel, models.Model):
         return '{0} ({1})'.format(self.username, self.uid)
 
     def set_password(self, password):
+        self.shadow.set_password(password)
         UserTaskResult.objects.create_usertaskresult(
             self,
             create_ldap_user.delay(
@@ -289,12 +290,12 @@ class ShadowManager(models.Manager):
 
     def create_shadow(self, user, password):
         changedays = (timezone.now().date() - date(1970, 1, 1)).days
-        pwhash = sha512_crypt.encrypt(password)
         shadow = self.create(
             user=user, changedays=changedays,
             minage=0, maxage=None, gracedays=7,
-            inactdays=30, expiredays=None, passwd=pwhash
+            inactdays=30, expiredays=None
         )
+        shadow.set_password(password)
         shadow.save()
         return shadow
 
@@ -342,6 +343,9 @@ class Shadow(TimeStampedModel, models.Model):
     def __str__(self):
         return 'for user {0}'.format(self.user)
 
+    def set_password(self, password):
+        self.passwd = sha512_crypt.encrypt(password)
+
 
 @python_2_unicode_compatible
 class AdditionalGroup(TimeStampedModel, models.Model):
diff --git a/gnuviechadmin/osusers/tests/test_models.py b/gnuviechadmin/osusers/tests/test_models.py
index 2dc57f3..bd198fd 100644
--- a/gnuviechadmin/osusers/tests/test_models.py
+++ b/gnuviechadmin/osusers/tests/test_models.py
@@ -14,6 +14,7 @@ from osusers.models import (
     GroupTaskResult,
     Shadow,
     User,
+    UserTaskResult,
 )
 
 
@@ -254,5 +255,23 @@ class UserManagerTest(TestCaseWithCeleryTasks):
         self.assertIsNotNone(user.shadow)
 
 
+@override_settings(
+    OSUSER_MINUID=10000, OSUSER_MINGID=10000, OSUSER_USERNAME_PREFIX='test',
+    OSUSER_HOME_BASEPATH='/home', OSUSER_DEFAULT_SHELL='/bin/fooshell'
+)
 class UserTest(TestCaseWithCeleryTasks):
-    pass
+
+    def test___str__(self):
+        user = User.objects.create_user()
+        self.assertEqual(str(user), 'test01 (10000)')
+
+    def test_set_password(self):
+        user = User.objects.create_user()
+        self.assertFalse(sha512_crypt.verify('test', user.shadow.passwd))
+        UserTaskResult.objects.all().delete()
+        user.set_password('test')
+        self.assertTrue(sha512_crypt.verify('test', user.shadow.passwd))
+        taskres = UserTaskResult.objects.all()
+        self.assertEqual(len(taskres), 1)
+        self.assertEqual(taskres[0].user, user)
+        self.assertEqual(taskres[0].task_name, 'create_ldap_user')