[Checkins] SVN: grokapps/LoginDemo/ refactored functional tests; added join.txt testing join process, permissions and member listing

Luciano Ramalho luciano at ramalho.org
Sat Dec 29 01:27:51 EST 2007


Log message for revision 82534:
  refactored functional tests; added join.txt testing join process, permissions and member listing
  

Changed:
  _U  grokapps/LoginDemo/
  _U  grokapps/LoginDemo/src/
  U   grokapps/LoginDemo/src/logindemo/app.py
  U   grokapps/LoginDemo/src/logindemo/ftests/index.txt
  A   grokapps/LoginDemo/src/logindemo/ftests/join.txt
  U   grokapps/LoginDemo/src/logindemo/ftests/test_functional.py

-=-

Property changes on: grokapps/LoginDemo
___________________________________________________________________
Name: svn:ignore
   + develop-eggs
eggs
bin
parts
.installed.cfg



Property changes on: grokapps/LoginDemo/src
___________________________________________________________________
Name: svn:ignore
   + LoginDemo.egg-info


Modified: grokapps/LoginDemo/src/logindemo/app.py
===================================================================
--- grokapps/LoginDemo/src/logindemo/app.py	2007-12-29 05:32:49 UTC (rev 82533)
+++ grokapps/LoginDemo/src/logindemo/app.py	2007-12-29 06:27:51 UTC (rev 82534)
@@ -24,9 +24,6 @@
     session.loginpagename = 'login'
     pau.credentialsPlugins = ('No Challenge if Authenticated', 'session',)
         
-class ViewMemberListing(grok.Permission):
-    grok.name('logindemo.ViewMemberListing')
-
 class LoginDemo(grok.Application, grok.Container):
     """
     An app that lets you create an account and change your password.
@@ -34,6 +31,9 @@
     grok.local_utility(PluggableAuthentication, IAuthentication,
                        setup=setup_pau)
     
+class ViewMemberListing(grok.Permission):
+    grok.name('logindemo.ViewMemberListing')
+
 class Master(grok.View):
     """
     The master page template macro.
@@ -47,7 +47,7 @@
     
 class Index(Master):
     """
-    The main page, where the user can login or click a link to join.
+    The main page, showing user data and member count.
     """
 
     def members(self):
@@ -89,7 +89,7 @@
     """
     form_fields = grok.AutoFields(IUser)
     form_title = u'User registration'
-
+    
     @grok.action('Save')
     def join(self, **data):
         login = data['login']

Modified: grokapps/LoginDemo/src/logindemo/ftests/index.txt
===================================================================
--- grokapps/LoginDemo/src/logindemo/ftests/index.txt	2007-12-29 05:32:49 UTC (rev 82533)
+++ grokapps/LoginDemo/src/logindemo/ftests/index.txt	2007-12-29 06:27:51 UTC (rev 82534)
@@ -16,22 +16,22 @@
     '...<dt>principal.id</dt>...<dd>zope.anybody</dd>...'
     >>> browser.contents
     '...<dt>principal.title</dt>...<dd>Unauthenticated User</dd>...'
-    >>> 'You are <em>not </em>logged in.' in browser.contents
+    >>> 'you are not logged in' in browser.contents
     True
     
-If the user is already authenticated, he will se a different message::
+If the user is already authenticated, he will see a different message::
 
     >>> auth_browser = Browser()
     >>> auth_browser.addHeader('Authorization', 'Basic mgr:mgrpw')
     >>> auth_browser.open('http://localhost/ld/')                 
-    >>> 'You are logged in.' in auth_browser.contents
+    >>> 'logged in as' in auth_browser.contents
     True
 
 Back to our original browser, let's use the login form to authenticate.
 
 (XXX I don't know why mgr:mgrpw authenticates when we add a basic auth header
 like in the previous test but does not work when we provide the values
-through the form like in the next test)
+through the form in the next test)
 
 Initially we don't have a regular user for testing, so any attempt to login
 will lead to the login form with a feedback message::
@@ -43,34 +43,3 @@
     'http://localhost/ld/login'
     >>> 'Invalid login name and/or password' in browser.contents
     True
-            
-Now we use the join form to create an account::
-
-    >>> browser.getLink('join').click()
-    >>> browser.getControl(name='form.login').value = 'fred'
-    >>> browser.getControl(name='form.password').value = 'wilma'
-    >>> browser.getControl(name='form.name').value = 'Fred Flintstone'
-    >>> browser.getControl('Save').click()
-    
-This redirects to the login form again. The login name is filled in, so we
-just need to fill the password to log in.
-
-    >>> browser.getControl(name='login').value
-    'fred'
-    >>> browser.getControl(name='password').value = 'wilma'
-    >>> browser.getControl('Log in').click()
-    
-After we log in, user name and login are shown in the top bar::
-
-    >>> browser.contents
-    '...Fred Flintstone...(fred)...'
-    
-We can always log out, which leads us back to the main page::
-
-    >>> browser.getLink('logout').click()
-    >>> browser.url
-    'http://localhost/ld'
-    >>> 'you are not logged in' in browser.contents
-    True
-    
-    

Added: grokapps/LoginDemo/src/logindemo/ftests/join.txt
===================================================================
--- grokapps/LoginDemo/src/logindemo/ftests/join.txt	                        (rev 0)
+++ grokapps/LoginDemo/src/logindemo/ftests/join.txt	2007-12-29 06:27:51 UTC (rev 82534)
@@ -0,0 +1,69 @@
+========================
+Testing the join process
+========================
+
+Setup the app and our test browser, and go to the main page::
+
+    >>> from logindemo.app import LoginDemo
+    >>> root = getRootFolder()
+    >>> app = root['ld'] = LoginDemo()
+    >>> browser = Browser()
+    >>> browser.open('http://localhost/ld/')
+    
+Initially, there are no accounts::
+
+    >>> 'No one has joined so far.' in browser.contents
+    True
+    
+Now we use the join form to create an account::
+
+    >>> browser.getLink('join').click()
+    >>> browser.getControl(name='form.login').value = 'naoh'
+    >>> browser.getControl(name='form.password').value = 'atra'
+    >>> browser.getControl(name='form.name').value = 'Naoh'
+    >>> browser.getControl('Save').click()
+    
+This redirects to the login form again. The login name is filled in, so we
+just need to fill the password to log in.
+
+    >>> browser.getControl(name='login').value
+    'naoh'
+    >>> browser.getControl(name='password').value = 'atra'
+    >>> browser.getControl('Log in').click()
+    
+After we log in, user name and login are shown in the top bar::
+
+    >>> browser.contents
+    '...Naoh...(naoh)...'
+    
+We can always log out, which leads us back to the main page::
+
+    >>> browser.getLink('logout').click()
+    >>> browser.url
+    'http://localhost/ld'
+    >>> 'you are not logged in' in browser.contents
+    True
+    
+The main page now records the fact that there is an account now::    
+
+    >>> 'One member has joined so far.' in browser.contents
+    True
+    
+In order to see the member listing, we must login again. If we click the
+"View member listing" link we are redirected to the login form. After we
+log in, we are then we are redirected to the member listing page::
+
+    >>> browser.getLink('View member listing').click()
+    >>> browser.url.startswith('http://localhost/ld/@@login')
+    True
+    >>> browser.getControl(name='login').value = 'naoh'
+    >>> browser.getControl(name='password').value = 'atra'
+    >>> browser.getControl('Log in').click()
+    >>> browser.url
+    'http://localhost/ld/listing'
+    
+Now we can see that our name is in the list::
+
+    >>> browser.contents
+    '...<td...>naoh</td>...<td...>Naoh</td>...'
+    

Modified: grokapps/LoginDemo/src/logindemo/ftests/test_functional.py
===================================================================
--- grokapps/LoginDemo/src/logindemo/ftests/test_functional.py	2007-12-29 05:32:49 UTC (rev 82533)
+++ grokapps/LoginDemo/src/logindemo/ftests/test_functional.py	2007-12-29 06:27:51 UTC (rev 82534)
@@ -12,7 +12,7 @@
 
 def test_suite():
     suite = unittest.TestSuite()
-    docfiles = ['index.txt']
+    docfiles = ['index.txt', 'join.txt']
 
     for docfile in docfiles:
         test = FunctionalDocFileSuite(



More information about the Checkins mailing list