[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