Changeset 9169 for main/waeup.kofa/branches/uli-async-update/src/waeup/kofa/students/tests/test_browser.py
- Timestamp:
- 10 Sep 2012, 11:05:07 (12 years ago)
- Location:
- main/waeup.kofa/branches/uli-async-update
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
main/waeup.kofa/branches/uli-async-update
- Property svn:mergeinfo changed
-
main/waeup.kofa/branches/uli-async-update/src/waeup/kofa/students/tests/test_browser.py
r8779 r9169 118 118 self.manage_clearance_path = self.student_path + '/manage_clearance' 119 119 self.edit_personal_path = self.student_path + '/edit_personal' 120 self.manage_personal_path = self.student_path + '/manage_personal' 120 121 self.studycourse_path = self.student_path + '/studycourse' 121 122 self.payments_path = self.student_path + '/payments' … … 170 171 self.app['faculties']['fac1']['dep1'].courses.addCourse( 171 172 self.course) 172 self.app['faculties']['fac1']['dep1'].certificates['CERT1'].addC ourseRef(173 self.app['faculties']['fac1']['dep1'].certificates['CERT1'].addCertCourse( 173 174 self.course, level=100) 174 175 … … 454 455 self.assertEqual(self.browser.headers['Status'], '200 Ok') 455 456 self.assertEqual(self.browser.url, self.personal_path) 457 self.browser.getLink("Manage").click() 458 self.assertEqual(self.browser.headers['Status'], '200 Ok') 459 self.assertEqual(self.browser.url, self.manage_personal_path) 460 self.browser.open(self.personal_path) 456 461 self.browser.getLink("Edit").click() 457 462 self.assertEqual(self.browser.headers['Status'], '200 Ok') … … 474 479 self.assertEqual(self.browser.headers['Status'], '200 Ok') 475 480 self.assertEqual(self.browser.url, self.history_path) 476 self.assertMatches('... Student admitted by Manager...',481 self.assertMatches('...Admitted by Manager...', 477 482 self.browser.contents) 478 483 # Only the Application Slip does not exist … … 754 759 self.assertEqual(student['studycourse'].current_session, 2005) # +1 755 760 self.assertEqual(student['studycourse'].current_level, 200) # +100 756 self.assertEqual(student['studycourse'].current_verdict, ' NY') # NY= not set761 self.assertEqual(student['studycourse'].current_verdict, '0') # 0 = Zero = not set 757 762 self.assertEqual(student['studycourse'].previous_verdict, 'A') 758 763 self.browser.getControl(name="transition").value = ['register_courses'] … … 762 767 self.browser.getControl(name="transition").value = ['return'] 763 768 self.browser.getControl("Save").click() 769 return 770 771 def test_manage_pg_workflow(self): 772 # Managers can pass through the whole workflow 773 IWorkflowState(self.student).setState('school fee paid') 774 self.browser.addHeader('Authorization', 'Basic mgr:mgrpw') 775 student = self.app['students'][self.student_id] 776 self.browser.open(self.manage_student_path) 777 self.assertTrue('<option value="reset6">' in self.browser.contents) 778 self.assertTrue('<option value="register_courses">' in self.browser.contents) 779 self.assertTrue('<option value="reset5">' in self.browser.contents) 780 self.certificate.study_mode = 'pg_ft' 781 self.browser.open(self.manage_student_path) 782 self.assertFalse('<option value="reset6">' in self.browser.contents) 783 self.assertFalse('<option value="register_courses">' in self.browser.contents) 784 self.assertTrue('<option value="reset5">' in self.browser.contents) 764 785 return 765 786 … … 776 797 self.browser.addHeader('Authorization', 'Basic mgr:mgrpw') 777 798 self.browser.open(datacenter_path) 778 self.browser.getLink('Upload CSV file').click()799 self.browser.getLink('Upload data').click() 779 800 filecontents = StringIO(open('students.csv', 'rb').read()) 780 801 filewidget = self.browser.getControl(name='uploadfile:file') 781 802 filewidget.add_file(filecontents, 'text/plain', 'students.csv') 782 803 self.browser.getControl(name='SUBMIT').click() 783 self.browser.getLink(' Batch processing').click()804 self.browser.getLink('Process data').click() 784 805 button = lookup_submit_value( 785 806 'select', 'students_zope.mgr.csv', self.browser) … … 802 823 """) 803 824 self.browser.open(datacenter_path) 804 self.browser.getLink('Upload CSV file').click()825 self.browser.getLink('Upload data').click() 805 826 filecontents = StringIO(open('studycourses.csv', 'rb').read()) 806 827 filewidget = self.browser.getControl(name='uploadfile:file') 807 828 filewidget.add_file(filecontents, 'text/plain', 'studycourses.csv') 808 829 self.browser.getControl(name='SUBMIT').click() 809 self.browser.getLink(' Batch processing').click()830 self.browser.getLink('Process data').click() 810 831 button = lookup_submit_value( 811 832 'select', 'studycourses_zope.mgr.csv', self.browser) … … 917 938 self.assertTrue('clearance started' in self.browser.contents) 918 939 self.browser.open(self.history_path) 919 self.assertTrue("Reset to 'clearance ' by My Public Name" in940 self.assertTrue("Reset to 'clearance started' by My Public Name" in 920 941 self.browser.contents) 921 942 IWorkflowInfo(self.student).fireTransition('request_clearance') … … 946 967 self.app['users'].addUser('mrsadvise', 'mrsadvisesecret') 947 968 self.app['users']['mrsadvise'].email = 'mradvise@foo.ng' 948 self.app['users']['mrsadvise'].title = 'Helen Procter'969 self.app['users']['mrsadvise'].title = u'Helen Procter' 949 970 # Assign local CourseAdviser100 role for a certificate 950 971 cert = self.app['faculties']['fac1']['dep1'].certificates['CERT1'] … … 997 1018 # the 100L CA does see the 'Validate' button 998 1019 self.browser.open(L110_student_path) 999 self.assertFalse('Validate ' in self.browser.contents)1020 self.assertFalse('Validate courses' in self.browser.contents) 1000 1021 IWorkflowInfo(self.student).fireTransition('register_courses') 1001 1022 self.browser.open(L110_student_path) 1002 self.assertFalse('Validate ' in self.browser.contents)1023 self.assertFalse('Validate courses' in self.browser.contents) 1003 1024 self.student['studycourse'].current_level = 110 1004 1025 self.browser.open(L110_student_path) 1005 self.assertTrue('Validate ' in self.browser.contents)1026 self.assertTrue('Validate courses' in self.browser.contents) 1006 1027 # ... but a 100L CA does not see the button on other levels 1007 1028 studylevel2 = StudentStudyLevel() … … 1011 1032 L200_student_path = self.studycourse_path + '/200' 1012 1033 self.browser.open(L200_student_path) 1013 self.assertFalse('Validate ' in self.browser.contents)1034 self.assertFalse('Validate courses' in self.browser.contents) 1014 1035 self.browser.open(L110_student_path) 1015 1036 self.browser.getLink("Validate courses").click() 1016 1037 self.assertTrue('Course list has been validated' in self.browser.contents) 1017 1038 self.assertTrue('courses validated' in self.browser.contents) 1039 self.assertEqual(self.student['studycourse']['110'].validated_by, 1040 'Helen Procter') 1041 self.assertMatches( 1042 '<YYYY-MM-DD hh:mm:ss>', 1043 self.student['studycourse']['110'].validation_date.strftime( 1044 "%Y-%m-%d %H:%M:%S")) 1018 1045 self.browser.getLink("Reject courses").click() 1019 1046 self.assertTrue('Course list request has been annulled.' … … 1023 1050 '/contactstudent?subject=%s' % urlmessage) 1024 1051 self.assertTrue('school fee paid' in self.browser.contents) 1052 self.assertTrue(self.student['studycourse']['110'].validated_by is None) 1053 self.assertTrue(self.student['studycourse']['110'].validation_date is None) 1025 1054 IWorkflowInfo(self.student).fireTransition('register_courses') 1026 1055 self.browser.open(L110_student_path) … … 1142 1171 # and can perform actions 1143 1172 IWorkflowInfo(self.student).fireTransition('admit') 1173 # Students can't login if their account is suspended/deactivated 1174 self.student.suspended = True 1144 1175 self.browser.open(self.login_path) 1145 1176 self.browser.getControl(name="form.login").value = self.student_id 1146 1177 self.browser.getControl(name="form.password").value = 'spwd' 1147 1178 self.browser.getControl("Login").click() 1179 self.assertTrue( 1180 'Your account has been deactivated.' in self.browser.contents) 1181 self.student.suspended = False 1182 self.browser.getControl("Login").click() 1183 self.assertTrue( 1184 'You logged in.' in self.browser.contents) 1148 1185 # Student can upload a passport picture 1149 1186 self.browser.open(self.student_path + '/change_portrait') … … 1170 1207 self.assertMatches('...Not all required fields filled...', 1171 1208 self.browser.contents) 1172 self.student.email = 'aa@aa.ng' 1209 self.browser.open(self.student_path + '/edit_base') 1210 self.browser.getControl(name="form.email").value = 'aa@aa.ng' 1211 self.browser.getControl("Save").click() 1173 1212 self.browser.open(self.student_path + '/start_clearance') 1174 1213 self.browser.getControl(name="ac_series").value = '3' … … 1185 1224 # Set the correct owner 1186 1225 self.existing_clrac.owner = self.student_id 1226 # clr_code might be set (and thus returns None) due importing 1227 # an empty clr_code column. 1228 self.student.clr_code = None 1187 1229 self.browser.getControl("Start clearance now").click() 1188 1230 self.assertMatches('...Clearance process has been started...', … … 1235 1277 self.browser.getControl("Create course list now").click() 1236 1278 self.browser.getLink("100").click() 1237 self.browser.getLink(" Add and remove courses").click()1279 self.browser.getLink("Edit course list").click() 1238 1280 self.browser.getControl("Add course ticket").click() 1239 1281 self.browser.getControl(name="form.course").value = ['COURSE1'] … … 1248 1290 self.browser.getControl("Create course list now").click() 1249 1291 self.browser.getLink("200").click() 1250 self.browser.getLink(" Add and remove courses").click()1292 self.browser.getLink("Edit course list").click() 1251 1293 self.browser.getControl("Add course ticket").click() 1252 1294 self.browser.getControl(name="form.course").value = ['COURSE1'] … … 1286 1328 self.assertEqual(self.student.state, 'courses registered') 1287 1329 return 1330 1331 def test_student_clearance_wo_clrcode(self): 1332 IWorkflowState(self.student).setState('clearance started') 1333 self.browser.open(self.login_path) 1334 self.browser.getControl(name="form.login").value = self.student_id 1335 self.browser.getControl(name="form.password").value = 'spwd' 1336 self.browser.getControl("Login").click() 1337 self.student.clearance_locked = False 1338 self.browser.open(self.edit_clearance_path) 1339 self.browser.getControl(name="form.date_of_birth").value = '09/10/1961' 1340 self.browser.getControl("Save and request clearance").click() 1341 self.assertMatches('...Clearance has been requested...', 1342 self.browser.contents) 1288 1343 1289 1344 def test_manage_payments(self): … … 1516 1571 # The new SFE-0 pin can be used for starting new session 1517 1572 self.browser.open(self.studycourse_path) 1518 self.browser.getLink('Start session').click()1573 self.browser.getLink('Start new session').click() 1519 1574 pin = self.app['accesscodes']['SFE-0'].keys()[0] 1520 1575 parts = pin.split('-')[1:] … … 1528 1583 return 1529 1584 1530 def test_postgraduate_payments(self): 1585 def test_student_previous_payments(self): 1586 # Login 1587 self.browser.open(self.login_path) 1588 self.browser.getControl(name="form.login").value = self.student_id 1589 self.browser.getControl(name="form.password").value = 'spwd' 1590 self.browser.getControl("Login").click() 1591 1592 # Students can add previous school fee payment tickets in any state. 1593 IWorkflowState(self.student).setState('courses registered') 1594 self.browser.open(self.payments_path) 1595 self.browser.getControl("Add online payment ticket").click() 1596 self.browser.getControl(name="form.p_category").value = ['schoolfee'] 1597 self.browser.getControl("Create ticket").click() 1598 1599 # Amount cannot be determined since the state is not 1600 # 'cleared' or 'returning' 1601 self.assertMatches('...Amount could not be determined...', 1602 self.browser.contents) 1603 self.assertMatches('...Would you like to pay for a previous session?...', 1604 self.browser.contents) 1605 1606 # Previous session payment form is provided 1607 self.browser.getControl(name="form.p_category").value = ['schoolfee'] 1608 self.browser.getControl(name="form.p_session").value = ['2004'] 1609 self.browser.getControl(name="form.p_level").value = ['300'] 1610 self.browser.getControl("Create ticket").click() 1611 self.assertMatches('...ticket created...', 1612 self.browser.contents) 1613 ctrl = self.browser.getControl(name='val_id') 1614 value = ctrl.options[0] 1615 self.browser.getLink(value).click() 1616 self.assertMatches('...Amount Authorized...', 1617 self.browser.contents) 1618 self.assertEqual(self.student['payments'][value].amount_auth, 20000.0) 1619 1620 # Payment session is properly set 1621 self.assertEqual(self.student['payments'][value].p_session, 2004) 1622 self.assertEqual(self.student['payments'][value].p_level, 300) 1623 1624 # We simulate the approval 1625 self.browser.open(self.browser.url + '/fake_approve') 1626 self.assertMatches('...Payment approved...', 1627 self.browser.contents) 1628 1629 # No AC has been created 1630 self.assertEqual(len(self.app['accesscodes']['SFE-0'].keys()), 0) 1631 self.assertTrue(self.student['payments'][value].ac is None) 1632 1633 # Current payment flag is set False 1634 self.assertFalse(self.student['payments'][value].p_current) 1635 return 1636 1637 def test_student_postgraduate_payments(self): 1531 1638 self.certificate.study_mode = 'pg_ft' 1532 1639 self.certificate.start_level = 999 … … 1552 1659 self.browser.contents) 1553 1660 # Payment session and level are current ones. 1554 # Postgrads have to school_fee_1.1661 # Postgrads have to pay school_fee_1. 1555 1662 self.assertEqual(self.student['payments'][value].amount_auth, 40000.0) 1556 1663 self.assertEqual(self.student['payments'][value].p_session, 2004) … … 1565 1672 # The new SFE-0 pin can be used for starting session 1566 1673 self.browser.open(self.studycourse_path) 1567 self.browser.getLink('Start session').click()1674 self.browser.getLink('Start new session').click() 1568 1675 pin = self.app['accesscodes']['SFE-0'].keys()[0] 1569 1676 parts = pin.split('-')[1:] … … 1605 1712 # The new SFE-1 pin can be used for starting new session 1606 1713 self.browser.open(self.studycourse_path) 1607 self.browser.getLink('Start session').click()1714 self.browser.getLink('Start new session').click() 1608 1715 self.browser.getControl(name="ac_series").value = sfeseries 1609 1716 self.browser.getControl(name="ac_number").value = sfenumber … … 1850 1957 self.assertTrue('An email with' in self.browser.contents) 1851 1958 1852 def test_reindex(self):1853 self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')1854 self.browser.open('http://localhost/app/reindex')1855 self.assertTrue('No catalog name provided' in self.browser.contents)1856 self.browser.open('http://localhost/app/reindex?ctlg=xyz')1857 self.assertTrue('xyz_catalog does not exist' in self.browser.contents)1858 cat = queryUtility(ICatalog, name='students_catalog')1859 results = cat.searchResults(student_id=(None, None))1860 self.assertEqual(len(results),1)1861 cat.clear()1862 results = cat.searchResults(student_id=(None, None))1863 self.assertEqual(len(results),0)1864 self.browser.open('http://localhost/app/reindex?ctlg=students')1865 self.assertTrue('1 students re-indexed' in self.browser.contents)1866 results = cat.searchResults(student_id=(None, None))1867 self.assertEqual(len(results),1)1868 1869 1959 def test_change_current_mode(self): 1870 1960 self.browser.addHeader('Authorization', 'Basic mgr:mgrpw') … … 1888 1978 self.assertTrue('Employer' in self.browser.contents) 1889 1979 1980 def test_activate_deactivate_buttons(self): 1981 self.browser.addHeader('Authorization', 'Basic mgr:mgrpw') 1982 self.browser.open(self.student_path) 1983 self.browser.getLink("Deactivate").click() 1984 self.assertTrue( 1985 'Student account has been deactivated.' in self.browser.contents) 1986 self.assertTrue( 1987 'Base Data (account deactivated)' in self.browser.contents) 1988 self.assertTrue(self.student.suspended) 1989 self.browser.getLink("Activate").click() 1990 self.assertTrue( 1991 'Student account has been activated.' in self.browser.contents) 1992 self.assertFalse( 1993 'Base Data (account deactivated)' in self.browser.contents) 1994 self.assertFalse(self.student.suspended) 1995 # History messages have been added ... 1996 self.browser.getLink("History").click() 1997 self.assertTrue( 1998 'Student account deactivated by Manager<br />' in self.browser.contents) 1999 self.assertTrue( 2000 'Student account activated by Manager<br />' in self.browser.contents) 2001 # ... and actions have been logged. 2002 logfile = os.path.join( 2003 self.app['datacenter'].storage, 'logs', 'students.log') 2004 logcontent = open(logfile).read() 2005 self.assertTrue('zope.mgr - students.browser.StudentDeactivatePage - ' 2006 'K1000000 - account deactivated' in logcontent) 2007 self.assertTrue('zope.mgr - students.browser.StudentActivatePage - ' 2008 'K1000000 - account activated' in logcontent) 2009 2010 def test_student_transfer(self): 2011 # Add second certificate 2012 self.certificate2 = createObject('waeup.Certificate') 2013 self.certificate2.code = u'CERT2' 2014 self.certificate2.study_mode = 'ug_ft' 2015 self.certificate2.start_level = 999 2016 self.certificate2.end_level = 999 2017 self.app['faculties']['fac1']['dep1'].certificates.addCertificate( 2018 self.certificate2) 2019 2020 # Add study level to old study course 2021 studylevel = createObject(u'waeup.StudentStudyLevel') 2022 studylevel.level = 200 2023 self.student['studycourse'].addStudentStudyLevel( 2024 self.certificate, studylevel) 2025 2026 self.browser.addHeader('Authorization', 'Basic mgr:mgrpw') 2027 self.browser.open(self.student_path) 2028 self.browser.getLink("Transfer").click() 2029 self.browser.getControl(name="form.certificate").value = ['CERT2'] 2030 self.browser.getControl(name="form.current_session").value = ['2011'] 2031 self.browser.getControl(name="form.current_level").value = ['200'] 2032 self.browser.getControl("Transfer").click() 2033 self.assertTrue( 2034 'Current level does not match certificate levels' 2035 in self.browser.contents) 2036 self.browser.getControl(name="form.current_level").value = ['999'] 2037 self.browser.getControl("Transfer").click() 2038 self.assertTrue('Successfully transferred' in self.browser.contents) 2039 2040 # Add study level to new study course 2041 studylevel = createObject(u'waeup.StudentStudyLevel') 2042 studylevel.level = 200 2043 self.student['studycourse'].addStudentStudyLevel( 2044 self.certificate, studylevel) 2045 2046 # Edit and add pages are locked for old study courses 2047 self.browser.open(self.student_path + '/studycourse/manage') 2048 self.assertFalse('The requested form is locked' in self.browser.contents) 2049 self.browser.open(self.student_path + '/studycourse_1/manage') 2050 self.assertTrue('The requested form is locked' in self.browser.contents) 2051 2052 self.browser.open(self.student_path + '/studycourse/start_session') 2053 self.assertFalse('The requested form is locked' in self.browser.contents) 2054 self.browser.open(self.student_path + '/studycourse_1/start_session') 2055 self.assertTrue('The requested form is locked' in self.browser.contents) 2056 2057 IWorkflowState(self.student).setState('school fee paid') 2058 self.browser.open(self.student_path + '/studycourse/add') 2059 self.assertFalse('The requested form is locked' in self.browser.contents) 2060 self.browser.open(self.student_path + '/studycourse_1/add') 2061 self.assertTrue('The requested form is locked' in self.browser.contents) 2062 2063 self.browser.open(self.student_path + '/studycourse/200/manage') 2064 self.assertFalse('The requested form is locked' in self.browser.contents) 2065 self.browser.open(self.student_path + '/studycourse_1/200/manage') 2066 self.assertTrue('The requested form is locked' in self.browser.contents) 2067 2068 self.browser.open(self.student_path + '/studycourse/200/validate_courses') 2069 self.assertFalse('The requested form is locked' in self.browser.contents) 2070 self.browser.open(self.student_path + '/studycourse_1/200/validate_courses') 2071 self.assertTrue('The requested form is locked' in self.browser.contents) 2072 2073 self.browser.open(self.student_path + '/studycourse/200/reject_courses') 2074 self.assertFalse('The requested form is locked' in self.browser.contents) 2075 self.browser.open(self.student_path + '/studycourse_1/200/reject_courses') 2076 self.assertTrue('The requested form is locked' in self.browser.contents) 2077 2078 self.browser.open(self.student_path + '/studycourse/200/add') 2079 self.assertFalse('The requested form is locked' in self.browser.contents) 2080 self.browser.open(self.student_path + '/studycourse_1/200/add') 2081 self.assertTrue('The requested form is locked' in self.browser.contents) 2082 2083 self.browser.open(self.student_path + '/studycourse/200/edit') 2084 self.assertFalse('The requested form is locked' in self.browser.contents) 2085 self.browser.open(self.student_path + '/studycourse_1/200/edit') 2086 self.assertTrue('The requested form is locked' in self.browser.contents) 2087 1890 2088 class StudentRequestPWTests(StudentsFullSetup): 1891 2089 # Tests for student registration … … 1894 2092 1895 2093 def test_request_pw(self): 1896 # Student with wrong reg_number can't be found.2094 # Student with wrong number can't be found. 1897 2095 self.browser.open('http://localhost/app/requestpw') 1898 2096 self.browser.getControl(name="form.firstname").value = 'Anna' 1899 self.browser.getControl(name="form. reg_number").value = 'anynumber'2097 self.browser.getControl(name="form.number").value = 'anynumber' 1900 2098 self.browser.getControl(name="form.email").value = 'xx@yy.zz' 1901 self.browser.getControl(" Getlogin credentials").click()2099 self.browser.getControl("Send login credentials").click() 1902 2100 self.assertTrue('No student record found.' 1903 2101 in self.browser.contents) … … 1906 2104 self.browser.open('http://localhost/app/requestpw') 1907 2105 self.browser.getControl(name="form.firstname").value = 'Johnny' 1908 self.browser.getControl(name="form. reg_number").value = '123'2106 self.browser.getControl(name="form.number").value = '123' 1909 2107 self.browser.getControl(name="form.email").value = 'xx@yy.zz' 1910 self.browser.getControl(" Getlogin credentials").click()2108 self.browser.getControl("Send login credentials").click() 1911 2109 self.assertTrue('No student record found.' 1912 2110 in self.browser.contents) … … 1914 2112 # password has been set and used. 1915 2113 self.browser.getControl(name="form.firstname").value = 'Anna' 1916 self.browser.getControl(name="form. reg_number").value = '123'1917 self.browser.getControl(" Getlogin credentials").click()2114 self.browser.getControl(name="form.number").value = '123' 2115 self.browser.getControl("Send login credentials").click() 1918 2116 self.assertTrue('Your password has already been set and used.' 1919 2117 in self.browser.contents) … … 1922 2120 # The firstname field, used for verification, is not case-sensitive. 1923 2121 self.browser.getControl(name="form.firstname").value = 'aNNa' 1924 self.browser.getControl(name="form. reg_number").value = '123'2122 self.browser.getControl(name="form.number").value = '123' 1925 2123 self.browser.getControl(name="form.email").value = 'new@yy.zz' 1926 self.browser.getControl(" Getlogin credentials").click()2124 self.browser.getControl("Send login credentials").click() 1927 2125 # Yeah, we succeded ... 2126 self.assertTrue('Your password request was successful.' 2127 in self.browser.contents) 2128 # We can also use the matric_number instead. 2129 self.browser.open('http://localhost/app/requestpw') 2130 self.browser.getControl(name="form.firstname").value = 'aNNa' 2131 self.browser.getControl(name="form.number").value = '234' 2132 self.browser.getControl(name="form.email").value = 'new@yy.zz' 2133 self.browser.getControl("Send login credentials").click() 1928 2134 self.assertTrue('Your password request was successful.' 1929 2135 in self.browser.contents) … … 1934 2140 email=('new@yy.zz', 'new@yy.zz'))) 1935 2141 self.assertEqual(self.student,results[0]) 2142 logfile = os.path.join( 2143 self.app['datacenter'].storage, 'logs', 'main.log') 2144 logcontent = open(logfile).read() 2145 self.assertTrue('zope.anybody - students.browser.StudentRequestPasswordPage - ' 2146 '234 (K1000000) - new@yy.zz' in logcontent) 1936 2147 return
Note: See TracChangeset for help on using the changeset viewer.