Ignore:
Timestamp:
22 Sep 2016, 19:43:09 (8 years ago)
Author:
Henrik Bettermann
Message:

Add reports and exports purge buttons.

Add more tests.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.ikoba/trunk/src/waeup/ikoba/browser/tests/test_browser.py

    r13808 r14173  
    2424import os
    2525import grok
     26from datetime import datetime, timedelta
    2627from zc.async.testing import wait_for_result
    2728from zope.component import createObject, getUtility
     
    3233from waeup.ikoba.testing import FunctionalLayer, FunctionalTestCase
    3334from waeup.ikoba.app import Company
    34 from waeup.ikoba.interfaces import IJobManager, IUserAccount
     35from waeup.ikoba.interfaces import IJobManager, IUserAccount, IIkobaUtils
    3536from waeup.ikoba.tests.test_async import FunctionalAsyncTestCase
    3637
     
    8384        wait_for_result(job)
    8485        return job_id
     86
     87    def trigger_export(self):
     88        # helper to start an export. Make sure to remove the result file
     89        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
     90        self.browser.open(self.datacenter_path)
     91        self.browser.getLink("Export data").click()
     92        self.browser.getControl(name="exporter").value = ['products']
     93        self.browser.getControl("Create CSV file").click()
     94        return
    8595
    8696    def cleanup_run_job(self):
     
    194204        return
    195205
     206    def test_export_download(self):
     207        # we can download a generated export result
     208        self.trigger_export()
     209        # while the export file is created, we get a reload button
     210        # (or a loading bar if javascript is enabled)...
     211        self.assertTrue('Reload' in self.browser.contents)
     212        # ...which is displayed as long as the job is not finished.
     213        # When the job is finished and we reload the page...
     214        job_id = self.wait_for_export_job_completed()
     215        self.browser.open(self.datacenter_path + '/export')
     216        self.assertFalse('Reload' in self.browser.contents)
     217        # ...we can download the result
     218        self.browser.getLink("Download").click()
     219        self.assertEqual(self.browser.headers['content-type'],
     220                         'text/csv; charset=UTF-8')
     221        self.assertEqual(self.browser.headers['content-disposition'],
     222            'attachment; filename="WAeUP.Ikoba_products_%s.csv' % job_id)
     223        self.assertEqual(self.browser.contents,
     224            'contract_category,contract_title,description,options,'
     225            'product_id,terms_and_conditions,title,valid_from,valid_to,'
     226            'users_with_local_roles\r\n')
     227        # Thew job can be discarded
     228        self.browser.open(self.datacenter_path + '/export')
     229        self.browser.getControl("Discard").click()
     230        self.assertEqual(len(self.app['datacenter'].running_exports), 0)
     231        logfile = os.path.join(
     232            self.app['datacenter'].storage, 'logs', 'datacenter.log')
     233        logcontent = open(logfile).read()
     234        self.assertTrue('zope.mgr - browser.pages.ExportCSVPage - exported: '
     235                        'products, job_id=' in logcontent)
     236        self.assertTrue('zope.mgr - browser.pages.ExportCSVView - '
     237                        'downloaded: WAeUP.Ikoba_products_%s.csv, job_id=%s'
     238                        % (job_id, job_id) in logcontent)
     239        return
     240
     241    def test_export_discard(self):
     242        # we can discard a generated export result
     243        self.trigger_export()
     244        job_id = self.wait_for_export_job_completed()
     245        self.browser.open(self.datacenter_path + '/@@export')
     246        self.browser.getControl("Discard").click()
     247        self.assertTrue('Discarded export' in self.browser.contents)
     248        logfile = os.path.join(
     249            self.app['datacenter'].storage, 'logs', 'datacenter.log')
     250        logcontent = open(logfile).read()
     251        self.assertTrue(
     252            'zope.mgr - browser.pages.ExportCSVPage - discarded: job_id=%s'
     253            % job_id in logcontent)
     254        return
     255
     256    def test_export_purge(self):
     257        self.trigger_export()
     258        job_id = self.wait_for_export_job_completed()
     259        self.browser.open(self.datacenter_path + '/export')
     260        self.browser.getControl("Purge").click()
     261        # Flash message always says successful ...
     262        self.assertTrue(
     263            'Exports successfully purged.' in self.browser.contents)
     264        # ... but the export is still there
     265        self.assertEqual(len(self.app['datacenter'].running_exports), 1)
     266
     267        job_id, gen_name, user = self.app['datacenter'].get_running_export_jobs()[0]
     268        job = getUtility(IJobManager).get(job_id)
     269        tz = getUtility(IIkobaUtils).tzinfo
     270        delta = timedelta(days=5)
     271        setattr(job, '_begin_after', datetime.now(tz) - delta)
     272        self.browser.getControl("Purge").click()
     273        self.assertEqual(len(self.app['datacenter'].running_exports), 0)
     274        logfile = os.path.join(
     275            self.app['datacenter'].storage, 'logs', 'datacenter.log')
     276        logcontent = open(logfile).read()
     277        self.assertTrue('zope.mgr - browser.pages.ExportCSVPage - '
     278                        'purged: job_id=%s' % job_id in logcontent)
     279        return
     280
    196281
    197282class SupplementaryBrowserTests(CompanySetup):
Note: See TracChangeset for help on using the changeset viewer.