def test_transform_variants_with_question_variants(question_variant_schema): schema = QuestionnaireSchema(question_variant_schema) answer_store = AnswerStore({}) answer_store.add_or_update(Answer(answer_id="when-answer", value="no")) metadata = {} response_metadata = {} block = schema.get_block("block1") section_id = schema.get_section_id_for_block_id(block["id"]) transformed_block = transform_variants( block, schema, metadata, response_metadata, answer_store, ListStore({}), Location(section_id=section_id, block_id=block["id"]), ) compare_transformed_block(block, transformed_block, "Question 1, No") answer_store.add_or_update(Answer(answer_id="when-answer", value="yes")) transformed_block = transform_variants( block, schema, metadata, response_metadata, answer_store, ListStore({}), Location(section_id=section_id, block_id=block["id"]), ) compare_transformed_block(block, transformed_block, "Question 1, Yes")
def test_transform_variants_list_collector(list_collector_variant_schema): schema = QuestionnaireSchema(list_collector_variant_schema) answer_store = AnswerStore({}) answer_store.add_or_update(Answer(answer_id="when-answer", value="no")) metadata = {} response_metadata = {} block = schema.get_block("block1") section_id = schema.get_section_id_for_block_id(block["id"]) transformed_block = transform_variants( block, schema, metadata, response_metadata, answer_store, ListStore({}), Location(section_id=section_id, block_id=block["id"]), ) compare_transformed_block( block["add_block"], transformed_block["add_block"], "Add, No" ) compare_transformed_block( block["remove_block"], transformed_block["remove_block"], "Remove, No" ) compare_transformed_block( block["edit_block"], transformed_block["edit_block"], "Edit, No" ) answer_store.add_or_update(Answer(answer_id="when-answer", value="yes")) transformed_block = transform_variants( block, schema, metadata, response_metadata, answer_store, ListStore({}), Location(section_id=section_id, block_id=block["id"]), ) compare_transformed_block( block["add_block"], transformed_block["add_block"], "Add, Yes" ) compare_transformed_block( block["remove_block"], transformed_block["remove_block"], "Remove, Yes" ) compare_transformed_block( block["edit_block"], transformed_block["edit_block"], "Edit, Yes" )
def rendered_block(self): transformed_block = transform_variants( self.block, self._schema, self._questionnaire_store.metadata, self._questionnaire_store.response_metadata, self._questionnaire_store.answer_store, self._questionnaire_store.list_store, self._current_location, ) content_page_title = transformed_block.get( "page_title") or self._get_content_title(transformed_block) self._set_page_title(content_page_title) return self.placeholder_renderer.render( transformed_block, self._current_location.list_item_id)
def test_transform_variants_with_no_variants(question_schema): schema = QuestionnaireSchema(question_schema) answer_store = AnswerStore({}) metadata = {} response_metadata = {} block = schema.get_block("block1") section_id = schema.get_section_id_for_block_id(block["id"]) transformed_block = transform_variants( block, schema, metadata, response_metadata, answer_store, ListStore({}), Location(section_id=section_id, block_id=block["id"]), ) assert transformed_block == block
def rendered_block(self): transformed_block = transform_variants( self.block, self._schema, self._questionnaire_store.metadata, self._questionnaire_store.response_metadata, self._questionnaire_store.answer_store, self._questionnaire_store.list_store, self._current_location, ) page_title = transformed_block.get( "page_title") or self._get_safe_page_title( transformed_block["question"]["title"]) self._set_page_title(page_title) rendered_question = self.placeholder_renderer.render( transformed_block["question"], self._current_location.list_item_id) return { **transformed_block, **{ "question": rendered_question }, }
def test_transform_variants_with_content(content_variant_schema): schema = QuestionnaireSchema(content_variant_schema) answer_store = AnswerStore({}) answer_store.add_or_update(Answer(answer_id="age-answer", value="18")) metadata = {} response_metadata = {} block = schema.get_block("block1") section_id = schema.get_section_id_for_block_id(block["id"]) transformed_block = transform_variants( block, schema, metadata, response_metadata, answer_store, ListStore({}), Location(section_id=section_id, block_id=block["id"]), ) assert transformed_block != block assert "content_variants" not in transformed_block assert transformed_block["content"][0]["title"] == "You are over 16"
def _remove_unwanted_questions_answers(self, block, answer_ids_to_keep, current_location): """ Evaluates questions in a block and removes any questions not containing a relevant answer """ transformed_block = transform_variants( block, self._schema, self._metadata, self._response_metadata, self._answer_store, self._list_store, current_location=current_location, ) transformed_block = deepcopy(transformed_block) transformed_block = QuestionnaireSchema.get_mutable_deepcopy( transformed_block) block_question = transformed_block["question"] matching_answers = [] for answer_id in answer_ids_to_keep: matching_answers.extend( self._schema.get_answers_by_answer_id(answer_id)) questions_to_keep = [ self._schema.parent_id_map[answer["id"]] for answer in matching_answers ] if block_question["id"] in questions_to_keep: answers_to_keep = [ answer for answer in block_question["answers"] if answer["id"] in answer_ids_to_keep ] block_question["answers"] = answers_to_keep return transformed_block