def test_GIVEN_multiple_land_cover_actions_saved_out_of_order_WHEN_get_THEN_order_rendered_correctly(self): with session_scope() as session: model_run = self.model_run_service._get_model_run_being_created(session, self.user) dds = model_run.driving_dataset session.add_all(self.generate_categories_with_regions(dds)) action = LandCoverAction() action.model_run = model_run action.region_id = 1 # Thames action.value_id = 5 # Shrub action.order = 5 session.add(action) session.commit() action2 = LandCoverAction() action2.model_run = model_run action2.region_id = 2 # Itchen action2.value_id = 1 # Broad-leaved Tree action2.order = 1 session.add(action2) session.commit() action3 = LandCoverAction() action3.model_run = model_run action3.region_id = 3 # Hampshire action3.value_id = 6 # Urban action3.order = 2 session.add(action3) session.commit() response = self.app.get(url(controller='model_run', action='land_cover')) order1 = response.normal_body.index("Change <b>Itchen (Rivers)</b> to <b>Broad-leaved Tree</b>") order2 = response.normal_body.index("Change <b>Hampshire (Counties)</b> to <b>Urban</b>") order5 = response.normal_body.index("Change <b>Thames (Rivers)</b> to <b>Shrub</b>") assert (order1 < order2 < order5)
def test_GIVEN_land_cover_action_already_saved_WHEN_get_THEN_action_rendered(self): with session_scope() as session: model_run = self.model_run_service._get_model_run_being_created(session, self.user) dds = model_run.driving_dataset session.add_all(self.generate_categories_with_regions(dds)) action = LandCoverAction() action.model_run = model_run action.region_id = 1 # Thames action.value_id = 5 # Shrub response = self.app.get(url(controller='model_run', action='land_cover')) assert_that(response.normal_body, contains_string("Change <b>Thames (Rivers)</b> to <b>Shrub</b>"))
def add_land_cover_actions(self, land_cover_region, model_run, value_order_pairs, land_cover_service): """ Create land cover actions and save them using the model_run_service.save_land_cover_actions method :param land_cover_region: Land cover region actions should belong to :param model_run: Model run to add them against :param value_order_pairs: List of 2-tuples [(value, order)]; each tuple is a land cover action to be added :param land_cover_service: Land Cover service to use :return: """ land_cover_actions = [] for value, order in value_order_pairs: lca = LandCoverAction() lca.region_id = land_cover_region.id lca.value_id = value lca.order = order land_cover_actions.append(lca) land_cover_service.save_land_cover_actions_for_model(model_run, land_cover_actions)
def test_GIVEN_invalid_land_cover_actions_already_saved_WHEN_get_THEN_errors_returned_no_actions_rendered(self): with session_scope() as session: model_run = self.model_run_service._get_model_run_being_created(session, self.user) dds = model_run.driving_dataset session.add_all(self.generate_categories_with_regions(dds)) action = LandCoverAction() action.model_run = model_run action.region_id = 1 # Thames action.value_id = 9 # Ice session.add(action) session.commit() # Set the model run to have a different driving dataset - this should result in an error model_run.driving_dataset = session.query(DrivingDataset).filter(DrivingDataset.name == "driving2").one() response = self.app.get(url(controller='model_run', action='land_cover')) assert_that(response.normal_body, contains_string("Your saved Land Cover edits are not valid for the " "chosen driving data")) assert_that(response.normal_body, is_not(contains_string("Change <b>"))) # Actions start with this
def save_land_cover_actions(self, values, errors, model_run): """ Validate and Save requested land cover actions :param values: POST dictionary of form values :param errors: Object to add errors to :param model_run: The model run being created :return: """ self._validate_values(values, errors, model_run.driving_dataset, model_run) if len(errors) == 0: land_cover_actions = [] actions = [] for key in values: actions += re.findall("^action_(\d+)", key) for index in set(actions): lca = LandCoverAction() lca.region_id = int(values['action_%s_region' % index]) lca.value_id = int(values['action_%s_value' % index]) lca.order = int(values['action_%s_order' % index]) land_cover_actions.append(lca) self.land_cover_service.save_land_cover_actions_for_model(model_run, land_cover_actions)