Commits

kkub...@bcc190cf-cafb-0310-a4f2-bffc1f526a37  committed 2f4f507

[gsoc2009-testing] Adding exclusion rules to coverage. Restructuring windmill tests. Starting work on docs. Fixed import issues when running with coverage. Add per-test models to TransactionTests.

  • Participants
  • Parent commits b54a87f
  • Branches soc2009/test-improvements

Comments (0)

Files changed (7)

File django/test/testcases.py

 
     def _test_model_setup(self):
         if hasattr(self, 'test_models'):
-            print self.test_models
+            #print self.test_models
             if self.__module__.endswith('tests'):
                 app_label = self.__module__.split('.')[:-1][-1]
+                app_path = '.'.join(self.__module__.split('.')[:-1])
             else:
                 app_label = self.__module__.split('.')[:-2][-1]
+                app_path = '.'.join(self.__module__.split('.')[:-2])
             from django.db.models.loading import cache
             from django.utils import importlib
             from django.db import models
                 app_mods = cache.app_models[app_label]
                 for tm in self.test_models:
                     #print "importing %s " % tm
-                    im = importlib.import_module(tm)
+                    im = importlib.import_module(app_path + '.' + tm)
                     #cache.app_store[im] = len(cache.app_store)
                     #print "finding model classes"
                     mod_classes =  [f for f in im.__dict__.values() if hasattr(f,'__bases__') and issubclass(f,models.Model)]
 
     def _test_model_teardown(self):
         if hasattr(self, 'test_models'):
-            print self.test_models
+            #print self.test_models
             if self.__module__.endswith('tests'):
                 app_label = self.__module__.split('.')[:-1][-1]
+                app_path = '.'.join(self.__module__.split('.')[:-1])
             else:
                 app_label = self.__module__.split('.')[:-2][-1]
+                app_path = '.'.join(self.__module__.split('.')[:-2])
             from django.db.models.loading import cache
             from django.utils import importlib
             from django.db import models
             cache.write_lock.acquire()
             try:
                app_mods = cache.app_models[app_label]
-               print app_mods
+               #print app_mods
                for tm in self.test_models:
                    #print "importing %s " % tm
-                   im = importlib.import_module(tm)
+                   im = importlib.import_module(app_path + '.' + tm)
                    #cache.app_store[im] = len(cache.app_store)
                    #print "finding model classes"
                    mod_classes =  [f for f in im.__dict__.values() if hasattr(f,'__bases__') and issubclass(f,models.Model)]

File docs/howto/windmill-tests.txt

 .. _howto-windmill-tests:
 
 Writing a Functional Tests with Windmill
-=======================================
+========================================
 
 .. currentmodule:: django.test
 
-If you need to provide custom file storage -- a common example is storing files
-on some remote system -- you can do so by defining a custom storage class.
-You'll need to follow these steps:
+If you need to test overall behaviors of your site, ajax widgets or rendered 
+html, then functional tests are the solution. Django includes support for the 
+popular `Windmill`_ framework. Writing a windmill test 
+is simple, following these steps:
 
-#. Your custom storage system must be a subclass of
-   ``django.core.files.storage.Storage``::
+.. _Windmill: http://getwindmill.com
+#. Your windmill tests must be their own module, named ``wmtests`` or ``windmilltests``.
+  
 
-        from django.core.files.storage import Storage
+#. Django must be able to run any function in the module without arguments.
+::
+        from windmill.conf import global_settings
+        ADMIN_URL =  "%s/test_admin/admin" % global_settings.TEST_URL
+        from windmill.authoring import WindmillTestClient
+        from django.test.utils import calling_func_name
 
-        class MyStorage(Storage):
-            ...
+        def test_loginAndSetup():
+           '''Mostly just a proof of concept to test working order of tests.'''
+           client = WindmillTestClient(calling_func_name())
 
-#. Django must be able to instantiate your storage system without any arguments.
-   This means that any settings should be taken from ``django.conf.settings``::
+           client.open(url='http://localhost:8000/admin')
+           client.waits.forPageLoad(timeout=u'20000')
+           ...
 
-        from django.conf import settings
-        from django.core.files.storage import Storage
-
-        class MyStorage(Storage):
-            def __init__(self, option=None):
-                if not option:
-                    option = settings.CUSTOM_STORAGE_OPTIONS
-                ...
-
-#. Your storage class must implement the ``_open()`` and ``_save()`` methods,
-   along with any other methods appropriate to your storage class. See below for
-   more on these methods.
-
-   In addition, if your class provides local file storage, it must override
-   the ``path()`` method.
+#. Your windmill testing module must load any files other than the module loader 
+    in ``__init__.py``. 
+    ::
+        from primary.py import * 
 
 Your custom storage system may override any of the storage methods explained in
 :ref:`ref-files-storage`, but you **must** implement the following methods:

File docs/topics/testing.txt

 :setting:`TEST_RUNNER` setting. For convenience, Django ships a runner for
 the framework used in testing the :ref:`admin interface, <ref-contrib-admin>`
 Windmill_. Details on integrating Windmill tests with Django are available 
-:ref:`here. <howto-windmill-test>`
+:ref:`here. <howto-windmill-tests>`
 
 .. _Twill: http://twill.idyll.org/
 .. _Windmill: http://www.getwindmill.com/
 can be certain that the outcome of a test will not be affected by another test,
 or by the order of test execution.
 
+.. _topics-testing-urlconf:
+
 URLconf configuration
 ~~~~~~~~~~~~~~~~~~~~~
 
 This test case will use the contents of ``myapp.test_urls`` as the
 URLconf for the duration of the test case.
 
+.. _topics-testing-testmodels:
+
+Test-Only Models configuration
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. versionadded:: 1.1
+
+.. attribute:: TransactionTestCase.test_models
+
+If you want to test your application with models that are only available during specific
+test cases, ``django.test.TransactionTestCase`` provides the ability to customize the models
+configuration for the duration of the execution of a test suite. If your
+``TransactionTestCase`` instance defines an ``test_models`` attribute, the ``TransactionTestCase`` will load
+the value of that attribute as a module, and load the models contained within for the 
+duration of that test.
+
+For example::
+
+    from django.test import TransactionTestCase
+
+    class TestMyViews(TransactionTestCase):
+        test_models = ['test_models']
+
+        def testIndexPageView(self):
+            # Here you'd test your view using ``Client``.
+
+This test case will load the contents of ``myapp.test_models`` and add
+any subclass of ``django.db.models.Model`` to ``myapp.models``.
+
 .. _emptying-test-outbox:
 
 Emptying the test outbox

File tests/regressiontests/admin_views/tests.py

 
 class AdminViewBasicTest(TestCase):
     fixtures = ['admin-views-users.xml', 'admin-views-colors.xml', 'admin-views-fabrics.xml']
-    test_models = ['regressiontests.admin_views.test_models']
+    test_models = ['test_models']
     # Store the bit of the URL where the admin is registered as a class
     # variable. That way we can test a second AdminSite just by subclassing
     # this test case and changing urlbit.

File tests/regressiontests/admin_views/windmilltests/__init__.py

 # import functest
 # functest.modules_passed = []
 # functest.modules_failed = []
-
-def test_loginAndSetup():
-    '''Mostly just a proof of concept to test working order of tests.'''
-    client = WindmillTestClient(calling_func_name())
-
-    # print dir(client)
-    #    print dir(client.open)
-    #    print dir(client.commands)
-    #    print client.commands()
-
-    client.open(url=ADMIN_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    client.open(url=ADMIN_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    client.type(text=u'super', id=u'id_username')
-    client.type(text=u'secret', id=u'id_password')
-    client.click(value=u'Log in')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertNode(xpath=u"//div[@id='content-main']/div/table/tbody/tr[1]/th")
-    client.asserts.assertNode(link=u'Articles')
-    client.asserts.assertNode(link=u'Add')
-    client.asserts.assertNode(link=u'Change')
-    client.asserts.assertNode(link=u'Admin_Views')
-    client.asserts.assertNode(xpath=u"//div[@id='user-tools']/strong")
-    client.click(xpath=u"//div[@id='content-main']/div/table/tbody/tr[22]/td/a")
-    client.waits.forPageLoad(timeout=u'20000')
-    client.type(text=u'Test Section', id=u'id_name')
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertNode(link=u'Section object')
-    client.click(link=u'         Admin_views       ')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'Add', timeout=u'8000')
-    client.click(link=u'Add')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.type(text=u'Test 1', id=u'id_title')
-    client.type(text=u'This is test content.', id=u'id_content')
-    client.click(link=u'Today')
-    client.click(link=u'Now')
-    client.click(id=u'id_section')
-    client.select(option=u'Section object', id=u'id_section')
-    client.click(value=u'1')
-    #client.asserts.assertValue(validator=u'2009-06-16', id=u'id_date_0')
-    #client.asserts.assertValue(validator=u'13:31:21', id=u'id_date_1')
-    client.asserts.assertNode(id=u'id_section')
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertNode(link=u'This is test content.')
-    client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[2]")
-    client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[3]")
-    client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[4]")
-    client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[5]")
-    client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th")
-    client.click(link=u'Today')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th")
-    client.click(link=u'        Home       ')
-    client.waits.forPageLoad(timeout=u'20000')
-
-def test_changeListNamingLinkingHistory():
-    '''Creating a Model with strings for pk, and checking history.'''
-    client = WindmillTestClient(calling_func_name())
-    client.open(url=ADMIN_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    # client.open(url=ADMIN_URL)
-    #     client.type(text=u'super', id=u'id_username')
-    #     client.type(text=u'secret', id=u'id_password')
-    #     client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'Model with string primary keys', timeout=u'8000')
-    client.click(link=u'Model with string primary keys')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'              Add model with string primary key             ')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.type(text=u'hello', id=u'id_id')
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    #client.asserts.assertNode(link=u'hello')
-    client.click(link=u'hello')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'History')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertNode(xpath=u"//table[@id='change-history']/tbody/tr/td")
-    client.click(link=u'hello')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertValue(validator=u'hello', id=u'id_id')
-    client.click(link=u'Delete')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertNode(xpath=u"//div[@id='content']/ul/li")
-    client.asserts.assertNode(link=u'hello')
-    client.click(value=u"Yes, I'm sure")
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/p", validator=u'\n\n1 model with string primary key\n\n\n')
-    client.click(link=u'        Home       ')
-
-def test_filtersSearchOnChangeList():
-    '''Testing Updates and Filters/Search on Person Models'''
-    client = WindmillTestClient(calling_func_name())
-
-    client.open(url=ADMIN_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'Persons')
-    client.asserts.assertNode(link=u'John Mauchly')
-    client.asserts.assertNode(link=u'Grace Hooper')
-    client.asserts.assertNode(link=u'Guido van Rossum')
-    client.asserts.assertSelected(validator=u'Male', id=u'id_form-0-gender')
-    client.asserts.assertValue(validator=u'1', id=u'id_form-1-gender')
-    client.asserts.assertSelected(validator=u'Male', id=u'id_form-2-gender')
-    client.asserts.assertValue(validator=u'on', id=u'id_form-0-alive')
-    client.asserts.assertValue(validator=u'on', id=u'id_form-1-alive')
-    client.asserts.assertValue(validator=u'on', id=u'id_form-2-alive')
-    client.click(link=u'John Mauchly')
-    client.asserts.assertValue(validator=u'John Mauchly', id=u'id_name')
-    client.asserts.assertSelected(validator=u'Male', id=u'id_gender')
-    client.asserts.assertValue(validator=u'on', id=u'id_alive')
-    client.check(id=u'id_alive')
-    client.click(xpath=u"//form[@id='person_form']/div/fieldset/div[2]")
-    client.click(id=u'id_gender')
-    client.select(option=u'Female', id=u'id_gender')
-    client.click(value=u'2')
-    client.click(id=u'id_name')
-    client.type(text=u'John Mauchly Updated', id=u'id_name')
-    client.click(name=u'_save')
-    client.asserts.assertSelected(validator=u'Female', id=u'id_form-0-gender')
-    client.asserts.assertValue(validator=u'on', id=u'id_form-0-alive')
-    client.asserts.assertNode(link=u'John Mauchly Updated')
-    client.click(id=u'searchbar')
-    client.type(text=u'John', id=u'searchbar')
-    client.click(value=u'Search')
-    client.asserts.assertNode(link=u'John Mauchly Updated')
-    client.click(link=u'3 total')
-    client.type(text=u'Grace', id=u'searchbar')
-    client.click(value=u'Search')
-    client.asserts.assertNode(link=u'Grace Hooper')
-    client.click(link=u'3 total')
-    client.asserts.assertNode(link=u'Guido van Rossum')
-    client.click(link=u'Female')
-    client.asserts.assertNode(link=u'John Mauchly Updated')
-    client.click(link=u'All')
-    client.asserts.assertNode(link=u'Guido van Rossum')
-    client.click(link=u'        Home       ')
-
-def test_defaultDeleteAdminAction():
-    '''Admin Actions test. Test the default delete action.'''
-    client = WindmillTestClient(calling_func_name())
-
-    client.open(url=ADMIN_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'Fabrics')
-    client.check(name=u'_selected_action')
-    client.click(name=u'action')
-    client.select(option=u'Delete selected fabrics', name=u'action')
-    client.click(value=u'delete_selected')
-    client.click(name=u'index')
-    client.click(value=u"Yes, I'm sure")
-    client.asserts.assertNode(link=u'Vertical')
-    client.asserts.assertNode(link=u'Horizontal')
-
-def test_dateTimeModelsandWidgets():
-    client = WindmillTestClient(calling_func_name())
-
-    client.open(url=ADMIN_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'Articles')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'Date', timeout=u'8000')
-    client.click(link=u'Date')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[2]", validator=u'March 18, 2000, 11:54 a.m.')
-    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr[2]/td[2]", validator=u'March 18, 2008, 11:54 a.m.')
-    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[4]", validator=u'2000')
-    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr[2]/td[4]", validator=u'2008')
-    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr[3]/td[4]", validator=u'2009')
-    client.click(link=u'Modeladmin year')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'Content', timeout=u'8000')
-    client.click(link=u'Content')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[4]", validator=u'2008')
-    client.click(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th/a")
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(xpath=u"//a[@id='calendarlink0']/img", timeout=u'8000')
-    client.click(xpath=u"//a[@id='calendarlink0']/img")
-    client.click(link=u'Cancel')
-    client.click(xpath=u"//a[@id='clocklink0']/img")
-    client.click(link=u'Midnight')
-    client.click(id=u'id_date_1')
-    client.asserts.assertValue(validator=u'00:00:00', id=u'id_date_1')
-    client.click(xpath=u"//a[@id='clocklink0']/img")
-    client.click(link=u'6 a.m.')
-    client.asserts.assertValue(validator=u'06:00:00', id=u'id_date_1')
-    client.click(xpath=u"//a[@id='clocklink0']/img")
-    client.click(link=u'Noon')
-    client.click(id=u'id_date_1')
-    client.asserts.assertValue(validator=u'12:00:00', id=u'id_date_1')
-    client.click(link=u'Articles')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'              Add article             ', timeout=u'8000')
-    client.click(link=u'              Add article             ')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.type(text=u'Test Art', id=u'id_title')
-    client.type(text=u'<p> Test </p>', id=u'id_content')
-    client.click(xpath=u"//a[@id='calendarlink0']/img")
-    client.click(link=u'17')
-    client.click(xpath=u"//a[@id='clocklink0']/img")
-    client.click(link=u'6 a.m.')
-    client.click(id=u'id_section')
-    client.select(option=u'Section object', id=u'id_section')
-    client.click(value=u'1')
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th/a", timeout=u'8000')
-    client.click(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th/a")
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(timeout=u'8000', id=u'id_content')
-    client.click(id=u'id_content')
-    client.type(text=u'<p> Test This </p>', id=u'id_content')
-    client.click(name=u'_continue')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertValue(validator=u'<p> Test This </p>', id=u'id_content')
-    client.click(link=u'Articles')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.check(name=u'_selected_action')
-    client.click(name=u'action')
-    client.check(name=u'_selected_action')
-    client.click(link=u'        Home       ')
-    client.waits.forPageLoad(timeout=u'20000')
-
-def test_inlineEditandCreate():
-    client = WindmillTestClient(calling_func_name())
-
-    client.open(url=ADMIN_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'Parents')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'              Add parent             ', timeout=u'8000')
-    client.click(link=u'              Add parent             ')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.type(text=u'Papa', id=u'id_name')
-    client.type(text=u'Billy', id=u'id_child_set-0-name')
-    client.type(text=u'Bobby', id=u'id_child_set-1-name')
-    client.type(text=u'Betty', id=u'id_child_set-2-name')
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'Parent object', timeout=u'8000')
-    client.click(link=u'Parent object')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertValue(validator=u'Billy', id=u'id_child_set-0-name')
-    client.asserts.assertValue(validator=u'Bobby', id=u'id_child_set-1-name')
-    client.asserts.assertValue(validator=u'Betty', id=u'id_child_set-2-name')
-    client.click(link=u'Home')
-    client.waits.forPageLoad(timeout=u'20000')
-
-
-def test_adminActionEmptyModels():
-    client = WindmillTestClient(calling_func_name())
-
-    client.open(url=ADMIN_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'Empty models')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'              Add empty model             ', timeout=u'8000')
-    client.click(link=u'              Add empty model             ')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(timeout=u'8000', name=u'_save')
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'              Add empty model             ', timeout=u'8000')
-    client.click(link=u'              Add empty model             ')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(timeout=u'8000', name=u'_continue')
-    client.click(name=u'_continue')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'Empty models', timeout=u'8000')
-    client.click(link=u'Empty models')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'Primary key = 2', timeout=u'8000')
-    client.click(link=u'Primary key = 2')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(timeout=u'8000', name=u'_addanother')
-    client.click(name=u'_addanother')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(timeout=u'8000', name=u'_save')
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'Primary key = 3', timeout=u'8000')
-    client.click(link=u'Primary key = 3')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(timeout=u'8000', name=u'_addanother')
-    client.click(name=u'_addanother')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(timeout=u'8000', name=u'_save')
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.check(xpath=u"//div[@id='changelist']/form/table/tbody/tr[2]/td[1]/input")
-    client.check(name=u'_selected_action')
-    client.click(name=u'action')
-    client.select(option=u'Delete selected empty models', name=u'action')
-    client.click(value=u'delete_selected')
-    client.click(name=u'index')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(timeout=u'8000', value=u"Yes, I'm sure")
-    client.click(value=u"Yes, I'm sure")
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'Primary key = 2', timeout=u'8000')
-    client.click(link=u'Primary key = 2')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'Delete', timeout=u'8000')
-    client.click(link=u'Delete')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(timeout=u'8000', value=u"Yes, I'm sure")
-    client.click(value=u"Yes, I'm sure")
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'        Home       ', timeout=u'8000')
-    client.click(link=u'        Home       ')
-    client.waits.forPageLoad(timeout=u'20000')
-
-def test_parentChildRelationship():
-    client = WindmillTestClient(calling_func_name())
-
-    client.open(url=ADMIN_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(xpath=u"//div[@id='content-main']/div/table/tbody/tr[21]/td/a", timeout=u'8000')
-    client.click(xpath=u"//div[@id='content-main']/div/table/tbody/tr[21]/td/a")
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'Recommender object')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'Home')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(xpath=u"//div[@id='content-main']/div/table/tbody/tr[20]/td/a")
-    client.click(id=u'id_recommender')
-    client.select(option=u'Recommender object', id=u'id_recommender')
-    client.click(value=u'1')
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.open(url=ADMIN_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'Languages')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'              Add language             ')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.type(text=u'en', id=u'id_iso')
-    client.type(text=u'testEnglish', id=u'id_name')
-    client.type(text=u'test', id=u'id_english_name')
-    client.click(xpath=u"//form[@id='language_form']/div/fieldset/div[4]/div/label")
-    client.check(id=u'id_shortlist')
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'        Home       ')
-    client.waits.forPageLoad(timeout=u'20000')
-
-def test_AdminAuthContrib():
-    client = WindmillTestClient(calling_func_name())
-
-    client.open(url=ADMIN_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'Users', timeout=u'8000')
-    client.click(link=u'Users')
-    client.waits.forPageLoad(timeout=u'20000')
-    #print client.commands.getPageText()
-    client.asserts.assertNode(link=u'adduser')
-    client.asserts.assertNode(link=u'changeuser')
-    client.asserts.assertNode(link=u'deleteuser')
-    client.asserts.assertNode(link=u'joepublic')
-    client.asserts.assertNode(link=u'super')
-    client.click(link=u'Yes')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertNode(link=u'adduser')
-    client.asserts.assertNode(link=u'changeuser')
-    client.asserts.assertNode(link=u'deleteuser')
-    # client.asserts.assertNode(link=u'super')
-    # client.click(link=u'6 total')
-    # client.waits.forPageLoad(timeout=u'20000')
-    # client.waits.forElement(link=u'super', timeout=u'8000')
-    client.click(link=u'super')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.waits.forElement(link=u'Clear all', timeout=u'8000')
-    client.click(link=u'Clear all')
-    client.click(link=u'Choose all')
-    client.click(name=u'_continue')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertValue(validator=u'2007-05-30', id=u'id_date_joined_0')
-    client.asserts.assertValue(validator=u'13:20:10', id=u'id_date_joined_1')
-    client.asserts.assertValue(validator=u'Super', id=u'id_first_name')
-    client.asserts.assertValue(validator=u'User', id=u'id_last_name')
-    client.asserts.assertValue(validator=u'super@example.com', id=u'id_email')
-    client.asserts.assertValue(validator=u'on', id=u'id_is_staff')
-    client.asserts.assertValue(validator=u'on', id=u'id_is_active')
-    client.asserts.assertValue(validator=u'on', id=u'id_is_superuser')
-    client.asserts.assertValue(validator=u'super', id=u'id_username')
-    client.click(link=u'Users')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.type(text=u'super', id=u'searchbar')
-    client.click(value=u'Search')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertNode(link=u'super')
-    client.click(link=u'        Home       ')
-    client.waits.forPageLoad(timeout=u'20000')
-
-
-def test_contribFlatSitesRedirect():
-    client = WindmillTestClient(calling_func_name())
-
-    client.open(url=ADMIN_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    #print client.commands.getPageText()
-    client.click(xpath=u"//div[@id='content-main']/div[table/caption/a/text()='Flatpages']/table/tbody/tr[1]/td/a")
-    client.waits.forPageLoad(timeout=u'20000')
-    #print client.commands.getPageText()
-    client.click(id=u'id_url')
-    client.type(text=u'/testflat/test/', id=u'id_url')
-    client.type(text=u'Test Flat', id=u'id_title')
-    client.type(text=u'This is some unique test content.', id=u'id_content')
-    client.select(id='id_sites', val=u'1')
-    client.click(id=u'fieldsetcollapser1')
-    client.check(id=u'id_enable_comments')
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'/testflat/test/')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'Home')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'Flat pages')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'        Home       ')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(xpath=u"//div[@id='content-main']/div[table/caption/a/text()='Sites']/table/tbody/tr[1]/th/a")
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'example.com')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(id=u'id_domain')
-    client.doubleClick(id=u'id_domain')
-    client.type(text=u'localhost:8000', id=u'id_domain')
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'        Home       ')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'Flat pages')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'/testflat/test/')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'View on site')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertText(xpath=u'/html/body', validator=u'\nThis is some unique test content.\n')
-    client.goBack()
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'Home')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(xpath=u"//div[@id='content-main']/div[table/caption/a/text()='Redirects']/table/tbody/tr[1]/th/a")
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'              Add redirect             ')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(xpath=u"//ul[@id='id_site']/li/label")
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(id=u'id_site_0')
-    client.radio(id=u'id_site_0')
-    client.click(id=u'id_old_path')
-    client.type(text=u'/events/test', id=u'id_old_path')
-    client.type(text=u'/', id=u'id_new_path')
-    client.type(text=u'/test_admin/', id=u'id_new_path')
-    client.click(id=u'id_new_path')
-    client.doubleClick(id=u'id_new_path')
-    client.type(text=u'/testflat/test/', id=u'id_new_path')
-    client.click(name=u'_save')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'/events/test')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.click(link=u'Home')
-    client.waits.forPageLoad(timeout=u'20000')
-    client.open(url=u'http://localhost:8000/events/test')
-    client.waits.forPageLoad(timeout=u'8000')
-    client.asserts.assertText(xpath=u'/html/body', validator=u'\nThis is some unique test content.\n')
-    client.open(url=u'http://localhost:8000/test_admin/admin/')
-    client.waits.forPageLoad(timeout=u'8000')
-    client.click(link=u'Log out')
-    client.waits.forPageLoad(timeout=u'20000')
-
-
-def test_ensureLogout():
-    client = WindmillTestClient(calling_func_name())
-
-    client.open(url=ADMIN_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    client.open(url="%s/accounts/logout"% global_settings.TEST_URL)
-    client.waits.forPageLoad(timeout=u'20000')
-    client.asserts.assertText(xpath=u"//div[@id='content']/h1", validator=u'Logged out')
-    client.asserts.assertText(xpath=u"//div[@id='content']/p", validator=u'Thanks for spending some quality time with the Web site today.')
-    client.asserts.assertNode(link=u'Log in again')
+from primary import *

File tests/regressiontests/admin_views/windmilltests/primary.py

+from windmill.authoring import WindmillTestClient
+from django.test.utils import calling_func_name
+from windmill.conf import global_settings
+ADMIN_URL =  "%s/test_admin/admin" % global_settings.TEST_URL
+
+
+def test_loginAndSetup():
+    '''Mostly just a proof of concept to test working order of tests.'''
+    client = WindmillTestClient(calling_func_name())
+
+    # print dir(client)
+    #    print dir(client.open)
+    #    print dir(client.commands)
+    #    print client.commands()
+
+    client.open(url=ADMIN_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    client.open(url=ADMIN_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    client.type(text=u'super', id=u'id_username')
+    client.type(text=u'secret', id=u'id_password')
+    client.click(value=u'Log in')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertNode(xpath=u"//div[@id='content-main']/div/table/tbody/tr[1]/th")
+    client.asserts.assertNode(link=u'Articles')
+    client.asserts.assertNode(link=u'Add')
+    client.asserts.assertNode(link=u'Change')
+    client.asserts.assertNode(link=u'Admin_Views')
+    client.asserts.assertNode(xpath=u"//div[@id='user-tools']/strong")
+    client.click(xpath=u"//div[@id='content-main']/div/table/tbody/tr[22]/td/a")
+    client.waits.forPageLoad(timeout=u'20000')
+    client.type(text=u'Test Section', id=u'id_name')
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertNode(link=u'Section object')
+    client.click(link=u'         Admin_views       ')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'Add', timeout=u'8000')
+    client.click(link=u'Add')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.type(text=u'Test 1', id=u'id_title')
+    client.type(text=u'This is test content.', id=u'id_content')
+    client.click(link=u'Today')
+    client.click(link=u'Now')
+    client.click(id=u'id_section')
+    client.select(option=u'Section object', id=u'id_section')
+    client.click(value=u'1')
+    #client.asserts.assertValue(validator=u'2009-06-16', id=u'id_date_0')
+    #client.asserts.assertValue(validator=u'13:31:21', id=u'id_date_1')
+    client.asserts.assertNode(id=u'id_section')
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertNode(link=u'This is test content.')
+    client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[2]")
+    client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[3]")
+    client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[4]")
+    client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[5]")
+    client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th")
+    client.click(link=u'Today')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th")
+    client.click(link=u'        Home       ')
+    client.waits.forPageLoad(timeout=u'20000')
+
+def test_changeListNamingLinkingHistory():
+    '''Creating a Model with strings for pk, and checking history.'''
+    client = WindmillTestClient(calling_func_name())
+    client.open(url=ADMIN_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    # client.open(url=ADMIN_URL)
+    #     client.type(text=u'super', id=u'id_username')
+    #     client.type(text=u'secret', id=u'id_password')
+    #     client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'Model with string primary keys', timeout=u'8000')
+    client.click(link=u'Model with string primary keys')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'              Add model with string primary key             ')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.type(text=u'hello', id=u'id_id')
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    #client.asserts.assertNode(link=u'hello')
+    client.click(link=u'hello')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'History')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertNode(xpath=u"//table[@id='change-history']/tbody/tr/td")
+    client.click(link=u'hello')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertValue(validator=u'hello', id=u'id_id')
+    client.click(link=u'Delete')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertNode(xpath=u"//div[@id='content']/ul/li")
+    client.asserts.assertNode(link=u'hello')
+    client.click(value=u"Yes, I'm sure")
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/p", validator=u'\n\n1 model with string primary key\n\n\n')
+    client.click(link=u'        Home       ')
+
+def test_filtersSearchOnChangeList():
+    '''Testing Updates and Filters/Search on Person Models'''
+    client = WindmillTestClient(calling_func_name())
+
+    client.open(url=ADMIN_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'Persons')
+    client.asserts.assertNode(link=u'John Mauchly')
+    client.asserts.assertNode(link=u'Grace Hooper')
+    client.asserts.assertNode(link=u'Guido van Rossum')
+    client.asserts.assertSelected(validator=u'Male', id=u'id_form-0-gender')
+    client.asserts.assertValue(validator=u'1', id=u'id_form-1-gender')
+    client.asserts.assertSelected(validator=u'Male', id=u'id_form-2-gender')
+    client.asserts.assertValue(validator=u'on', id=u'id_form-0-alive')
+    client.asserts.assertValue(validator=u'on', id=u'id_form-1-alive')
+    client.asserts.assertValue(validator=u'on', id=u'id_form-2-alive')
+    client.click(link=u'John Mauchly')
+    client.asserts.assertValue(validator=u'John Mauchly', id=u'id_name')
+    client.asserts.assertSelected(validator=u'Male', id=u'id_gender')
+    client.asserts.assertValue(validator=u'on', id=u'id_alive')
+    client.check(id=u'id_alive')
+    client.click(xpath=u"//form[@id='person_form']/div/fieldset/div[2]")
+    client.click(id=u'id_gender')
+    client.select(option=u'Female', id=u'id_gender')
+    client.click(value=u'2')
+    client.click(id=u'id_name')
+    client.type(text=u'John Mauchly Updated', id=u'id_name')
+    client.click(name=u'_save')
+    client.asserts.assertSelected(validator=u'Female', id=u'id_form-0-gender')
+    client.asserts.assertValue(validator=u'on', id=u'id_form-0-alive')
+    client.asserts.assertNode(link=u'John Mauchly Updated')
+    client.click(id=u'searchbar')
+    client.type(text=u'John', id=u'searchbar')
+    client.click(value=u'Search')
+    client.asserts.assertNode(link=u'John Mauchly Updated')
+    client.click(link=u'3 total')
+    client.type(text=u'Grace', id=u'searchbar')
+    client.click(value=u'Search')
+    client.asserts.assertNode(link=u'Grace Hooper')
+    client.click(link=u'3 total')
+    client.asserts.assertNode(link=u'Guido van Rossum')
+    client.click(link=u'Female')
+    client.asserts.assertNode(link=u'John Mauchly Updated')
+    client.click(link=u'All')
+    client.asserts.assertNode(link=u'Guido van Rossum')
+    client.click(link=u'        Home       ')
+
+def test_defaultDeleteAdminAction():
+    '''Admin Actions test. Test the default delete action.'''
+    client = WindmillTestClient(calling_func_name())
+
+    client.open(url=ADMIN_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'Fabrics')
+    client.check(name=u'_selected_action')
+    client.click(name=u'action')
+    client.select(option=u'Delete selected fabrics', name=u'action')
+    client.click(value=u'delete_selected')
+    client.click(name=u'index')
+    client.click(value=u"Yes, I'm sure")
+    client.asserts.assertNode(link=u'Vertical')
+    client.asserts.assertNode(link=u'Horizontal')
+
+def test_dateTimeModelsandWidgets():
+    client = WindmillTestClient(calling_func_name())
+
+    client.open(url=ADMIN_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'Articles')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'Date', timeout=u'8000')
+    client.click(link=u'Date')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[2]", validator=u'March 18, 2000, 11:54 a.m.')
+    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr[2]/td[2]", validator=u'March 18, 2008, 11:54 a.m.')
+    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[4]", validator=u'2000')
+    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr[2]/td[4]", validator=u'2008')
+    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr[3]/td[4]", validator=u'2009')
+    client.click(link=u'Modeladmin year')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'Content', timeout=u'8000')
+    client.click(link=u'Content')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[4]", validator=u'2008')
+    client.click(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th/a")
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(xpath=u"//a[@id='calendarlink0']/img", timeout=u'8000')
+    client.click(xpath=u"//a[@id='calendarlink0']/img")
+    client.click(link=u'Cancel')
+    client.click(xpath=u"//a[@id='clocklink0']/img")
+    client.click(link=u'Midnight')
+    client.click(id=u'id_date_1')
+    client.asserts.assertValue(validator=u'00:00:00', id=u'id_date_1')
+    client.click(xpath=u"//a[@id='clocklink0']/img")
+    client.click(link=u'6 a.m.')
+    client.asserts.assertValue(validator=u'06:00:00', id=u'id_date_1')
+    client.click(xpath=u"//a[@id='clocklink0']/img")
+    client.click(link=u'Noon')
+    client.click(id=u'id_date_1')
+    client.asserts.assertValue(validator=u'12:00:00', id=u'id_date_1')
+    client.click(link=u'Articles')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'              Add article             ', timeout=u'8000')
+    client.click(link=u'              Add article             ')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.type(text=u'Test Art', id=u'id_title')
+    client.type(text=u'<p> Test </p>', id=u'id_content')
+    client.click(xpath=u"//a[@id='calendarlink0']/img")
+    client.click(link=u'17')
+    client.click(xpath=u"//a[@id='clocklink0']/img")
+    client.click(link=u'6 a.m.')
+    client.click(id=u'id_section')
+    client.select(option=u'Section object', id=u'id_section')
+    client.click(value=u'1')
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th/a", timeout=u'8000')
+    client.click(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th/a")
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(timeout=u'8000', id=u'id_content')
+    client.click(id=u'id_content')
+    client.type(text=u'<p> Test This </p>', id=u'id_content')
+    client.click(name=u'_continue')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertValue(validator=u'<p> Test This </p>', id=u'id_content')
+    client.click(link=u'Articles')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.check(name=u'_selected_action')
+    client.click(name=u'action')
+    client.check(name=u'_selected_action')
+    client.click(link=u'        Home       ')
+    client.waits.forPageLoad(timeout=u'20000')
+
+def test_inlineEditandCreate():
+    client = WindmillTestClient(calling_func_name())
+
+    client.open(url=ADMIN_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'Parents')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'              Add parent             ', timeout=u'8000')
+    client.click(link=u'              Add parent             ')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.type(text=u'Papa', id=u'id_name')
+    client.type(text=u'Billy', id=u'id_child_set-0-name')
+    client.type(text=u'Bobby', id=u'id_child_set-1-name')
+    client.type(text=u'Betty', id=u'id_child_set-2-name')
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'Parent object', timeout=u'8000')
+    client.click(link=u'Parent object')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertValue(validator=u'Billy', id=u'id_child_set-0-name')
+    client.asserts.assertValue(validator=u'Bobby', id=u'id_child_set-1-name')
+    client.asserts.assertValue(validator=u'Betty', id=u'id_child_set-2-name')
+    client.click(link=u'Home')
+    client.waits.forPageLoad(timeout=u'20000')
+
+
+def test_adminActionEmptyModels():
+    client = WindmillTestClient(calling_func_name())
+
+    client.open(url=ADMIN_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'Empty models')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'              Add empty model             ', timeout=u'8000')
+    client.click(link=u'              Add empty model             ')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(timeout=u'8000', name=u'_save')
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'              Add empty model             ', timeout=u'8000')
+    client.click(link=u'              Add empty model             ')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(timeout=u'8000', name=u'_continue')
+    client.click(name=u'_continue')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'Empty models', timeout=u'8000')
+    client.click(link=u'Empty models')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'Primary key = 2', timeout=u'8000')
+    client.click(link=u'Primary key = 2')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(timeout=u'8000', name=u'_addanother')
+    client.click(name=u'_addanother')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(timeout=u'8000', name=u'_save')
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'Primary key = 3', timeout=u'8000')
+    client.click(link=u'Primary key = 3')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(timeout=u'8000', name=u'_addanother')
+    client.click(name=u'_addanother')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(timeout=u'8000', name=u'_save')
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.check(xpath=u"//div[@id='changelist']/form/table/tbody/tr[2]/td[1]/input")
+    client.check(name=u'_selected_action')
+    client.click(name=u'action')
+    client.select(option=u'Delete selected empty models', name=u'action')
+    client.click(value=u'delete_selected')
+    client.click(name=u'index')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(timeout=u'8000', value=u"Yes, I'm sure")
+    client.click(value=u"Yes, I'm sure")
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'Primary key = 2', timeout=u'8000')
+    client.click(link=u'Primary key = 2')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'Delete', timeout=u'8000')
+    client.click(link=u'Delete')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(timeout=u'8000', value=u"Yes, I'm sure")
+    client.click(value=u"Yes, I'm sure")
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'        Home       ', timeout=u'8000')
+    client.click(link=u'        Home       ')
+    client.waits.forPageLoad(timeout=u'20000')
+
+def test_parentChildRelationship():
+    client = WindmillTestClient(calling_func_name())
+
+    client.open(url=ADMIN_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(xpath=u"//div[@id='content-main']/div/table/tbody/tr[21]/td/a", timeout=u'8000')
+    client.click(xpath=u"//div[@id='content-main']/div/table/tbody/tr[21]/td/a")
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'Recommender object')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'Home')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(xpath=u"//div[@id='content-main']/div/table/tbody/tr[20]/td/a")
+    client.click(id=u'id_recommender')
+    client.select(option=u'Recommender object', id=u'id_recommender')
+    client.click(value=u'1')
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.open(url=ADMIN_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'Languages')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'              Add language             ')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.type(text=u'en', id=u'id_iso')
+    client.type(text=u'testEnglish', id=u'id_name')
+    client.type(text=u'test', id=u'id_english_name')
+    client.click(xpath=u"//form[@id='language_form']/div/fieldset/div[4]/div/label")
+    client.check(id=u'id_shortlist')
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'        Home       ')
+    client.waits.forPageLoad(timeout=u'20000')
+
+def test_AdminAuthContrib():
+    client = WindmillTestClient(calling_func_name())
+
+    client.open(url=ADMIN_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'Users', timeout=u'8000')
+    client.click(link=u'Users')
+    client.waits.forPageLoad(timeout=u'20000')
+    #print client.commands.getPageText()
+    client.asserts.assertNode(link=u'adduser')
+    client.asserts.assertNode(link=u'changeuser')
+    client.asserts.assertNode(link=u'deleteuser')
+    client.asserts.assertNode(link=u'joepublic')
+    client.asserts.assertNode(link=u'super')
+    client.click(link=u'Yes')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertNode(link=u'adduser')
+    client.asserts.assertNode(link=u'changeuser')
+    client.asserts.assertNode(link=u'deleteuser')
+    # client.asserts.assertNode(link=u'super')
+    # client.click(link=u'6 total')
+    # client.waits.forPageLoad(timeout=u'20000')
+    # client.waits.forElement(link=u'super', timeout=u'8000')
+    client.click(link=u'super')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.waits.forElement(link=u'Clear all', timeout=u'8000')
+    client.click(link=u'Clear all')
+    client.click(link=u'Choose all')
+    client.click(name=u'_continue')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertValue(validator=u'2007-05-30', id=u'id_date_joined_0')
+    client.asserts.assertValue(validator=u'13:20:10', id=u'id_date_joined_1')
+    client.asserts.assertValue(validator=u'Super', id=u'id_first_name')
+    client.asserts.assertValue(validator=u'User', id=u'id_last_name')
+    client.asserts.assertValue(validator=u'super@example.com', id=u'id_email')
+    client.asserts.assertValue(validator=u'on', id=u'id_is_staff')
+    client.asserts.assertValue(validator=u'on', id=u'id_is_active')
+    client.asserts.assertValue(validator=u'on', id=u'id_is_superuser')
+    client.asserts.assertValue(validator=u'super', id=u'id_username')
+    client.click(link=u'Users')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.type(text=u'super', id=u'searchbar')
+    client.click(value=u'Search')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertNode(link=u'super')
+    client.click(link=u'        Home       ')
+    client.waits.forPageLoad(timeout=u'20000')
+
+
+def test_contribFlatSitesRedirect():
+    client = WindmillTestClient(calling_func_name())
+
+    client.open(url=ADMIN_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    #print client.commands.getPageText()
+    client.click(xpath=u"//div[@id='content-main']/div[table/caption/a/text()='Flatpages']/table/tbody/tr[1]/td/a")
+    client.waits.forPageLoad(timeout=u'20000')
+    #print client.commands.getPageText()
+    client.click(id=u'id_url')
+    client.type(text=u'/testflat/test/', id=u'id_url')
+    client.type(text=u'Test Flat', id=u'id_title')
+    client.type(text=u'This is some unique test content.', id=u'id_content')
+    client.select(id='id_sites', val=u'1')
+    client.click(id=u'fieldsetcollapser1')
+    client.check(id=u'id_enable_comments')
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'/testflat/test/')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'Home')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'Flat pages')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'        Home       ')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(xpath=u"//div[@id='content-main']/div[table/caption/a/text()='Sites']/table/tbody/tr[1]/th/a")
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'example.com')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(id=u'id_domain')
+    client.doubleClick(id=u'id_domain')
+    client.type(text=u'localhost:8000', id=u'id_domain')
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'        Home       ')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'Flat pages')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'/testflat/test/')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'View on site')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertText(xpath=u'/html/body', validator=u'\nThis is some unique test content.\n')
+    client.goBack()
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'Home')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(xpath=u"//div[@id='content-main']/div[table/caption/a/text()='Redirects']/table/tbody/tr[1]/th/a")
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'              Add redirect             ')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(xpath=u"//ul[@id='id_site']/li/label")
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(id=u'id_site_0')
+    client.radio(id=u'id_site_0')
+    client.click(id=u'id_old_path')
+    client.type(text=u'/events/test', id=u'id_old_path')
+    client.type(text=u'/', id=u'id_new_path')
+    client.type(text=u'/test_admin/', id=u'id_new_path')
+    client.click(id=u'id_new_path')
+    client.doubleClick(id=u'id_new_path')
+    client.type(text=u'/testflat/test/', id=u'id_new_path')
+    client.click(name=u'_save')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'/events/test')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.click(link=u'Home')
+    client.waits.forPageLoad(timeout=u'20000')
+    client.open(url=u'http://localhost:8000/events/test')
+    client.waits.forPageLoad(timeout=u'8000')
+    client.asserts.assertText(xpath=u'/html/body', validator=u'\nThis is some unique test content.\n')
+    client.open(url=u'http://localhost:8000/test_admin/admin/')
+    client.waits.forPageLoad(timeout=u'8000')
+    client.click(link=u'Log out')
+    client.waits.forPageLoad(timeout=u'20000')
+
+
+def test_ensureLogout():
+    client = WindmillTestClient(calling_func_name())
+
+    client.open(url=ADMIN_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    client.open(url="%s/accounts/logout"% global_settings.TEST_URL)
+    client.waits.forPageLoad(timeout=u'20000')
+    client.asserts.assertText(xpath=u"//div[@id='content']/h1", validator=u'Logged out')
+    client.asserts.assertText(xpath=u"//div[@id='content']/p", validator=u'Thanks for spending some quality time with the Web site today.')
+    client.asserts.assertNode(link=u'Log in again')

File tests/runtests.py

     if not hasattr(settings, 'TEST_RUNNER'):
         settings.TEST_RUNNER = 'django.test.simple.run_tests'
     #establish coverage settings for the regression suite
-    settings.COVERAGE_MODULE_EXCLUDES = ['modeltests*', 'regressiontests*', 'from .* import .*', 'import .*',]
-    settings.COVERAGE_CODE_EXCLUDES = ['def __unicode__\(self\):', 'def get_absolute_url\(self\):']
+    settings.COVERAGE_MODULE_EXCLUDES = ['modeltests*', 'regressiontests*']
+    settings.COVERAGE_CODE_EXCLUDES = ['def __unicode__\(self\):', 
+                                        'def get_absolute_url\(self\):', 
+                                        'from .* import .*',
+                                        'import .*',
+                                        'from *']
     # depending on how this is run, we might need to tell the coverage libraries to consider django.*
     settings.COVERAGE_ADDITIONAL_MODULES = ['django']