def setup_multiple_nodes_with_answers(self, number_of_nodes): consignee_one = ConsigneeFactory(name='consignee one') programme_one = ProgrammeFactory(name='my first programme') po_item = PurchaseOrderItemFactory(item=ItemFactory(description='Mama kit'), purchase_order=PurchaseOrderFactory(order_number=329293)) flow = FlowFactory(label='WEB') question_1 = MultipleChoiceQuestionFactory(text='Was the item received?', label='itemReceived', flow=flow, position=1) option_1 = OptionFactory(text='Yes', question=question_1) question_2 = NumericQuestionFactory(text='How much was received?', label='amountReceived', flow=flow) question_3 = MultipleChoiceQuestionFactory(text='What is the quality of the product?', label='qualityOfProduct', flow=flow, position=3) option_3 = OptionFactory(text='Damaged', question=question_3) question_4 = MultipleChoiceQuestionFactory(text='Are you satisfied with the product?', label='satisfiedWithProduct', flow=flow, position=4) option_4 = OptionFactory(text='Yes', question=question_4) question_5 = TextQuestionFactory(label='dateOfReceipt', flow=flow, text='When was Delivery Received?') nodes = [] for index in range(number_of_nodes): node = DeliveryNodeFactory(consignee=consignee_one, item=po_item, programme=programme_one, distribution_plan=DeliveryFactory(track=True), track=True) run_one = RunFactory(runnable=node) MultipleChoiceAnswerFactory(question=question_1, run=run_one, value=option_1) NumericAnswerFactory(question=question_2, run=run_one, value=5) MultipleChoiceAnswerFactory(question=question_3, run=run_one, value=option_3) MultipleChoiceAnswerFactory(question=question_4, run=run_one, value=option_4) TextAnswerFactory(run=run_one, question=question_5, value='2014-10-10') nodes.append(node) return nodes
def test_should_return_delivery_empty_value_if_no_answers(self): self._create_questions() programme_name = 'YP104 MANAGEMENT RESULTS' wakiso = 'WAKISO DHO' shipment_date = date(2015, 3, 10) delivery = DeliveryFactory( contact_person_id=CONTACT_PERSON_ID, track=True, programme=ProgrammeFactory(name=programme_name), consignee=ConsigneeFactory(name=wakiso), delivery_date=shipment_date) order_number = 34230335 DeliveryNodeFactory( contact_person_id=CONTACT_PERSON_ID, distribution_plan=delivery, track=True, tree_position=Flow.Label.IMPLEMENTING_PARTNER, item=PurchaseOrderItemFactory(purchase_order=PurchaseOrderFactory( order_number=order_number))) run = RunFactory(runnable=delivery) MultipleChoiceAnswerFactory(run=run, question=self.delivery_received_qtn, value=self.yes_one) MultipleChoiceAnswerFactory(run=run, question=self.satisfied_with_delivery, value=self.no_three) programme = Programme.objects.get(name=programme_name) consignee = Consignee.objects.get(name=wakiso) yes = 'Yes' no = 'No' empty = '' expected_response = [{ 'deliveryReceived': yes, 'shipmentDate': date(2015, 3, 10), 'dateOfReceipt': empty, 'orderNumber': order_number, 'programme': { 'id': programme.id, 'name': programme.name }, 'consignee': { 'id': consignee.id, 'name': consignee.name }, Question.LABEL.isDeliveryInGoodOrder: empty, 'satisfiedWithDelivery': no, 'urls': [], 'absoluteUrls': [], 'additionalDeliveryComments': empty, 'contactPersonId': CONTACT_PERSON_ID, 'value': 100, 'location': 'Kampala' }] response = self.client.get(ENDPOINT_URL) self.assertEqual(response.status_code, 200) self.assertEqual(response.data['results'], expected_response)
def test_should_tell_if_question_answer_combination_ends_the_flow(self): answer_1 = MultipleChoiceAnswerFactory() answer_2 = MultipleChoiceAnswerFactory() flow = Flow( final_end_nodes=[[answer_1.question.id, answer_1.value.id], [answer_2.question.id, answer_2.value.id]]) self.assertTrue(flow.is_final_ended(answer_1)) self.assertTrue(flow.is_final_ended(answer_2))
def setup_responses(self): DeliveryNode.objects.all().delete() MultipleChoiceQuestion.objects.all().delete() MultipleChoiceAnswer.objects.all().delete() from eums.fixtures.ip_questions import seed_ip_questions questions, options, _ = seed_ip_questions() self.programme = ProgrammeFactory(name='my-program') self.ip = ConsigneeFactory() self.today = FakeDate.today() po_item = PurchaseOrderItemFactory(quantity=100, value=1000) ip_delivery_one = DeliveryFactory(location='some location', track=True, programme=self.programme, consignee=self.ip, ip=self.ip, delivery_date=self.today + datetime.timedelta(days=3)) DeliveryNodeFactory(tree_position=DeliveryNode.IMPLEMENTING_PARTNER, quantity=10, item=po_item, distribution_plan=ip_delivery_one, consignee=self.ip) other_delivery = DeliveryFactory(location='Other location', delivery_date=self.today, track=True) DeliveryNodeFactory(tree_position=DeliveryNode.IMPLEMENTING_PARTNER, quantity=20, item=po_item, distribution_plan=other_delivery) MultipleChoiceAnswerFactory( run=RunFactory(runnable=ip_delivery_one, status=Run.STATUS.scheduled), question=questions['WAS_DELIVERY_RECEIVED'], value=options['DELIVERY_WAS_RECEIVED']) MultipleChoiceAnswerFactory( run=RunFactory(runnable=ip_delivery_one, status=Run.STATUS.scheduled), question=questions['IS_DELIVERY_IN_GOOD_ORDER'], value=options['IN_GOOD_CONDITION']) non_response_delivery_one = DeliveryFactory(delivery_date=self.today + datetime.timedelta(days=4), location='some location', track=True) DeliveryNodeFactory(tree_position=DeliveryNode.IMPLEMENTING_PARTNER, quantity=30, item=po_item, distribution_plan=non_response_delivery_one) RunFactory(runnable=non_response_delivery_one, status=Run.STATUS.scheduled)
def test_should_only_update_deliveries_when_item_is_received_again_by_ip(self): MultipleChoiceAnswerFactory(question=self.was_item_received, value=self.yes, run=RunFactory(runnable=self.node)) consignee_item_entry = ConsigneeItem.objects.get(consignee=self.consignee, item=self.item) self.assertEqual(consignee_item_entry.deliveries, [self.node.id]) new_node = DeliveryNodeFactory(consignee=self.consignee, item=PurchaseOrderItemFactory(item=self.item)) MultipleChoiceAnswerFactory(question=self.was_item_received, value=self.yes, run=RunFactory(runnable=new_node)) updated_consignee_item_entry = ConsigneeItem.objects.get(consignee=self.consignee, item=self.item) self.assertItemsEqual(updated_consignee_item_entry.deliveries, [self.node.id, new_node.id])
def test_should_remove_node_from_item_entry_when_that_node_is_modified_to_be_unreceived(self): MultipleChoiceAnswerFactory(question=self.was_item_received, value=self.yes, run=RunFactory(runnable=self.node)) new_node = DeliveryNodeFactory(consignee=self.consignee, item=PurchaseOrderItemFactory(item=self.item)) MultipleChoiceAnswerFactory(question=self.was_item_received, value=self.yes, run=RunFactory(runnable=new_node)) updated_item_entry = ConsigneeItem.objects.get(consignee=self.consignee, item=self.item) self.assertItemsEqual(updated_item_entry.deliveries, [self.node.id, new_node.id]) MultipleChoiceAnswerFactory(question=self.was_item_received, value=self.no, run=RunFactory(runnable=self.node)) updated_item_entry = ConsigneeItem.objects.get(consignee=self.consignee, item=self.item) self.assertItemsEqual(updated_item_entry.deliveries, [new_node.id])
def _setup_nodes_with_answers(self): self._create_questions() programme_one = ProgrammeFactory(name='programme one') programme_two = ProgrammeFactory(name='programme two') programme_three = ProgrammeFactory(name='programme three') delivery_one = DeliveryFactory(track=True, programme=programme_one, delivery_date=date(2015, 3, 10), location='Wakiso') delivery_two = DeliveryFactory(track=True, programme=programme_two, delivery_date=date(2015, 6, 20), location='Kampala') delivery_three = DeliveryFactory(track=True, programme=programme_three, delivery_date=date(2015, 9, 30), location='Fort portal') DeliveryNodeFactory(distribution_plan=delivery_one, programme=programme_one, tree_position=DistributionPlanNode.IMPLEMENTING_PARTNER) DeliveryNodeFactory(distribution_plan=delivery_two, programme=programme_two, tree_position=DistributionPlanNode.IMPLEMENTING_PARTNER) DeliveryNodeFactory(distribution_plan=delivery_three, programme=programme_two, tree_position=DistributionPlanNode.IMPLEMENTING_PARTNER) run_one = RunFactory(runnable=delivery_one) MultipleChoiceAnswerFactory(run=run_one, question=self.delivery_received_qtn, value=self.yes_one) MultipleChoiceAnswerFactory(run=run_one, question=self.delivery_in_good_order, value=self.no_two) MultipleChoiceAnswerFactory(run=run_one, question=self.satisfied_with_delivery, value=self.no_three) run_two = RunFactory(runnable=delivery_two) MultipleChoiceAnswerFactory(run=run_two, question=self.delivery_received_qtn, value=self.no_one) MultipleChoiceAnswerFactory(run=run_two, question=self.delivery_in_good_order, value=self.yes_two) MultipleChoiceAnswerFactory(run=run_two, question=self.satisfied_with_delivery, value=self.yes_three) run_three = RunFactory(runnable=delivery_three) MultipleChoiceAnswerFactory(run=run_three, question=self.delivery_received_qtn, value=self.yes_one) MultipleChoiceAnswerFactory(run=run_three, question=self.delivery_in_good_order, value=self.no_two) MultipleChoiceAnswerFactory(run=run_three, question=self.satisfied_with_delivery, value=self.yes_three)
def test_should_return_answers_for_completed_or_scheduled_runs_only(self): delivery = DeliveryFactory() flow = FlowFactory(label='IMPLEMENTING_PARTNER') question_1 = MultipleChoiceQuestionFactory( label='deliveryReceived', flow=flow, text='Was Delivery Received?', position=3) question_2 = TextQuestionFactory(label='dateOfReceipt', flow=flow, text='When was Delivery Received?', position=1) question_3 = TextQuestionFactory( label='satisfiedWithProduct', flow=flow, text='Are you satisfied with product?', position=2) option_no = OptionFactory(text='No', question=question_1) option_yes = OptionFactory(text='Yes', question=question_1) run_one = RunFactory(runnable=delivery) MultipleChoiceAnswerFactory(question=question_1, value=option_no, run=run_one) TextAnswerFactory(question=question_2, value="2014-10-10", run=run_one) TextAnswerFactory(question=question_3, value="yup", run=run_one) answers = delivery.answers() self.assertEqual(len(answers), 3) self.assertEqual(answers[0]['value'], '2014-10-10') run_one.status = 'cancelled' run_one.save() answers = delivery.answers() self.assertEqual(len(answers), 3) self.assertEqual(answers[0]['value'], '') run_two = RunFactory(runnable=delivery) MultipleChoiceAnswerFactory(question=question_1, value=option_yes, run=run_two) answers = delivery.answers() self.assertEqual(len(answers), 3) self.assertEqual(answers[0]['value'], '') self.assertEqual(answers[1]['value'], '') self.assertEqual(answers[2]['value'], 'Yes')
def test_responses_serialisation_should_have_an_entry_for_each_response_a_node_has( self): node = DeliveryNodeFactory() answer_one = MultipleChoiceAnswerFactory(run=RunFactory(runnable=node)) answer_two = MultipleChoiceAnswerFactory(run=RunFactory(runnable=node)) serialised = serialise_nodes([node]) answer_ids = [ response['id'] for response in serialised[0]['responses'] ] self.assertItemsEqual(answer_ids, [answer_one.id, answer_two.id])
def test_should_delete_item_entry_when_the_only_yes_answer_on_a_node_is_deleted(self): yes_answer = MultipleChoiceAnswerFactory(question=self.was_item_received, value=self.yes, run=RunFactory(runnable=self.node)) self.assertEqual(ConsigneeItem.objects.get(consignee=self.consignee, item=self.item).deliveries, [self.node.id]) yes_answer.delete() self.assertFalse(ConsigneeItem.objects.filter(consignee=self.consignee, item=self.item).exists())
def test_should_not_return_deliveries_for_ip_if_received_is_false(self): first_consignee = ConsigneeFactory() date = datetime.date(2014, 07, 9) first_delivery = DeliveryFactory(consignee=first_consignee, track=True, delivery_date=date) second_delivery = DeliveryFactory(consignee=first_consignee, track=True) self.logout() self.log_consignee_in(consignee=first_consignee) response = self.client.get(ENDPOINT_URL) ids = map(lambda delivery: delivery['id'], response.data) self.assertEqual(response.status_code, 200) self.assertIn(first_delivery.id, ids) self.assertIn(second_delivery.id, ids) flow = FlowFactory(label=Flow.Label.IMPLEMENTING_PARTNER) delivery_received_qn = MultipleChoiceQuestionFactory(label='deliveryReceived', flow=flow) OptionFactory(question=delivery_received_qn, text='Yes') option_no = OptionFactory(question=delivery_received_qn, text='No') run = RunFactory(runnable=first_delivery) MultipleChoiceAnswerFactory(run=run, question=delivery_received_qn, value=option_no) response = self.client.get(ENDPOINT_URL) ids = map(lambda delivery: delivery['id'], response.data) self.assertEqual(response.status_code, 200) self.assertNotIn(first_delivery.id, ids) self.assertIn(second_delivery.id, ids)
def test_should_return_false_when_delivery_run_was_cancelled(self): delivery = DeliveryFactory() question = MultipleChoiceQuestionFactory(label='deliveryReceived') option = OptionFactory(text='Yes', question=question) run = RunFactory(runnable=delivery, status=Run.STATUS.cancelled) MultipleChoiceAnswerFactory(run=run, question=question, value=option) self.assertFalse(delivery.is_received())
def test_should_get_all_answers(self): run = RunFactory() multiple_answer_one = MultipleChoiceAnswerFactory(run=run) numeric_answer_one = NumericAnswerFactory(run=run) run_answers = run.answers() self.assertIn(multiple_answer_one, run_answers) self.assertIn(numeric_answer_one, run_answers)
def test_should_create_new_consignee_items_entry_when_new_item_is_received_by_ip(self): self.assertFalse(ConsigneeItem.objects.filter(consignee=self.consignee, item=self.item).exists()) MultipleChoiceAnswerFactory(question=self.was_item_received, value=self.yes, run=RunFactory(runnable=self.node)) consignee_item_entry = ConsigneeItem.objects.get(consignee=self.consignee, item=self.item) self.assertEqual(consignee_item_entry.available_balance(), 0) self.assertEqual(consignee_item_entry.amount_received, 0) self.assertEqual(consignee_item_entry.deliveries, [self.node.id])
def test_should_serialise_node_response_run(self): node = DeliveryNodeFactory() run = MultipleChoiceAnswerFactory(run=RunFactory(runnable=node)).run expected = {"status": run.status, "phone": run.phone, "id": run.id} serialised = serialise_nodes([node]) self.assertDictContainsSubset(expected, serialised[0]['responses'][0]['run'])
def create_node_and_answers(self, number_of_deliveries, order_number, programme_name, consignee, comment, is_purchase, track, tree_position=Flow.Label.IMPLEMENTING_PARTNER, location='Madagascar', contact_person_id=CONTACT_PERSON_ID): while number_of_deliveries > 0: delivery = DeliveryFactory( contact_person_id=contact_person_id, track=track, programme=ProgrammeFactory(name=programme_name), consignee=ConsigneeFactory(name=consignee), delivery_date=date(2015, 3, 10), location=location) self._create_node(delivery, is_purchase, order_number, track, tree_position, location) run = RunFactory(runnable=delivery) MultipleChoiceAnswerFactory(run=run, question=self.delivery_received_qtn, value=self.yes_one) delivery_date = '12/03/2015' TextAnswerFactory(run=run, question=self.date_received_qtn, value=delivery_date) MultipleChoiceAnswerFactory(run=run, question=self.delivery_in_good_order, value=self.yes_two) MultipleChoiceAnswerFactory(run=run, question=self.satisfied_with_delivery, value=self.no_three) TextAnswerFactory(run=run, question=self.additional_comments, value=comment) FileUploadFactory(plan=delivery, file='photo/2016/02/14/world.jpg') FileUploadFactory(plan=delivery, file='photo/2016/02/14/peace.jpg') number_of_deliveries -= 1 order_number += 1
def test_should_remove_consignee_items_entry_when_the_only_delivery_attached_is_edited_to_being_unreceived(self): item_was_received = MultipleChoiceAnswerFactory(question=self.was_item_received, value=self.yes, run=RunFactory(runnable=self.node)) consignee_item_entry = ConsigneeItem.objects.get(consignee=self.consignee, item=self.item) self.assertEqual(consignee_item_entry.deliveries, [self.node.id]) item_was_received.value = self.no item_was_received.save() self.assertFalse(ConsigneeItem.objects.filter(consignee=self.consignee, item=self.item).exists())
def test_should_provide_shipment_received_value_from_api(self): delivery = DeliveryFactory() question = MultipleChoiceQuestionFactory(label='deliveryReceived') option = OptionFactory(text='Yes', question=question) run = RunFactory(runnable=delivery) MultipleChoiceAnswerFactory(run=run, question=question, value=option) response = self.client.get(ENDPOINT_URL) self.assertEqual(response.data[0]['shipment_received'], True)
def test_should_return_false_when_delivery_is_received_and_there_are_no_answers_for_some_nodes( self): delivery = DeliveryFactory() question = MultipleChoiceQuestionFactory(label='deliveryReceived') option = OptionFactory(text='Yes', question=question) run = RunFactory(runnable=delivery) MultipleChoiceAnswerFactory(run=run, question=question, value=option) node_one = DeliveryNodeFactory(distribution_plan=delivery) DeliveryNodeFactory(distribution_plan=delivery) item_question = MultipleChoiceQuestionFactory(label='itemReceived') yes_node_option = OptionFactory(text='Yes', question=item_question) MultipleChoiceAnswerFactory(run=RunFactory(runnable=node_one), question=item_question, value=yes_node_option) self.assertFalse(delivery.is_received())
def setup_responses(self): DeliveryNode.objects.all().delete() MultipleChoiceQuestion.objects.all().delete() MultipleChoiceAnswer.objects.all().delete() from eums.fixtures.ip_questions import seed_ip_questions questions, options, _ = seed_ip_questions() self.programme = ProgrammeFactory(name='my-program') self.ip = ConsigneeFactory() self.today = FakeDate.today() ip_delivery_one = DeliveryFactory(location='some location', track=True, programme=self.programme, consignee=self.ip, ip=self.ip, delivery_date=self.today + datetime.timedelta(days=3)) DeliveryFactory(location='Other location', delivery_date=self.today, track=True) MultipleChoiceAnswerFactory( run=RunFactory(runnable=ip_delivery_one, status=Run.STATUS.scheduled), question=questions['WAS_DELIVERY_RECEIVED'], value=options['DELIVERY_WAS_RECEIVED']) MultipleChoiceAnswerFactory( run=RunFactory(runnable=ip_delivery_one, status=Run.STATUS.scheduled), question=questions['IS_DELIVERY_IN_GOOD_ORDER'], value=options['IN_GOOD_CONDITION']) non_response_delivery_one = DeliveryFactory(delivery_date=self.today + datetime.timedelta(days=4), location='some location', track=True) RunFactory(runnable=non_response_delivery_one, status=Run.STATUS.scheduled)
def test_gets_all_response_for_node_consignee(self): multichoice_question = MultipleChoiceQuestionFactory( label='productReceived') yes_option = OptionFactory(text='Yes', question=multichoice_question) no_option = OptionFactory(text='No', question=multichoice_question) sugar = ItemFactory(description='Sugar') salt = ItemFactory(description='Salt') numeric_question = NumericQuestionFactory(label='AmountReceived') item = SalesOrderItemFactory(item=salt, description='10 bags of salt') salt_node = DeliveryNodeFactory( quantity=100, item=PurchaseOrderItemFactory(sales_order_item=item)) run = RunFactory(runnable=salt_node, status='completed') sugar_item = SalesOrderItemFactory(item=sugar, description='10 bags of sugar') sugar_node = DeliveryNodeFactory( quantity=100, item=PurchaseOrderItemFactory(sales_order_item=sugar_item)) sugar_run = RunFactory(runnable=sugar_node, status='completed') multiple_answer_one = MultipleChoiceAnswerFactory( run=run, question=multichoice_question, value=yes_option) numeric_answer_one = NumericAnswerFactory(run=run, value=80, question=numeric_question) multiple_answer_two = MultipleChoiceAnswerFactory( run=sugar_run, question=multichoice_question, value=no_option) numeric_answer_two = NumericAnswerFactory(run=sugar_run, value=80, question=numeric_question) salt_node_responses = salt_node.responses() sugar_node_responses = sugar_node.responses() self.assertIn(multiple_answer_one, salt_node_responses[run]) self.assertIn(numeric_answer_one, salt_node_responses[run]) self.assertIn(multiple_answer_two, sugar_node_responses[sugar_run]) self.assertIn(numeric_answer_two, sugar_node_responses[sugar_run])
def test_should_get_number_of_successful_deliveries_from_only_the_latest_scheduled_or_completed_runs( self): canceled_run = RunFactory(runnable=self.end_user_node_two, status=Run.STATUS.cancelled) from eums.fixtures.end_user_questions import WAS_PRODUCT_RECEIVED, PRODUCT_WAS_RECEIVED MultipleChoiceAnswerFactory(run=canceled_run, question=WAS_PRODUCT_RECEIVED, value=PRODUCT_WAS_RECEIVED) response = self.client.get('%s?treePosition=END_USER' % ENDPOINT_URL) self.assertEqual( response.data.get('numberOfSuccessfulProductDeliveries'), 2)
def test_should_return_answers_for_delivery(self): delivery = DeliveryFactory() flow = FlowFactory(label='IMPLEMENTING_PARTNER') question_1 = MultipleChoiceQuestionFactory( label='deliveryReceived', flow=flow, text='Was Delivery Received?') question_2 = TextQuestionFactory(label='dateOfReceipt', flow=flow, text='When was Delivery Received?') question_3 = NumericQuestionFactory(text='How much was received?', label='amountReceived', flow=flow) option_yes = OptionFactory(text='Yes', question=question_1) run = RunFactory(runnable=delivery) multiple_choice_answer = MultipleChoiceAnswerFactory( run=run, question=question_1, value=option_yes) text_answer = TextAnswerFactory(run=run, question=question_2, value='2015-10-10') numeric_answer = NumericAnswerFactory(run=run, question=question_3, value=10) expected_multiple_choice_answer = { 'question_label': question_1.label, 'type': 'multipleChoice', 'text': question_1.text, 'value': multiple_choice_answer.value.text, 'options': ['Yes'], 'position': question_1.position } expected_text_answer = { 'question_label': question_2.label, 'type': 'text', 'text': question_2.text, 'value': text_answer.value, 'position': question_2.position } expected_numeric_answer = { 'question_label': question_3.label, 'type': 'numeric', 'text': question_3.text, 'value': numeric_answer.value, 'position': question_3.position } answers = delivery.answers() self.assertEqual(len(answers), 3) self.assertIn(expected_multiple_choice_answer, answers) self.assertIn(expected_text_answer, answers) self.assertIn(expected_numeric_answer, answers)
def test_should_return_true_when_delivery_is_partially_received(self): delivery = DeliveryFactory() question = MultipleChoiceQuestionFactory(label='deliveryReceived') option = OptionFactory(text='Yes', question=question) run = RunFactory(runnable=delivery) self.assertFalse(delivery.is_received()) MultipleChoiceAnswerFactory(run=run, question=question, value=option) self.assertTrue(delivery.is_partially_received())
def test_should_only_return_implementing_partner_responses(self): question = MultipleChoiceQuestionFactory(label='productReceived') yes_option = OptionFactory(text='Yes', question=question) item = ItemFactory(description='Salt') order_item = PurchaseOrderItemFactory(item=item, value=1000) node_ip_one = DeliveryNodeFactory( tree_position=DistributionPlanNode.IMPLEMENTING_PARTNER, item=order_item) node_end_user = DeliveryNodeFactory( tree_position=DistributionPlanNode.END_USER, item=order_item) run_one = RunFactory(runnable=node_ip_one, status='completed') run_two = RunFactory(runnable=node_end_user, status='completed') answer_one = MultipleChoiceAnswerFactory(run=run_one, question=question, value=yes_option) MultipleChoiceAnswerFactory(run=run_two, question=question, value=yes_option) response = self.client.get(IP_ENDPOINT_URL, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 1) node_item = response.data[0] self.assertEqual(node_item['item'], 'Salt') self.assertEqual( node_item['programme'], { 'id': node_ip_one.distribution_plan.programme.id, 'name': node_ip_one.distribution_plan.programme.name }) self.assertEqual(node_item['ip'], { 'id': node_ip_one.ip.id, 'location': unicode(node_ip_one.ip.location) }) self.assertEqual(node_item[question.label], answer_one.format())
def test_should_return_true_when_delivery_is_received_and_all_node_answers_are_received( self): delivery = DeliveryFactory() question = MultipleChoiceQuestionFactory(label='deliveryReceived') option = OptionFactory(text='Yes', question=question) run = RunFactory(runnable=delivery) MultipleChoiceAnswerFactory(run=run, question=question, value=option) node_one = DeliveryNodeFactory(distribution_plan=delivery) node_two = DeliveryNodeFactory(distribution_plan=delivery) item_question = MultipleChoiceQuestionFactory(label='itemReceived') option_two = OptionFactory(text='Yes', question=item_question) MultipleChoiceAnswerFactory(run=RunFactory(runnable=node_one), question=item_question, value=option_two) MultipleChoiceAnswerFactory(run=RunFactory(runnable=node_two), question=item_question, value=option_two) self.assertTrue(delivery.is_received())
def test_should_serialise_node_response_flat_fields(self): node = DeliveryNodeFactory() answer = MultipleChoiceAnswerFactory(run=RunFactory(runnable=node)) expected = { "value_id": answer.value.id, "run_id": answer.run.id, "id": answer.id, "value": answer.value.text, "question_id": answer.question.id } serialised = serialise_nodes([node]) self.assertDictContainsSubset(expected, serialised[0]['responses'][0])
def test_should_return_false_when_delivery_is_received_but_no_answers_have_been_received_for_its_nodes( self): delivery = DeliveryFactory() question = MultipleChoiceQuestionFactory(label='deliveryReceived') option = OptionFactory(text='Yes', question=question) run = RunFactory(runnable=delivery) DeliveryNodeFactory(distribution_plan=delivery) DeliveryNodeFactory(distribution_plan=delivery) MultipleChoiceAnswerFactory(run=run, question=question, value=option) self.assertFalse(delivery.is_received())
def test_should_confirm_delivery_when_all_nodes_are_answered(self): delivery = DeliveryFactory() node_one = DeliveryNodeFactory(distribution_plan=delivery) node_two = DeliveryNodeFactory(distribution_plan=delivery) item_question = MultipleChoiceQuestionFactory(label='itemReceived') option_one = OptionFactory(text='Yes', question=item_question) option_two = OptionFactory(text='No', question=item_question) delivery.confirm() self.assertFalse(delivery.confirmed) MultipleChoiceAnswerFactory(run=RunFactory(runnable=node_one), question=item_question, value=option_one) delivery.confirm() self.assertFalse(delivery.confirmed) MultipleChoiceAnswerFactory(run=RunFactory(runnable=node_two), question=item_question, value=option_two) delivery.confirm() self.assertTrue(delivery.confirmed)
def test_should_return_true_when_shipment_is_received_regardless_of_confirmation_of_items( self): delivery = DeliveryFactory() question = MultipleChoiceQuestionFactory(label='deliveryReceived') option = OptionFactory(text='Yes', question=question) run = RunFactory(runnable=delivery) DeliveryNodeFactory(distribution_plan=delivery) DeliveryNodeFactory(distribution_plan=delivery) MultipleChoiceAnswerFactory(run=run, question=question, value=option) self.assertTrue(delivery.shipment_received())