Index: main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/tests/test_browser.py
===================================================================
--- main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/tests/test_browser.py	(revision 10132)
+++ main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/tests/test_browser.py	(revision 10132)
@@ -0,0 +1,137 @@
+## $Id$
+##
+## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##
+import shutil
+import tempfile
+import datetime
+import pytz
+from zope.component.hooks import setSite, clearSite
+from zope.component import createObject
+from zope.testbrowser.testing import Browser
+from waeup.kofa.app import University
+from waeup.kofa.university.faculty import Faculty
+from waeup.kofa.university.department import Department
+from waeup.kofa.testing import FunctionalTestCase
+from waeup.kofa.applicants.container import ApplicantsContainer
+from waeup.kwarapoly.testing import FunctionalLayer
+
+
+class ApplicantUITest(FunctionalTestCase):
+    """Perform some browser tests.
+    """
+    layer = FunctionalLayer
+
+    def setUp(self):
+        super(ApplicantUITest, self).setUp()
+        # Setup a sample site for each test
+        app = University()
+        self.dc_root = tempfile.mkdtemp()
+        app['datacenter'].setStoragePath(self.dc_root)
+
+        # Prepopulate the ZODB...
+        self.getRootFolder()['app'] = app
+        # we add the site immediately after creation to the
+        # ZODB. Catalogs and other local utilities are not setup
+        # before that step.
+        self.app = self.getRootFolder()['app']
+        # Set site here. Some of the following setup code might need
+        # to access grok.getSite() and should get our new app then
+        setSite(app)
+
+        # Add nd applicants container
+        self.ndcontainer = ApplicantsContainer()
+        self.ndcontainer.mode = 'create'
+        self.ndcontainer.code = u'nd2011'
+        self.ndcontainer.prefix = u'nd'
+        self.ndcontainer.application_category = u'nd'
+        self.ndcontainer.year = 2011
+        self.ndcontainer.application_fee = 300.0
+        self.ndcontainer.title = u'This is the nd2011 container'
+        self.app['applicants']['nd2011'] = self.ndcontainer
+
+        delta = datetime.timedelta(days=10)
+        self.ndcontainer.startdate = datetime.datetime.now(pytz.utc) - delta
+        self.ndcontainer.enddate = datetime.datetime.now(pytz.utc) + delta
+
+        # Populate university
+        self.certificate = createObject('waeup.Certificate')
+        self.certificate.code = 'CERT1'
+        self.certificate.application_category = 'nd'
+        self.certificate.start_level = 100
+        self.certificate.end_level = 500
+        self.certificate.study_mode = u'nce_ft'
+        self.app['faculties']['fac1'] = Faculty()
+        self.app['faculties']['fac1']['dep1'] = Department()
+        self.app['faculties']['fac1']['dep1'].certificates.addCertificate(
+            self.certificate)
+
+        # Add (customized) applicants
+        ndapplicant = createObject(u'waeup.Applicant')
+        ndapplicant.firstname = u'Anna'
+        ndapplicant.lastname = u'Post'
+        self.app['applicants']['nd2011'].addApplicant(ndapplicant)
+        self.ndapplication_number = ndapplicant.application_number
+        self.ndapplicant = self.app['applicants']['nd2011'][
+            self.ndapplication_number]
+        self.ndapplicant_path = ('http://localhost/app/applicants/nd2011/%s'
+            % self.ndapplication_number)
+
+        self.browser = Browser()
+        self.browser.handleErrors = False
+
+    def tearDown(self):
+        super(ApplicantUITest, self).tearDown()
+        shutil.rmtree(self.dc_root)
+        clearSite()
+        return
+
+    def fill_correct_values(self):
+        self.browser.getControl(name="form.reg_number").value = '1234'
+        self.browser.getControl(name="form.firstname").value = 'John'
+        self.browser.getControl(name="form.lastname").value = 'Tester'
+        self.browser.getControl(name="form.date_of_birth").value = '09/09/1988'
+        self.browser.getControl(name="form.lga").value = ['foreigner']
+        self.browser.getControl(name="form.nationality").value = ['NG']
+        self.browser.getControl(name="form.sex").value = ['m']
+        self.browser.getControl(name="form.email").value = 'xx@yy.zz'
+
+    def test_manage_and_view_applicant(self):
+        # Managers can manage nd applicants.
+        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+        self.browser.open(self.ndapplicant_path)
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertTrue("'O' Level" in self.browser.contents)
+        self.assertFalse("Higher" in self.browser.contents)
+        self.browser.open(self.ndapplicant_path + '/manage')
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertTrue("'O' Level" in self.browser.contents)
+        self.assertTrue("Higher" in self.browser.contents)
+        self.browser.open(self.ndapplicant_path + '/edit')
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        self.assertTrue("'O' Level" in self.browser.contents)
+        self.assertFalse("Higher" in self.browser.contents)
+        self.browser.open(self.ndapplicant_path + '/application_slip.pdf')
+        self.assertEqual(self.browser.headers['Status'], '200 Ok')
+        # Now we turn the nd applicant into an hnd applicant.
+        self.ndapplicant.applicant_id = u'hnd_anything'
+        self.browser.open(self.ndapplicant_path)
+        self.assertTrue("Higher" in self.browser.contents)
+        self.assertTrue("'O' Level" in self.browser.contents)
+        self.browser.open(self.ndapplicant_path + '/edit')
+        self.assertTrue("Higher" in self.browser.contents)
+        self.assertTrue("'O' Level" in self.browser.contents)
+        return
