- Timestamp:
- 21 Sep 2012, 08:19:35 (12 years ago)
- Location:
- main/waeup.kofa/branches/uli-zc-async
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
main/waeup.kofa/branches/uli-zc-async
- Property svn:mergeinfo changed
/main/waeup.kofa/branches/uli-async-update removed /main/waeup.kofa/branches/uli-autoinclude-less removed /main/waeup.kofa/trunk removed
- Property svn:mergeinfo changed
-
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/hostels/tests.py
r9209 r9211 19 19 Tests for hostels and their UI components. 20 20 """ 21 import os22 21 import shutil 23 22 import tempfile … … 37 36 from waeup.kofa.hostels.container import HostelsContainer 38 37 from waeup.kofa.hostels.hostel import Hostel, Bed 39 from waeup.kofa.hostels.batching import HostelProcessor40 from waeup.kofa.hostels.export import BedExporter, HostelExporter41 38 from waeup.kofa.testing import (FunctionalLayer, FunctionalTestCase) 42 39 from waeup.kofa.students.student import Student 43 40 from waeup.kofa.students.accommodation import BedTicket 44 41 from waeup.kofa.university.department import Department 45 46 HOSTEL_SAMPLE_DATA = open(47 os.path.join(os.path.dirname(__file__), 'sample_hostel_data.csv'),48 'rb').read()49 50 HOSTEL_HEADER_FIELDS = HOSTEL_SAMPLE_DATA.split(51 '\n')[0].split(',')52 42 53 43 class HostelsContainerTestCase(FunctionalTestCase): … … 152 142 # Create a bed 153 143 bed = Bed() 154 bed.bed_id = u' hall_block_room_bed'144 bed.bed_id = u'xyz' 155 145 bed.bed_number = 1 156 bed.bed_type = u'a _b_c'146 bed.bed_type = u'abc' 157 147 self.app['hostels'][hostel.hostel_id][bed.bed_id] = bed 158 148 … … 167 157 self.browser.handleErrors = False 168 158 169 self.logfile = os.path.join(170 self.app['datacenter'].storage, 'logs', 'hostels.log')171 172 159 def tearDown(self): 173 160 super(HostelsFullSetup, self).tearDown() … … 187 174 # We can find a certain bed 188 175 cat = queryUtility(ICatalog, name='beds_catalog') 189 results = cat.searchResults(bed_type=(u'a _b_c', u'a_b_c'))176 results = cat.searchResults(bed_type=(u'abc', u'abc')) 190 177 results = [x for x in results] # Turn results generator into list 191 178 assert len(results) == 1 192 assert results[0] is self.app['hostels']['hall-x'][' hall_block_room_bed']179 assert results[0] is self.app['hostels']['hall-x']['xyz'] 193 180 194 181 def test_search_by_owner(self): 195 182 # We can find a certain bed 196 myobj = self.app['hostels']['hall-x'][' hall_block_room_bed']183 myobj = self.app['hostels']['hall-x']['xyz'] 197 184 myobj.owner = u'abc' 198 185 notify(grok.ObjectModifiedEvent(myobj)) … … 201 188 results = [x for x in results] # Turn results generator into list 202 189 assert len(results) == 1 203 assert results[0] is self.app['hostels']['hall-x'][' hall_block_room_bed']190 assert results[0] is self.app['hostels']['hall-x']['xyz'] 204 191 205 192 class HostelsUITests(HostelsFullSetup): … … 313 300 self.assertMatches( 314 301 '...No allocated bed selected...', self.browser.contents) 315 # Managers can manually allocate studen tsafter cancellation302 # Managers can manually allocate studenst after cancellation 316 303 self.browser.open(self.container_path + '/hall-1/hall-1_A_101_A') 317 304 self.browser.getControl(name="form.owner").value = [self.student_id] … … 347 334 # Also the number of the bed has changed. 348 335 self.assertFalse(new_number == old_number) 349 # The number of occupied bed are displayed on container page.350 self.browser.open(self.container_path)351 self.assertTrue('1 of 8' in self.browser.contents)352 336 # Remove entire hostel 353 337 self.browser.open(self.manage_container_path) … … 362 346 results = [x for x in results] 363 347 assert len(results) == 0 364 365 def test_clear_hostels(self):366 self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')367 self.browser.open(self.container_path)368 self.browser.getLink("Manage accommodation").click()369 self.browser.getControl("Add hostel").click()370 self.browser.getControl("Create hostel").click()371 hall = self.app['hostels']['hall-1']372 hall.blocks_for_female = ['A','B']373 hall.rooms_per_floor = 1374 hall.beds_for_fresh = ['A']375 hall.beds_for_returning = ['B']376 hall.beds_for_final = ['C']377 hall.beds_for_all = ['D','E']378 self.browser.open(self.container_path + '/hall-1/manage')379 self.browser.getControl("Update all beds").click()380 cat = queryUtility(ICatalog, name='beds_catalog')381 results = cat.searchResults(bed_type=(None, None))382 self.assertEqual(len(results), 11)383 self.browser.getControl("Clear hostel").click()384 self.assertEqual(len(self.app['hostels']['hall-1']), 0)385 # Only the bed in hall-x remains in the catalog.386 results = cat.searchResults(bed_type=(None, None))387 self.assertEqual(len(results), 1)388 # We can clear all hostels at the same time.389 self.browser.open(self.manage_container_path)390 self.browser.getControl("Clear all hostels").click()391 results = cat.searchResults(bed_type=(None, None))392 self.assertEqual(len(results), 0)393 # Both actions have been logged.394 logcontent = open(self.logfile).read()395 self.assertTrue('INFO - zope.mgr - hostels.browser.HostelManageFormPage'396 ' - hall-1 - cleared' in logcontent)397 self.assertTrue('zope.mgr - hostels.browser.HostelsContainerManagePage'398 ' - hostels - all hostels cleared' in logcontent)399 400 class ExportTests(HostelsFullSetup):401 402 layer = FunctionalLayer403 404 def setUp(self):405 super(ExportTests, self).setUp()406 self.workdir = tempfile.mkdtemp()407 self.outfile = os.path.join(self.workdir, 'myoutput.csv')408 return409 410 def test_export_hostels(self):411 exporter = HostelExporter()412 exporter.export_all(self.app, self.outfile)413 result = open(self.outfile, 'rb').read()414 self.assertEqual(415 result,416 'beds_for_all,beds_for_final,beds_for_fresh,beds_for_pre,'417 'beds_for_returning,beds_reserved,blocks_for_female,'418 'blocks_for_male,floors_per_block,hostel_id,hostel_name,'419 'rooms_per_floor,sort_id,special_handling\r\n,,,,,[],,,1,'420 'hall-x,Hall 1,2,10,regular\r\n'421 )422 return423 424 def test_export_beds(self):425 exporter = BedExporter()426 exporter.export_all(self.app, self.outfile)427 result = open(self.outfile, 'rb').read()428 self.assertEqual(429 result,430 'bed_id,bed_number,bed_type,owner,hall,block,room,bed,'431 'special_handling,sex,bt\r\nhall_block_room_bed,1,a_b_c,,'432 'hall,block,room,bed,a,b,c\r\n'433 )434 return435 436 class HostelProcessorTest(HostelsFullSetup):437 438 layer = FunctionalLayer439 440 def test_import(self):441 self.processor = HostelProcessor()442 self.workdir = tempfile.mkdtemp()443 self.csv_file = os.path.join(self.workdir, 'sample_student_data.csv')444 open(self.csv_file, 'wb').write(HOSTEL_SAMPLE_DATA)445 num, num_warns, fin_file, fail_file = self.processor.doImport(446 self.csv_file, HOSTEL_HEADER_FIELDS)447 self.assertEqual(num_warns,0)448 self.assertEqual(len(self.app['hostels'].keys()), 11) # including hall-x449 self.assertEqual(self.app['hostels'][450 'block-a-upper-hostel'].hostel_id,'block-a-upper-hostel')451 self.assertEqual(self.app['hostels'][452 'block-a-upper-hostel'].beds_for_final, ['A', 'B'])453 logcontent = open(self.logfile).read()454 self.assertTrue(455 "Hostel Processor - block-a-upper-hostel - "456 "Record updated: beds_for_pre=['G'], floors_per_block=1, "457 "beds_for_final=['A', 'B'], rooms_per_floor=32, "458 "blocks_for_male=[], hostel_id=block-a-upper-hostel, "459 "sort_id=20, beds_for_returning=['C', 'D'], "460 "hostel_name=Block A Upper Hostel, beds_for_fresh=['E', 'F'], "461 "blocks_for_female=['A'], beds_for_all=[], beds_reserved=[]"462 in logcontent)463 shutil.rmtree(os.path.dirname(fin_file))464 return
Note: See TracChangeset for help on using the changeset viewer.