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
13
class UserTests(TestCase):
17
self.fergus = User.objects.create(
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")
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"})
27
pidgelink = StartLink.objects.create(url = "http://www.google.com", name = "Google", owner = thePidge, defaultlink = True)
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")
35
def testCheckPasswordCorrect(self):
36
''' CheckPassword when password is good '''
37
self.assertEquals(self.fergus.CheckPassword("password"), True)
39
def testCheckPasswordIncorrect(self):
40
''' CheckPassword when password is bad '''
41
self.assertRaises(User.PasswordError, self.fergus.CheckPassword, "password1")
43
def testCheckPasswordBlank(self):
44
''' CheckPassword when password is blank '''
45
self.assertRaises(User.PasswordError, self.fergus.CheckPassword, "")
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)
53
#self.fergus.links.add(s)
54
self.assertEquals(len(self.fergus.GetAllLinks()), 1)
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)
62
self.fergus.links.add(s)
63
self.assertEquals(len(self.fergus.GetLinks()), 1)
65
def testGiveDefaults(self):
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'''
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)
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)
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)
89
def testSaveUpdate(self):
90
''' Updates existing record successfully. '''
91
self.fergus.firstname = "Freegus"
93
self.assertEquals(self.fergus.firstname, "Freegus")
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)
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)
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)
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"))
122
class UserManagerTests(TestCase):
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")
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)
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"})
139
pidgelink = StartLink.objects.create(url = "http://www.google.com", name = "Google", owner = thePidge, defaultlink = True)
142
def testActivationNoKey(self):
143
''' No activation key given '''
144
self.assertRaises(User.InvalidKey, User.objects.Activate, "")
146
def testActivationCorrect(self):
147
''' Activation key for correct user '''
148
self.assertEquals(User.objects.Activate("teddy"), self.usertwo)
150
def testActivationAlreadyActivated(self):
151
''' Activation key for User that is already OK '''
152
self.assertRaises(User.AlreadyActive, User.objects.Activate, "tweed")
154
def testActivationNotPending(self):
155
''' Activation key for User that is neither OK nor EP '''
156
self.assertRaises(User.ActivationNotPending, User.objects.Activate, "beenhere")
159
def testAuthenticationCRSID(self):
160
''' Authenticate with CRSID '''
161
self.assertEquals(self.fergus.Authenticate(), None)
163
def testAuthenticationGood(self):
164
''' Authenticate with bona fide password '''
165
self.assertEquals(self.fergus.Authenticate(password="password"), None)
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
172
def testAuthenticationDeactivated(self):
173
''' Authenticate with DA-status user. '''
174
self.assertRaises(User.Deactivated, self.baduser.Authenticate, password="loggame")
176
def testAuthenticationBadPassword(self):
177
''' Authenticate with bad password '''
178
self.assertRaises(User.DetailsError, self.fergus.Authenticate, password="password2")
181
def testRegistrationCRSIDAndEmail(self):
182
''' Correct registration for Cambridge user with Raven and @cam.ac.uk returns user with same characteristics and activated user. '''
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"
191
registerForm = RegisterForm(testuser, crsid=testuser['crsid'])
192
self.assert_(registerForm.is_valid())
193
user, activate = registerForm.save()
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)
202
def testRegistrationCRSID(self):
203
''' Correct registration for Cambridge user with Raven raises activation requirement. '''
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"
212
registerForm = RegisterForm(testuser, crsid = testuser['crsid'])
213
self.assert_(registerForm.is_valid())
215
user, activate = registerForm.save()
217
cambridgeform = CambridgeRegisterForm(testuser, crsid = testuser['crsid'])
218
self.assert_(cambridgeform.is_valid())
219
cambridgeform.pk = user.pk
221
# Do this after saving cambridgeform so they get a link to their college
224
# Requires activation
225
self.assert_(activate)
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)
237
def testRegistrationNormal(self):
238
''' Correct reg for normal user [no crsid] '''
241
testuser['firstname'] = "John"
242
testuser['lastname'] = "Doe"
243
testuser['email'] = "jd208@gmail.com"
244
testuser['password_one'] = "helloworld"
245
testuser['password_again'] = "helloworld"
247
registerForm = RegisterForm(testuser)
248
self.assert_(registerForm.is_valid())
249
user, activate = registerForm.save()
253
# Requires activation
254
self.assert_(activate)
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)
265
def testRegistrationFull(self):
266
''' Correct reg for user who supplies all attributes '''
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
282
registerForm = RegisterForm(testuser, crsid = testuser['crsid'])
283
self.assert_(registerForm.is_valid())
284
user, activate = registerForm.save()
286
cambridgeform = CambridgeRegisterForm(testuser, crsid = testuser['crsid'])
287
self.assert_(cambridgeform.is_valid())
288
cambridgeform.pk = user.pk
293
# Requires activation
294
self.assert_(activate)
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)
308
def testRegistrationEmailDuplicate(self):
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"
318
registerForm = RegisterForm(testuser)
319
self.assertEquals(registerForm.is_valid(), True)
322
registerForm = RegisterForm(testuser)
323
self.assertEquals(registerForm.is_valid(), False)
324
self.assertEquals(registerForm.errors['email'], ["User with this Email address already exists."])
326
def testRegistrationTwoNoCRSID(self):
327
''' Multiple users can register without a CRSID. '''
329
testusera['firstname'] = "John"
330
testusera['lastname'] = "Doe"
331
testusera['email'] = "jd208@gmail.com"
332
testusera['password_one'] = "helloworld"
333
testusera['password_again'] = "helloworld"
336
testuserb['firstname'] = "John"
337
testuserb['lastname'] = "Doe"
338
testuserb['email'] = "jigglypuff@gmail.com"
339
testuserb['password_one'] = "helloworld"
340
testuserb['password_again'] = "helloworld"
342
registerForm = RegisterForm(testusera)
343
registerForm.is_valid()
344
newuser, activate = registerForm.save()
346
camForm = CambridgeRegisterForm(testusera, crsid = None, pk = newuser.pk)
350
registerForm = RegisterForm(testuserb)
351
registerForm.is_valid()
352
newuser, activate = registerForm.save()
353
camForm = CambridgeRegisterForm(testuserb, crsid = None, pk = newuser.pk)
b'\\ No newline at end of file'