witten
/
luminotes
Archived
1
0
Fork 0

Unit tests for controller.Users.redeem_invite().

This commit is contained in:
Dan Helfman 2007-12-28 06:36:57 +00:00
parent f00809955c
commit bb1bbb26e1
1 changed files with 279 additions and 1 deletions

View File

@ -1476,7 +1476,7 @@ class Test_users( Test_controller ):
assert "access" in result[ u"error" ]
def test_revoke_invite( self ):
# trick revoke_invite() into using a fake SMTP server
# trick send_invite() into using a fake SMTP server
Stub_smtp.reset()
smtplib.SMTP = Stub_smtp
self.login()
@ -1613,6 +1613,284 @@ class Test_users( Test_controller ):
assert result[ u"error" ]
assert "access" in result[ u"error" ]
def test_redeem_invite( self ):
# trick send_invite() into using a fake SMTP server
Stub_smtp.reset()
smtplib.SMTP = Stub_smtp
self.login()
self.user.rate_plan = 1
self.database.save( self.user )
email_addresses_list = [ u"foo@example.com" ]
email_addresses = email_addresses_list[ 0 ]
self.http_post( "/users/send_invites", dict(
notebook_id = self.notebooks[ 0 ].object_id,
email_addresses = email_addresses,
access = u"viewer",
invite_button = u"send invites",
), session_id = self.session_id )
matches = self.INVITE_LINK_PATTERN.search( smtplib.SMTP.message )
invite_id = matches.group( 2 )
result = self.http_post( "/users/redeem_invite", dict(
invite_id = invite_id,
) )
# assert that a redeem invite page is returned with sign up / login links
assert result[ u"notebook" ].object_id == self.anon_notebook.object_id
assert result[ u"notebook" ].name == self.anon_notebook.name
assert len( result[ u"startup_notes" ] ) == 1
assert result[ u"total_notes_count" ] == 1
assert result[ u"note_read_write" ] == False
assert len( result[ u"notes" ] ) == 1
assert result[ u"notes" ][ 0 ].object_id == "redeem_invite"
assert u"sign up" in result[ u"notes" ][ 0 ].contents
assert u"login" in result[ u"notes" ][ 0 ].contents
assert result[ u"notes" ][ 0 ].notebook_id == self.anon_notebook.object_id
assert len( result[ u"invites" ] ) == 0
def test_redeem_invite_unknown( self ):
result = self.http_post( "/users/redeem_invite", dict(
invite_id = "unknowninviteid",
) )
assert result[ u"error" ]
assert u"unknown" in result[ u"error" ]
def test_redeem_invite_after_login( self ):
Stub_smtp.reset()
smtplib.SMTP = Stub_smtp
self.login()
self.user.rate_plan = 1
self.database.save( self.user )
email_addresses_list = [ u"foo@example.com" ]
email_addresses = email_addresses_list[ 0 ]
self.http_post( "/users/send_invites", dict(
notebook_id = self.notebooks[ 0 ].object_id,
email_addresses = email_addresses,
access = u"viewer",
invite_button = u"send invites",
), session_id = self.session_id )
matches = self.INVITE_LINK_PATTERN.search( smtplib.SMTP.message )
invite_id = matches.group( 2 )
self.login2()
result = self.http_post( "/users/redeem_invite", dict(
invite_id = invite_id,
), session_id = self.session_id )
# assert that access has been granted
assert cherrypy.root.users.check_access( self.user2.object_id, self.notebooks[ 0 ].object_id )
assert cherrypy.root.users.check_access( self.user2.object_id, self.notebooks[ 0 ].trash_id )
# assert that the user is redirected to the notebook that the invite is for
assert result[ u"redirect"].startswith( u"/notebooks/" )
notebook_id = result[ u"redirect" ].split( u"/notebooks/" )[ -1 ]
assert notebook_id == self.notebooks[ 0 ].object_id
def test_redeem_invite_after_login_already_redeemed( self ):
Stub_smtp.reset()
smtplib.SMTP = Stub_smtp
self.login()
self.user.rate_plan = 1
self.database.save( self.user )
email_addresses_list = [ u"foo@example.com" ]
email_addresses = email_addresses_list[ 0 ]
self.http_post( "/users/send_invites", dict(
notebook_id = self.notebooks[ 0 ].object_id,
email_addresses = email_addresses,
access = u"viewer",
invite_button = u"send invites",
), session_id = self.session_id )
matches = self.INVITE_LINK_PATTERN.search( smtplib.SMTP.message )
invite_id = matches.group( 2 )
self.login2()
self.http_post( "/users/redeem_invite", dict(
invite_id = invite_id,
), session_id = self.session_id )
result = self.http_post( "/users/redeem_invite", dict(
invite_id = invite_id,
), session_id = self.session_id )
# assert that access is still granted
assert cherrypy.root.users.check_access( self.user2.object_id, self.notebooks[ 0 ].object_id )
assert cherrypy.root.users.check_access( self.user2.object_id, self.notebooks[ 0 ].trash_id )
# assert that the user is redirected to the notebook that the invite is for
assert result[ u"redirect"].startswith( u"/notebooks/" )
notebook_id = result[ u"redirect" ].split( u"/notebooks/" )[ -1 ]
assert notebook_id == self.notebooks[ 0 ].object_id
def test_redeem_invite_after_login_already_redeemed_by_different_user( self ):
Stub_smtp.reset()
smtplib.SMTP = Stub_smtp
self.login()
self.user.rate_plan = 1
self.database.save( self.user )
email_addresses_list = [ u"foo@example.com" ]
email_addresses = email_addresses_list[ 0 ]
self.http_post( "/users/send_invites", dict(
notebook_id = self.notebooks[ 0 ].object_id,
email_addresses = email_addresses,
access = u"viewer",
invite_button = u"send invites",
), session_id = self.session_id )
matches = self.INVITE_LINK_PATTERN.search( smtplib.SMTP.message )
invite_id = matches.group( 2 )
self.login2()
self.http_post( "/users/redeem_invite", dict(
invite_id = invite_id,
), session_id = self.session_id )
self.login()
result = self.http_post( "/users/redeem_invite", dict(
invite_id = invite_id,
), session_id = self.session_id )
assert u"already" in result[ u"error" ]
def test_redeem_invite_already_redeemed( self ):
Stub_smtp.reset()
smtplib.SMTP = Stub_smtp
self.login()
self.user.rate_plan = 1
self.database.save( self.user )
email_addresses_list = [ u"foo@example.com" ]
email_addresses = email_addresses_list[ 0 ]
self.http_post( "/users/send_invites", dict(
notebook_id = self.notebooks[ 0 ].object_id,
email_addresses = email_addresses,
access = u"viewer",
invite_button = u"send invites",
), session_id = self.session_id )
matches = self.INVITE_LINK_PATTERN.search( smtplib.SMTP.message )
invite_id = matches.group( 2 )
self.http_post( "/users/redeem_invite", dict(
invite_id = invite_id,
), session_id = self.session_id )
result = self.http_post( "/users/redeem_invite", dict(
invite_id = invite_id,
) )
assert result[ u"error" ]
assert u"already" in result[ u"error" ]
def test_redeem_invite_already_redeemed( self ):
Stub_smtp.reset()
smtplib.SMTP = Stub_smtp
self.login()
self.user.rate_plan = 1
self.database.save( self.user )
email_addresses_list = [ u"foo@example.com" ]
email_addresses = email_addresses_list[ 0 ]
self.http_post( "/users/send_invites", dict(
notebook_id = self.notebooks[ 0 ].object_id,
email_addresses = email_addresses,
access = u"viewer",
invite_button = u"send invites",
), session_id = self.session_id )
matches = self.INVITE_LINK_PATTERN.search( smtplib.SMTP.message )
invite_id = matches.group( 2 )
del( self.database.objects[ self.notebooks[ 0 ].object_id ] )
result = self.http_post( "/users/redeem_invite", dict(
invite_id = invite_id,
) )
assert result[ u"error" ]
assert u"unknown" in result[ u"error" ]
def test_redeem_invite_missing_anonymous_user( self ):
Stub_smtp.reset()
smtplib.SMTP = Stub_smtp
self.login()
self.user.rate_plan = 1
self.database.save( self.user )
email_addresses_list = [ u"foo@example.com" ]
email_addresses = email_addresses_list[ 0 ]
self.http_post( "/users/send_invites", dict(
notebook_id = self.notebooks[ 0 ].object_id,
email_addresses = email_addresses,
access = u"viewer",
invite_button = u"send invites",
), session_id = self.session_id )
matches = self.INVITE_LINK_PATTERN.search( smtplib.SMTP.message )
invite_id = matches.group( 2 )
del( self.database.objects[ self.anonymous.object_id ] )
result = self.http_post( "/users/redeem_invite", dict(
invite_id = invite_id,
) )
assert result[ u"error" ]
def test_redeem_invite_missing_invite_notebook( self ):
Stub_smtp.reset()
smtplib.SMTP = Stub_smtp
self.login()
self.user.rate_plan = 1
self.database.save( self.user )
email_addresses_list = [ u"foo@example.com" ]
email_addresses = email_addresses_list[ 0 ]
self.http_post( "/users/send_invites", dict(
notebook_id = self.notebooks[ 0 ].object_id,
email_addresses = email_addresses,
access = u"viewer",
invite_button = u"send invites",
), session_id = self.session_id )
matches = self.INVITE_LINK_PATTERN.search( smtplib.SMTP.message )
invite_id = matches.group( 2 )
del( self.database.objects[ self.notebooks[ 0 ].object_id ] )
result = self.http_post( "/users/redeem_invite", dict(
invite_id = invite_id,
) )
assert result[ u"error" ]
def test_convert_invite_to_access( self ):
# trick send_invites() into using a fake SMTP server
Stub_smtp.reset()