~pidgeon690/pidge-groups/trunk

« back to all changes in this revision

Viewing changes to Apps/Users/tests/models.py

  • Committer: Fergus Ross Ferrier
  • Date: 2009-05-25 22:10:29 UTC
  • mfrom: (273.2.4 refactor+user)
  • Revision ID: hello@fergusrossferrier.co.uk-20090525221029-gqdycg3rfhxujqpz
Merged user-refactor fun.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
'''
2
 
Users.tests.models
3
 
'''
4
 
 
5
 
from Users.models import User, Reminder, Membership, MembershipClaim, Person, CambridgeMember
6
 
from Groups.models import Group, GroupCategory
7
 
from Start.models import StartLink
8
 
from django.core import mail
9
 
from django.test import TestCase
10
 
from Users.forms import RegisterForm, CambridgeRegisterForm
11
 
from Events.models import EventTag
12
 
 
13
 
class UserTests(TestCase):
14
 
    
15
 
    def setUp(self):
16
 
        import sha        
17
 
        self.fergus = User.objects.create(
18
 
            firstname="Fergus",
19
 
            lastname="Ferrier",
20
 
            email="fff21@cam.ac.uk",
21
 
            password=sha.new("password").hexdigest())
22
 
        self.usertwo = User.objects.create(firstname="E", lastname="Parkinson", email="eric.parkinson@hotmail.com", password="pleaselogmein")
23
 
        
24
 
        # Create or get the Pidgeon
25
 
        thePidge,created = User.objects.get_or_create(email = "thePidge@MyPidge.com", defaults={'firstname': "The", 'lastname': "PIDGE", 'password': "hey", 'membershipstatus':"OK", 'activationlinkkey': "here"})
26
 
        # We add a pidgelink
27
 
        pidgelink = StartLink.objects.create(url = "http://www.google.com", name = "Google", owner = thePidge, defaultlink = True)
28
 
 
29
 
 
30
 
    def testUserStringRep(self):
31
 
        ''' The string representation of a user is okay '''
32
 
        self.failUnlessEqual(unicode(self.fergus), "Fergus Ferrier")
33
 
        self.failUnlessEqual(unicode(self.usertwo), "E Parkinson")
34
 
        
35
 
    def testCheckPasswordCorrect(self):    
36
 
        ''' CheckPassword when password is good '''
37
 
        self.assertEquals(self.fergus.CheckPassword("password"), True)
38
 
 
39
 
    def testCheckPasswordIncorrect(self):    
40
 
        ''' CheckPassword when password is bad '''
41
 
        self.assertRaises(User.PasswordError, self.fergus.CheckPassword, "password1")
42
 
 
43
 
    def testCheckPasswordBlank(self):    
44
 
        ''' CheckPassword when password is blank '''
45
 
        self.assertRaises(User.PasswordError, self.fergus.CheckPassword, "")
46
 
    
47
 
    def testGetAllLinks(self):
48
 
        ''' Returns QuerySet of StartLinks '''
49
 
        from Start.models import StartLink
50
 
        self.assertEquals(len(self.fergus.GetAllLinks()), 0)
51
 
        s = StartLink(name="loogle", url="http://www.google.com", owner=self.fergus)
52
 
        s.save()
53
 
        #self.fergus.links.add(s)
54
 
        self.assertEquals(len(self.fergus.GetAllLinks()), 1)
55
 
 
56
 
    def testGetLinks(self):
57
 
        ''' Returns QuerySet of StartLinks '''
58
 
        from Start.models import StartLink
59
 
        self.assertEquals(len(self.fergus.GetLinks()), 0)
60
 
        s = StartLink(name="loogle", url="http://www.google.com", owner=self.fergus)
61
 
        s.save()
62
 
        self.fergus.links.add(s)
63
 
        self.assertEquals(len(self.fergus.GetLinks()), 1)
64
 
 
65
 
    def testGiveDefaults(self):
66
 
        ''' GiveDefaults '''
67
 
        self.assertEquals(len(self.fergus.links.all()), 0)
68
 
        self.fergus.GiveDefaults()
69
 
        self.assertEquals(len(self.fergus.links.all()) > 0, True)
70
 
        #- group url in links'''
71
 
    
72
 
    def testSaveDuplicateEmail(self):    
73
 
        ''' Try adding a duplicate email address '''
74
 
        from django.db import IntegrityError
75
 
        self.usertwo.email = "fff21@cam.ac.uk"
76
 
        self.assertRaises(IntegrityError, self.usertwo.save)
77
 
 
78
 
    def testSaveNoCredentials(self):    
79
 
        ''' Save a user without password or crsid '''
80
 
        newuser = User(firstname="Me", lastname="Again", email="frf20@cam.ac.uk")
81
 
        self.assertRaises(User.NoCredentials, newuser.save)
82
 
 
83
 
    def testSaveImpossibleToActivate(self):    
84
 
        ''' Save a user without activation key when status is activation email pending '''
85
 
        self.fergus.membershipstatus = "EP"
86
 
        self.fergus.activationlinkkey = ""
87
 
        self.assertRaises(User.ImpossibleToActivate, self.fergus.save)
88
 
        
89
 
    def testSaveUpdate(self):    
90
 
        ''' Updates existing record successfully. '''
91
 
        self.fergus.firstname = "Freegus"
92
 
        self.fergus.save()
93
 
        self.assertEquals(self.fergus.firstname, "Freegus")
94
 
 
95
 
    def testSendActivationEmail(self):
96
 
        ''' Check that send activation email sends one email '''
97
 
        self.fergus.membershipstatus = "EP"
98
 
        self.fergus.SendActivationEmail()
99
 
        self.assertEquals(len(mail.outbox), 1)
100
 
        
101
 
    def testSendActivationEmailErroneously(self):
102
 
        ''' Try with user who does not require activation '''
103
 
        self.fergus.membershipstatus = "OK"
104
 
        self.assertRaises(User.ActivationNotPending, self.fergus.SendActivationEmail)
105
 
 
106
 
    def testUpdatePasswordChanges(self):    
107
 
        ''' Update password gives expected change '''
108
 
        self.assertEquals(self.fergus.CheckPassword("password"), True)
109
 
        newpassword = "heyi'mcrazy"
110
 
        self.fergus.UpdatePassword("heyi'mcrazy")
111
 
        self.assertEquals(self.fergus.CheckPassword(newpassword), True)
112
 
 
113
 
# Reset password key
114
 
    def testSetResetKey(self):
115
 
        ''' Sets user a random password reset key and returns said '''
116
 
        self.assertEquals(type(self.fergus.SetResetKey()) is str, True)
117
 
        self.assertEquals(len(self.fergus.SetResetKey()), 12)
118
 
        # User is still active though
119
 
        self.assert_(self.fergus.CheckPassword("password"))
120
 
        
121
 
 
122
 
class UserManagerTests(TestCase):
123
 
 
124
 
    def setUp(self):
125
 
        import sha        
126
 
        self.fergus = User.objects.create(firstname="Fergus", lastname="Ferrier", email="fff21@cam.ac.uk", password=sha.new("password").hexdigest(), membershipstatus="OK", activationlinkkey="tweed")
127
 
        self.usertwo = User.objects.create(firstname="E", lastname="Parkinson", email="eric.parkinson@hotmail.com", password=sha.new("pleaselogmein").hexdigest(), membershipstatus="EP", activationlinkkey="teddy")
128
 
        self.userthree = User.objects.create(firstname="U", lastname="Larkinson", email="u.larkinson@hotmail.com", password=sha.new("pleaselogmein").hexdigest(), membershipstatus="EP", activationlinkkey="teddy222")
129
 
        self.baduser = User.objects.create(firstname="Jecca", lastname="Bludline", email="seismics@gmail.com", password=sha.new("loggame").hexdigest(), membershipstatus="DA", activationlinkkey="beenhere")
130
 
        self.eventtag = EventTag.objects.create(name = "My Tag")
131
 
        
132
 
        # Create a college
133
 
        self.collegecat, created = GroupCategory.objects.get_or_create(name = "College", small_name = "COL", defaults = {'all_can_create': False})
134
 
        self.college = Group.objects.create(official_name = "Selwine College", category = self.collegecat)
135
 
        
136
 
        # Create or get the Pidgeon
137
 
        thePidge,created = User.objects.get_or_create(email = "thePidge@MyPidge.com", defaults={'firstname': "The", 'lastname': "PIDGE", 'password': "hey", 'membershipstatus':"OK", 'activationlinkkey': "here"})
138
 
        # We add a pidgelink
139
 
        pidgelink = StartLink.objects.create(url = "http://www.google.com", name = "Google", owner = thePidge, defaultlink = True)
140
 
 
141
 
    
142
 
    def testActivationNoKey(self):
143
 
        ''' No activation key given '''
144
 
        self.assertRaises(User.InvalidKey, User.objects.Activate, "")
145
 
        
146
 
    def testActivationCorrect(self):
147
 
        ''' Activation key for correct user '''
148
 
        self.assertEquals(User.objects.Activate("teddy"), self.usertwo)
149
 
 
150
 
    def testActivationAlreadyActivated(self):
151
 
        ''' Activation key for User that is already OK '''
152
 
        self.assertRaises(User.AlreadyActive, User.objects.Activate, "tweed")
153
 
 
154
 
    def testActivationNotPending(self):
155
 
        ''' Activation key for User that is neither OK nor EP '''
156
 
        self.assertRaises(User.ActivationNotPending, User.objects.Activate, "beenhere")
157
 
 
158
 
    
159
 
    def testAuthenticationCRSID(self):
160
 
        ''' Authenticate with CRSID '''
161
 
        self.assertEquals(self.fergus.Authenticate(), None)
162
 
        
163
 
    def testAuthenticationGood(self):
164
 
        ''' Authenticate with bona fide password '''
165
 
        self.assertEquals(self.fergus.Authenticate(password="password"), None)
166
 
 
167
 
    def testAuthenticationNotActivated(self):
168
 
        ''' Authenticate with EP-status user. '''
169
 
        self.assertRaises(User.NotActivated, self.usertwo.Authenticate, password="pleaselogmein") # Password
170
 
        self.assertRaises(User.NotActivated, self.userthree.Authenticate) # CRSID-credentials
171
 
 
172
 
    def testAuthenticationDeactivated(self):
173
 
        ''' Authenticate with DA-status user. '''
174
 
        self.assertRaises(User.Deactivated, self.baduser.Authenticate, password="loggame")
175
 
        
176
 
    def testAuthenticationBadPassword(self):
177
 
        ''' Authenticate with bad password '''
178
 
        self.assertRaises(User.DetailsError, self.fergus.Authenticate, password="password2")
179
 
    
180
 
 
181
 
    def testRegistrationCRSIDAndEmail(self):
182
 
        ''' Correct registration for Cambridge user with Raven and @cam.ac.uk returns user with same characteristics and activated user. '''
183
 
        testuser = {}
184
 
        testuser['firstname'] = "John"
185
 
        testuser['lastname'] = "Doe"
186
 
        testuser['email'] = "jd208@cam.ac.uk"
187
 
        testuser['crsid'] = "jd208"
188
 
        testuser['password_one'] = "helloworld"
189
 
        testuser['password_again'] = "helloworld"
190
 
        
191
 
        registerForm = RegisterForm(testuser, crsid=testuser['crsid'])
192
 
        self.assert_(registerForm.is_valid())
193
 
        user, activate = registerForm.save()
194
 
        
195
 
        self.assertEquals(user.firstname, testuser['firstname'])
196
 
        self.assertEquals(user.lastname, testuser['lastname'])
197
 
        self.assertEquals(user.email, testuser['email'])
198
 
        self.assertEquals(user.membershipstatus, "OK")
199
 
        self.assertEquals(len(mail.outbox), 0)
200
 
        self.assertEquals(user.CheckPassword(testuser['password_one']), True)
201
 
        
202
 
    def testRegistrationCRSID(self):
203
 
        ''' Correct registration for Cambridge user with Raven raises activation requirement. '''
204
 
        testuser = {}
205
 
        testuser['firstname'] = "John"
206
 
        testuser['lastname'] = "Doe"
207
 
        testuser['email'] = "jd208@gmail.com"
208
 
        testuser['crsid'] = "jd208"
209
 
        testuser['password_one'] = "helloworld"
210
 
        testuser['password_again'] = "helloworld"
211
 
        
212
 
        registerForm = RegisterForm(testuser, crsid = testuser['crsid'])
213
 
        self.assert_(registerForm.is_valid())
214
 
        
215
 
        user, activate = registerForm.save()
216
 
        
217
 
        cambridgeform = CambridgeRegisterForm(testuser, crsid = testuser['crsid'])
218
 
        self.assert_(cambridgeform.is_valid())
219
 
        cambridgeform.pk = user.pk
220
 
        cambridgeform.save()
221
 
        # Do this after saving cambridgeform so they get a link to their college
222
 
        user.GiveDefaults()
223
 
        
224
 
        # Requires activation
225
 
        self.assert_(activate)
226
 
        
227
 
        self.assertEquals(user.firstname, testuser['firstname'])
228
 
        self.assertEquals(user.lastname, testuser['lastname'])
229
 
        self.assertEquals(user.email, testuser['email'])
230
 
        self.assertEquals(user.person_ptr.cambridgemember.crsid, testuser['crsid'])
231
 
        self.assertEquals(bool(user.activationlinkkey), True)
232
 
        self.assertEquals(bool(len(user.links.all())), True)
233
 
        self.assertEquals(user.membershipstatus, "EP")
234
 
        self.assertEquals(len(mail.outbox), 1)
235
 
        self.assertEquals(user.CheckPassword(testuser['password_one']), True)
236
 
        
237
 
    def testRegistrationNormal(self):
238
 
        ''' Correct reg for normal user [no crsid] '''
239
 
 
240
 
        testuser = {}
241
 
        testuser['firstname'] = "John"
242
 
        testuser['lastname'] = "Doe"
243
 
        testuser['email'] = "jd208@gmail.com"
244
 
        testuser['password_one'] = "helloworld"
245
 
        testuser['password_again'] = "helloworld"
246
 
        
247
 
        registerForm = RegisterForm(testuser)
248
 
        self.assert_(registerForm.is_valid())
249
 
        user, activate = registerForm.save()
250
 
        
251
 
        user.GiveDefaults()
252
 
        
253
 
        # Requires activation
254
 
        self.assert_(activate)
255
 
 
256
 
        self.assertEquals(user.firstname, testuser['firstname'])
257
 
        self.assertEquals(user.lastname, testuser['lastname'])
258
 
        self.assertEquals(user.email, testuser['email'])
259
 
        self.assertEquals(bool(user.activationlinkkey), True)
260
 
        self.assertEquals(bool(len(user.links.all())), True)
261
 
        self.assertEquals(user.membershipstatus, "EP")
262
 
        self.assertEquals(len(mail.outbox), 1)
263
 
        self.assertEquals(user.CheckPassword(testuser['password_one']), True)
264
 
        
265
 
    def testRegistrationFull(self):
266
 
        ''' Correct reg for user who supplies all attributes '''
267
 
        
268
 
 
269
 
        testuser = {}
270
 
        testuser['firstname'] = "John"
271
 
        testuser['lastname'] = "Doe"
272
 
        testuser['email'] = "jd208@gmail.com"
273
 
        testuser['crsid'] = "eat12"
274
 
        testuser['password_one'] = "helloworld"
275
 
        testuser['password_again'] = "helloworld"
276
 
        testuser['subject'] = "FIN"
277
 
        testuser['type'] = "U1"
278
 
        testuser['interests'] = [self.eventtag.id]
279
 
        testuser['start_showflagstatus'] = True
280
 
        testuser['college'] = self.college.id
281
 
        
282
 
        registerForm = RegisterForm(testuser, crsid = testuser['crsid'])
283
 
        self.assert_(registerForm.is_valid())
284
 
        user, activate = registerForm.save()
285
 
        
286
 
        cambridgeform = CambridgeRegisterForm(testuser, crsid = testuser['crsid'])
287
 
        self.assert_(cambridgeform.is_valid())
288
 
        cambridgeform.pk = user.pk
289
 
        cambridgeform.save()
290
 
        
291
 
        user.GiveDefaults()
292
 
        
293
 
        # Requires activation
294
 
        self.assert_(activate)
295
 
        
296
 
        self.assertEquals(user.firstname, testuser['firstname'])
297
 
        self.assertEquals(user.lastname, testuser['lastname'])
298
 
        self.assertEquals(user.email, testuser['email'])
299
 
        self.assertEquals(user.person_ptr.cambridgemember.type, testuser['type'])
300
 
        self.assertEquals(user.person_ptr.cambridgemember.subject, testuser['subject'])
301
 
        self.assertEquals(bool(user.activationlinkkey), True)
302
 
        self.assertEquals(user.membershipstatus, "EP")
303
 
        self.assertEquals(len(mail.outbox), 1)
304
 
        self.assertEquals(len(user.groups.all()), 1)
305
 
        self.assertEquals(bool(len(user.links.all())), True)
306
 
        self.assertEquals(user.CheckPassword(testuser['password_one']), True)
307
 
    
308
 
    def testRegistrationEmailDuplicate(self):
309
 
       
310
 
        testuser = {}
311
 
        testuser['firstname'] = "John"
312
 
        testuser['lastname'] = "Doe"
313
 
        testuser['email'] = "jd208@gmail.com"
314
 
        testuser['crsid'] = "eat12"
315
 
        testuser['password_one'] = "helloworld"
316
 
        testuser['password_again'] = "helloworld"
317
 
 
318
 
        registerForm = RegisterForm(testuser)
319
 
        self.assertEquals(registerForm.is_valid(), True)
320
 
        registerForm.save()
321
 
        
322
 
        registerForm = RegisterForm(testuser)
323
 
        self.assertEquals(registerForm.is_valid(), False)
324
 
        self.assertEquals(registerForm.errors['email'], ["User with this Email address already exists."])
325
 
    
326
 
    def testRegistrationTwoNoCRSID(self):
327
 
        ''' Multiple users can register without a CRSID. '''
328
 
        testusera = {}
329
 
        testusera['firstname'] = "John"
330
 
        testusera['lastname'] = "Doe"
331
 
        testusera['email'] = "jd208@gmail.com"
332
 
        testusera['password_one'] = "helloworld"
333
 
        testusera['password_again'] = "helloworld"
334
 
        
335
 
        testuserb = {}
336
 
        testuserb['firstname'] = "John"
337
 
        testuserb['lastname'] = "Doe"
338
 
        testuserb['email'] = "jigglypuff@gmail.com"
339
 
        testuserb['password_one'] = "helloworld"
340
 
        testuserb['password_again'] = "helloworld"
341
 
 
342
 
        registerForm = RegisterForm(testusera)
343
 
        registerForm.is_valid()
344
 
        newuser, activate = registerForm.save()
345
 
        
346
 
        camForm = CambridgeRegisterForm(testusera, crsid = None, pk = newuser.pk)
347
 
        camForm.is_valid()
348
 
        camForm.save()
349
 
 
350
 
        registerForm = RegisterForm(testuserb)
351
 
        registerForm.is_valid()
352
 
        newuser, activate = registerForm.save()
353
 
        camForm = CambridgeRegisterForm(testuserb, crsid = None, pk = newuser.pk)
354
 
        camForm.is_valid()
355
 
        camForm.save()
356
 
    
 
 
b'\\ No newline at end of file'