def test_GIVEN_one_pending_job_in_the_database_which_has_completed_WHEN_update_dap_client_not_available_THEN_model_run_status_is_not_updated(self): self.dap_client_factory.get_dap_client = Mock(side_effect=DapClientException("trouble")) self.create_model_run_ready_for_submit() model_run_service = ModelRunService() model_run = model_run_service.get_model_run_being_created_or_default(self.user) with session_scope(Session) as session: model_run.change_status(session, constants.MODEL_RUN_STATUS_RUNNING) self.running_job_client.get_run_model_statuses = Mock( return_value=[{'id': model_run.id, 'status': constants.MODEL_RUN_STATUS_COMPLETED, 'error_message': '' }]) self.job_status_updater.update() model_run = model_run_service.get_model_by_id(self.user, model_run.id) assert_that(model_run.status.name, is_(constants.MODEL_RUN_STATUS_RUNNING), "model status") with session_scope() as session: datasets = session.query(Dataset)\ .filter(Dataset.model_run_id == model_run.id)\ .filter(Dataset.is_input == False)\ .all() assert_that(len(datasets), is_(0), "Number of output datasets") datasets = session.query(Dataset)\ .filter(Dataset.model_run_id == model_run.id)\ .filter(Dataset.is_input == True)\ .all() assert_that(len(datasets), is_(0), "Number of input datasets")
def test_GIVEN_name_is_duplicate_WHEN_post_THEN_error_thrown(self): duplicate_name = u'duplicate name' user = self.login() model_run_service = ModelRunService() model_run_service.update_model_run(user, duplicate_name, constants.DEFAULT_SCIENCE_CONFIGURATION, "description which is unique") model_run = model_run_service.get_model_run_being_created_or_default(user) with model_run_service.transaction_scope() as session: model_run.change_status(session, constants.MODEL_RUN_STATUS_COMPLETED) response = self.app.post( url=url(controller='model_run', action='create'), params={ 'name': duplicate_name, 'science_configuration': unicode(constants.DEFAULT_SCIENCE_CONFIGURATION), 'description': u'a description' } ) assert_that(response.normal_body, contains_string("Name can not be the same as another model run"))
def test_GIVEN_name_is_duplicate_but_run_is_owned_by_another_user_WHEN_post_THEN_success(self): duplicate_name = u'duplicate name' user = self.login("test_different") model_run_service = ModelRunService() model_run_service.update_model_run(user, duplicate_name, constants.DEFAULT_SCIENCE_CONFIGURATION, "description which is unique") model_run = model_run_service.get_model_run_being_created_or_default(user) with model_run_service.transaction_scope() as session: model_run.change_status(session, constants.MODEL_RUN_STATUS_COMPLETED) user = self.login("test") response = self.app.post( url=url(controller='model_run', action='create'), params={ 'name': duplicate_name, 'science_configuration': unicode(constants.DEFAULT_SCIENCE_CONFIGURATION), 'description': u'a description' } ) assert_that(response.status_code, is_(302), "Response is redirect") assert_that(urlparse(response.response.location).path, is_(url(controller='model_run', action='driving_data')), "url")
def test_GIVEN_one_pending_job_in_the_database_which_has_completed_WHEN_update_THEN_model_run_data_is_in_datasets(self): self.create_model_run_ready_for_submit() model_run_service = ModelRunService() model_run = model_run_service.get_model_run_being_created_or_default(self.user) with session_scope(Session) as session: model_run.change_status(session, constants.MODEL_RUN_STATUS_RUNNING) self.running_job_client.get_run_model_statuses = Mock( return_value=[{'id': model_run.id, 'status': constants.MODEL_RUN_STATUS_COMPLETED, 'error_message': '' }]) self.job_status_updater.update() with session_scope() as session: datasets = session.query(Dataset)\ .filter(Dataset.model_run_id == model_run.id)\ .filter(Dataset.is_input == False)\ .all() assert_that(len(datasets), is_(3), "Number of output datasets") dataset_names = [dataset.name for dataset in datasets] assert_that(dataset_names, contains_inanyorder( contains_string('Monthly'), contains_string('Yearly'), contains_string('Hourly'))) dataset_wms_urls = [dataset.wms_url for dataset in datasets] assert_that(dataset_wms_urls, contains_inanyorder( contains_string('output/majic.fch4_wetl_yearly.ncml'), contains_string('output/majic.fch4_wetl_monthly.ncml'), contains_string('output/majic.albedo_land_hourly.ncml'))) datasets = session.query(Dataset)\ .filter(Dataset.model_run_id == model_run.id)\ .filter(Dataset.is_input == True)\ .all() assert_that(len(datasets), is_(2), "Number of input datasets")