Esempio n. 1
0
 def setUp(self):
     self.portal = self.layer['portal']
     self.experiments = self.portal[defaults.EXPERIMENTS_FOLDER_ID]
     self.form = SpeciesTraitsExperimentHelper(self.portal)
Esempio n. 2
0
 def setUp(self):
     self.portal = self.layer['portal']
     self.experiments = self.portal[defaults.EXPERIMENTS_FOLDER_ID]
     self.form = SpeciesTraitsExperimentHelper(self.portal)
Esempio n. 3
0
class ExperimentSpeciesTraitsAddTest(unittest.TestCase):

    # Use functional layer for now to get a new demostorage layer for each test
    layer = BCCVL_FUNCTIONAL_TESTING
    # integration testing gives only a new transaction for each test
    # (rolled back at end)
    # layer = BCCVL_INTEGRATION_TESTING

    def setUp(self):
        self.portal = self.layer['portal']
        self.experiments = self.portal[defaults.EXPERIMENTS_FOLDER_ID]
        self.form = SpeciesTraitsExperimentHelper(self.portal)

    def test_add_experiment_missing_input(self):
        form = self.form.get_form()
        # remove required field
        del form.request.form['form.widgets.IDublinCore.title']
        form.request.form.update({
            'form.buttons.create': 'Create',
        })
        # submit form
        form.update()
        errors = [e for e in form.widgets.errors]
        self.assertEqual(len(errors), 1)
        # check self.experiments still empty
        # IStatusMessage

    @mock.patch('org.bccvl.tasks.compute.run_script')
    def test_add_experiment(self, mock_run_script):
        form = self.form.get_form()
        form.request.form.update({
            'form.buttons.save': 'Create and start',
        })
        # update form with updated request
        form.update()
        self.assertEqual(form.status, u'')
        self.assertEqual(len(form.widgets.errors), 0)
        self.assertIn('my-st-experiment', self.experiments)
        exp = self.experiments['my-st-experiment']
        # TODO: update asserts
        self.assertEqual(exp.species_traits_dataset,
                         unicode(self.form.traitsds.UID()))
        self.assertEqual(exp.algorithms_species,
                         [unicode(self.form.algorithm.UID())])
        # FIXME: submitting with an empty model list doesn't cause form to fail
        # get result container: (2 results, one for STM and another for exploration plot)
        self.assertEqual(len(exp.objectIds()), 2)
        # the 1st experiment is exploration plot
        result = exp.objectValues()[0]
        self.assertEqual(result.job_params[
                         'algorithm'], 'exploration_plot')
        result = exp.objectValues()[1]
        # FIXME: test result.job_params
        self.assertEqual(result.job_params[
                         'algorithm'], self.form.algorithm.getId())
        self.assertEqual(result.job_params['traits_dataset'], unicode(
            self.form.traitsds.UID()))
        # no result files yet
        self.assertEqual(len(result.keys()), 0)
        # test job state
        jt = IExperimentJobTracker(exp)
        self.assertEqual(jt.state, u'QUEUED')
        # setup mock_run_script
        mock_run_script.side_effect = self.form.mock_run_script
        # after transaction commit the job should finish
        transaction.commit()
        self.assertEqual(jt.state, u'COMPLETED')
        # and we should have a result as well
        self.assertGreaterEqual(len(result.keys()), 1)
Esempio n. 4
0
class ExperimentSpeciesTraitsAddTest(unittest.TestCase):

    # Use functional layer for now to get a new demostorage layer for each test
    layer = BCCVL_FUNCTIONAL_TESTING

    # integration testing gives only a new transaction for each test
    # (rolled back at end)
    # layer = BCCVL_INTEGRATION_TESTING

    def setUp(self):
        self.portal = self.layer['portal']
        self.experiments = self.portal[defaults.EXPERIMENTS_FOLDER_ID]
        self.form = SpeciesTraitsExperimentHelper(self.portal)

    def test_add_experiment_missing_input(self):
        form = self.form.get_form()
        # remove required field
        del form.request.form['form.widgets.IDublinCore.title']
        form.request.form.update({
            'form.buttons.create': 'Create',
        })
        # submit form
        form.update()
        errors = [e for e in form.widgets.errors]
        self.assertEqual(len(errors), 1)
        # check self.experiments still empty
        # IStatusMessage

    @mock.patch('org.bccvl.tasks.compute.run_script')
    def test_add_experiment(self, mock_run_script):
        form = self.form.get_form()
        form.request.form.update({
            'form.buttons.save': 'Create and start',
        })
        # update form with updated request
        form.update()
        self.assertEqual(form.status, u'')
        self.assertEqual(len(form.widgets.errors), 0)
        self.assertIn('my-st-experiment', self.experiments)
        exp = self.experiments['my-st-experiment']
        # TODO: update asserts
        self.assertEqual(exp.species_traits_dataset,
                         unicode(self.form.traitsds.UID()))
        self.assertEqual(exp.algorithms_species,
                         [unicode(self.form.algorithm.UID())])
        # FIXME: submitting with an empty model list doesn't cause form to fail
        # get result container: (2 results, one for STM and another for exploration plot)
        self.assertEqual(len(exp.objectIds()), 2)
        # the 1st experiment is exploration plot
        result = exp.objectValues()[0]
        self.assertEqual(result.job_params['algorithm'], 'exploration_plot')
        result = exp.objectValues()[1]
        # FIXME: test result.job_params
        self.assertEqual(result.job_params['algorithm'],
                         self.form.algorithm.getId())
        self.assertEqual(result.job_params['traits_dataset'],
                         unicode(self.form.traitsds.UID()))
        # no result files yet
        self.assertEqual(len(result.keys()), 0)
        # test job state
        jt = IExperimentJobTracker(exp)
        self.assertEqual(jt.state, u'QUEUED')
        # setup mock_run_script
        mock_run_script.side_effect = self.form.mock_run_script
        # after transaction commit the job should finish
        transaction.commit()
        self.assertEqual(jt.state, u'COMPLETED')
        # and we should have a result as well
        self.assertGreaterEqual(len(result.keys()), 1)