Esempio n. 1
0
 def test_should_tell_if_question_ends_the_flow_temporarily(self):
     answer = TextAnswerFactory()
     answer_optional = TextAnswerFactory()
     flow = Flow(
         temp_end_nodes=[[answer.question.id, Flow.NO_OPTION]],
         optional_end_nodes=[[answer_optional.question.id, Flow.NO_OPTION]])
     self.assertTrue(flow.is_temp_ended(answer))
     self.assertTrue(flow.is_optional_ended(answer_optional))
Esempio n. 2
0
    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')
Esempio n. 3
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
    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)
Esempio n. 6
0
    def test_should_update_text_answers(self):
        text_question = TextQuestionFactory(label='dateOfReceipt')
        text_answer = TextAnswerFactory(value="6/10/2014",
                                        question=text_question)
        updated_text_answer_details = {"value": "5/10/2014"}
        response = self.client.patch(ENDPOINT_URL + str(text_answer.id) + "/",
                                     updated_text_answer_details,
                                     format='json')

        self.assertEqual(response.status_code, 200)
        self.assertDictContainsSubset(updated_text_answer_details,
                                      response.data)
Esempio n. 7
0
    def test_should_add_node_related_to_changed_question_to_sync_data(
            self, mock_scan):
        question = TextQuestionFactory(text='original')
        node = DeliveryNodeFactory()
        TextAnswerFactory(question=question, run=(RunFactory(runnable=node)))

        self.check_update_happens(node, question, {
            'field': 'text',
            'value': 'changed'
        }, {'term': {
            'responses.question.id': [question.id]
        }}, mock_scan)
Esempio n. 8
0
    def test_should_serialise_node_with_delivery_delay(self):
        expected_delivery_date = timezone.datetime(2015, 1, 1).date()
        date_of_receipt = timezone.datetime(2015, 1, 10).date()
        node = DeliveryNodeFactory(delivery_date=expected_delivery_date)
        date_received_question = TextQuestionFactory(label='dateOfReceipt')
        run = RunFactory(runnable=node)
        TextAnswerFactory(question=date_received_question,
                          run=run,
                          value=date_of_receipt)

        serialised = serialise_nodes([node])
        self.assertDictContainsSubset({'delivery_delay': 9}, serialised[0])
Esempio n. 9
0
    def test_should_get_date_answers(self):
        date_question = TextQuestionFactory(label='dateOfReceipt')
        date_answer = TextAnswerFactory(value="6/10/2014",
                                        question=date_question)
        date_answer_details = {
            "value": date_answer.value,
            "question": date_answer.question_id
        }
        response = self.client.get(ENDPOINT_URL)

        self.assertEqual(response.status_code, 200)
        self.assertDictContainsSubset(date_answer_details, response.data[0])
Esempio n. 10
0
    def test_should_return_answers_to_top_level_nodes_of_a_delivery(self):
        delivery = DeliveryFactory()
        node_one = DeliveryNodeFactory(distribution_plan=delivery)
        node_two = DeliveryNodeFactory(distribution_plan=delivery)

        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(text='Remarks', label='additionalDeliveryComments',
                                         flow=flow, position=5)
        run_one = RunFactory(runnable=node_one)
        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(question=question_5, run=run_one, value='Answer1')

        run_two = RunFactory(runnable=node_two)
        MultipleChoiceAnswerFactory(question=question_1, run=run_two, value=option_1)
        NumericAnswerFactory(question=question_2, run=run_two, value=3)
        MultipleChoiceAnswerFactory(question=question_3, run=run_two, value=option_3)
        MultipleChoiceAnswerFactory(question=question_4, run=run_two, value=option_4)
        TextAnswerFactory(question=question_5, run=run_two, value='Answer2')

        response = self.client.get('%s%d/%s/' % (ENDPOINT_URL, delivery.id, 'node_answers'))

        self.assertEqual(len(response.data), 2)
Esempio n. 11
0
 def test_should_add_node_related_to_deleted_text_answer_to_sync_data(
         self, mock_scan):
     node = DeliveryNodeFactory()
     answer = TextAnswerFactory(run=RunFactory(runnable=node),
                                question=TextQuestionFactory())
     self.check_update_happens(
         node,
         answer,
         delete=True,
         mock_scan=mock_scan,
         expected_match_clause={'term': {
             'id': [node.id]
         }})
Esempio n. 12
0
    def test_should_add_node_related_to_changed_text_answer_to_sync_data(
            self, mock_scan):
        node = DeliveryNodeFactory()
        answer = TextAnswerFactory(value='original',
                                   question=TextQuestionFactory(),
                                   run=RunFactory(runnable=node))

        self.check_update_happens(node, answer, {
            'field': 'value',
            'value': 'changed'
        }, {'term': {
            'responses.id': [answer.id]
        }}, mock_scan)
Esempio n. 13
0
    def test_should_return_a_deliveries_answers(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?')

        option_yes = OptionFactory(text='Yes', question=question_1)

        run = RunFactory(runnable=delivery)

        MultipleChoiceAnswerFactory(run=run, question=question_1, value=option_yes)
        TextAnswerFactory(run=run, question=question_2, value='2015-10-10')

        response = self.client.get('%s%d/%s/' % (ENDPOINT_URL, delivery.id, 'answers'))

        self.assertEqual(len(response.data), 2)
Esempio n. 14
0
    def test_should_add_response_to_when_shipment_was_received_question_for_ip_nodes_to_responses_list(self):
        date_received = timezone.datetime(2015, 1, 10).date()
        delivery = DeliveryFactory()
        ip_flow = Flow.objects.get(label=Flow.Label.IMPLEMENTING_PARTNER)
        qn_date_of_receipt = TextQuestion.objects.get(flow=ip_flow, label='dateOfReceipt')
        answer = TextAnswerFactory(run=RunFactory(runnable=delivery), question=qn_date_of_receipt, value=date_received)
        node = DeliveryNodeFactory(tree_position=DeliveryNode.IMPLEMENTING_PARTNER, distribution_plan=delivery,
                                   delivery_date=date_received)

        expected = {
            "run_id": answer.run.id,
            "id": answer.id,
            "value": str(answer.value),
            "question_id": answer.question.id
        }

        serialised = serialise_nodes([node])
        self.assertDictContainsSubset(expected, serialised[0]['responses'][0])
Esempio n. 15
0
 def __prepare_for_is_distribution_expired_test(self, delivery):
     flow = Flow.objects.get(label=Flow.Label.IMPLEMENTING_PARTNER)
     question_is_received = MultipleChoiceQuestionFactory(
         label=Question.LABEL.deliveryReceived, flow=flow)
     question_received_date = TextQuestionFactory(
         label=Question.LABEL.dateOfReceipt, flow=flow)
     option_is_received = OptionFactory(text='Yes',
                                        question=question_is_received)
     run = RunFactory(runnable=delivery)
     DeliveryNodeFactory(distribution_plan=delivery,
                         tree_position=Flow.Label.IMPLEMENTING_PARTNER)
     DeliveryNodeFactory(distribution_plan=delivery,
                         tree_position=Flow.Label.IMPLEMENTING_PARTNER)
     MultipleChoiceAnswerFactory(run=run,
                                 question=question_is_received,
                                 value=option_is_received)
     datetime_span = (
         datetime.datetime.today() -
         datetime.timedelta(days=8)).strftime('%Y-%m-%dT%H:%M:%S')
     TextAnswerFactory(run=run,
                       question=question_received_date,
                       value=datetime_span)
Esempio n. 16
0
    def test_should_filter_alerts_by_runnable_type_when_distribution(self):
        delivery = DeliveryFactory(time_limitation_on_distribution=3)
        question_received_date = TextQuestionFactory(
            label=Question.LABEL.dateOfReceipt, flow=self.flow_ip)
        run = RunFactory(runnable=delivery)
        DeliveryNodeFactory(distribution_plan=delivery,
                            tree_position=Flow.Label.IMPLEMENTING_PARTNER)
        received_date = '2015-11-20T16:00:00'
        TextAnswerFactory(run=run,
                          question=question_received_date,
                          value=received_date)

        distribution_alert = AlertFactory(
            runnable=delivery, issue=Alert.ISSUE_TYPES.distribution_expired)
        distribution_alert_ids, distribution_alerts = self.__respond_by_alert_type(
            'distribution')

        self.assertEqual(Alert.objects.count(), 1)
        self.assertTrue(distribution_alerts[0]['date_received'])
        self.assertEqual(distribution_alerts[0]['date_received'],
                         received_date)
        self.assertEqual(len(distribution_alerts), 1)
        self.assertIn(distribution_alert.id, distribution_alert_ids)
Esempio n. 17
0
    def test_should_return_answers_for_all_first_level_nodes_in_a_delivery(
            self):
        delivery = DeliveryFactory()
        node_one = DeliveryNodeFactory(distribution_plan=delivery)
        node_two = DeliveryNodeFactory(distribution_plan=delivery)

        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(text='Remarks',
                                         label='additionalDeliveryComments',
                                         flow=flow,
                                         position=5)
        run_one = RunFactory(runnable=node_one)
        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(question=question_5, run=run_one, value="Answer")

        run_two = RunFactory(runnable=node_two)
        MultipleChoiceAnswerFactory(question=question_1,
                                    run=run_two,
                                    value=option_1)
        NumericAnswerFactory(question=question_2, run=run_two, value=3)
        MultipleChoiceAnswerFactory(question=question_3,
                                    run=run_two,
                                    value=option_3)
        MultipleChoiceAnswerFactory(question=question_4,
                                    run=run_two,
                                    value=option_4)
        TextAnswerFactory(question=question_5, run=run_two, value="Answer")

        node_answers = delivery.node_answers()

        expected_multiple_choice_answer = {
            'question_label': question_1.label,
            'type': 'multipleChoice',
            'text': question_1.text,
            'value': 'Yes',
            'options': ['Yes'],
            'position': question_1.position
        }
        expected_text_answer = {
            'question_label': question_5.label,
            'type': 'text',
            'text': question_5.text,
            'value': 'Answer',
            'position': question_5.position
        }

        self.assertEqual(len(node_answers), 2)

        self.assertIn(node_answers[0]['id'], [node_one.id, node_two.id])
        self.assertEqual(len(node_answers[0]['answers']), 5)
        self.assertIn(expected_multiple_choice_answer,
                      node_answers[0]['answers'])

        self.assertIn(node_answers[1]['id'], [node_one.id, node_two.id])
        self.assertEqual(len(node_answers[1]['answers']), 5)
        self.assertIn(expected_text_answer, node_answers[1]['answers'])
Esempio n. 18
0
# web answers
MultipleChoiceAnswerFactory(question=web_questions.web_question_1,
                            value=web_questions.yes_1,
                            run=run_77)
NumericAnswerFactory(question=web_questions.web_question_2,
                     value=50,
                     run=run_77)
MultipleChoiceAnswerFactory(question=web_questions.web_question_3,
                            value=web_questions.expired,
                            run=run_77)
MultipleChoiceAnswerFactory(question=web_questions.web_question_4,
                            value=web_questions.yes_2,
                            run=run_77)
TextAnswerFactory(question=web_questions.web_question_5,
                  value='nothing much',
                  run=run_77)

MultipleChoiceAnswerFactory(question=web_questions.web_question_1,
                            value=web_questions.yes_1,
                            run=run_78)
NumericAnswerFactory(question=web_questions.web_question_2,
                     value=70,
                     run=run_78)
MultipleChoiceAnswerFactory(question=web_questions.web_question_3,
                            value=web_questions.damaged,
                            run=run_78)
MultipleChoiceAnswerFactory(question=web_questions.web_question_4,
                            value=web_questions.no_2,
                            run=run_78)
TextAnswerFactory(question=web_questions.web_question_5,
Esempio n. 19
0
 def test_should_tell_if_text_question_ends_the_flow(self):
     answer = TextAnswerFactory()
     flow = Flow(final_end_nodes=[[answer.question.id, Flow.NO_OPTION]])
     self.assertTrue(flow.is_final_ended(answer))
Esempio n. 20
0
 def test_should_call_post_create_answer_hook_on_save_if_question_specifies_a_hook(self, mock_constructor, mock_run):
     mock_constructor.return_value = None
     question = TextQuestionFactory(when_answered='update_consignee_stock_level')
     answer = TextAnswerFactory(question=question)
     mock_constructor.assert_called_with(answer)
     mock_run.assert_called()
Esempio n. 21
0
 def test_should_not_call_post_create_answer_hook_for_questions_that_have_none(self, mock_run):
     question = TextQuestionFactory()
     TextAnswerFactory(question=question)
     self.assertEqual(mock_run.call_count, 0)
Esempio n. 22
0
    def setup_nodes_with_answers(self):
        DistributionPlanNode.append_positive_answers = MagicMock(return_value=None)
        ip = ConsigneeFactory(name='ip one')
        middle_man = ConsigneeFactory(name='middle man one', type=Consignee.TYPES.middle_man)
        end_user_one = ConsigneeFactory(name='consignee one', type=Consignee.TYPES.end_user)
        end_user_two = ConsigneeFactory(name='consignee two', type=Consignee.TYPES.end_user)
        programme_one = ProgrammeFactory(name='my first programme')
        programme_two = ProgrammeFactory(name='my second programme')
        programme_three = ProgrammeFactory(name='my third programme')
        purchase_order_item = PurchaseOrderItemFactory(item=ItemFactory(description='Mama kit'),
                                                       purchase_order=PurchaseOrderFactory(order_number=329293))
        release_order_item = ReleaseOrderItemFactory(item=ItemFactory(description='Baba bla bla'),
                                                     release_order=ReleaseOrderFactory(waybill=5540322))

        ip_node_one = DeliveryNodeFactory(consignee=ip, item=purchase_order_item, quantity=1500,
                                          programme=programme_one, track=True,
                                          distribution_plan=DeliveryFactory(track=True),
                                          location='Fort portal', tree_position=Flow.Label.IMPLEMENTING_PARTNER)
        ip_node_two = DeliveryNodeFactory(consignee=ip, item=release_order_item, quantity=100,
                                          distribution_plan=DeliveryFactory(track=True), programme=programme_two,
                                          location='Kampala', tree_position=Flow.Label.IMPLEMENTING_PARTNER, track=True)
        ip_node_three = DeliveryNodeFactory(consignee=ip, item=release_order_item, quantity=100,
                                            distribution_plan=DeliveryFactory(track=True), programme=programme_two,
                                            location='Gulu', tree_position=Flow.Label.IMPLEMENTING_PARTNER, track=True)
        ip_node_four = DeliveryNodeFactory(consignee=ip, item=purchase_order_item, quantity=100,
                                           distribution_plan=DeliveryFactory(track=True), programme=programme_three,
                                           location='Gulu', tree_position=Flow.Label.IMPLEMENTING_PARTNER, track=True)

        middle_man_node = DeliveryNodeFactory(consignee=middle_man, item=purchase_order_item,
                                              programme=programme_one, location='Wakiso', track=True,
                                              tree_position=Flow.Label.MIDDLE_MAN, parents=[(ip_node_one, 1500)],
                                              distribution_plan=None)
        end_user_node_one = DeliveryNodeFactory(consignee=end_user_one,
                                                item=purchase_order_item, parents=[(middle_man_node, 1000)],
                                                programme=programme_one, location='Amuru', track=True,
                                                distribution_plan=None)
        end_user_node_two = DeliveryNodeFactory(consignee=end_user_two, item=purchase_order_item, track=True,
                                                parents=[(middle_man_node, 500)], programme=programme_one,
                                                distribution_plan=None)
        assign_to_self_node = DeliveryNodeFactory(consignee=ip, item=purchase_order_item,
                                                  tree_position=Flow.Label.END_USER, parents=[(ip_node_four, 93)],
                                                  programme=programme_three, distribution_plan=None,
                                                  is_assigned_to_self=True)

        # IP_ITEM Flow and Questions
        ip_item_flow = FlowFactory(label=Flow.Label.IMPLEMENTING_PARTNER)
        ip_item_question_1 = MultipleChoiceQuestionFactory(text='Was the item received?', label='itemReceived',
                                                           when_answered='update_consignee_inventory',
                                                           flow=ip_item_flow, position=1)
        ip_item_option_1 = OptionFactory(text='Yes', question=ip_item_question_1)
        ip_item_option_no = OptionFactory(text='No', question=ip_item_question_1)
        ip_item_question_2 = NumericQuestionFactory(text='How much was received?', label='amountReceived',
                                                    when_answered='update_consignee_stock_level', flow=ip_item_flow,
                                                    position=3)
        ip_item_question_3 = MultipleChoiceQuestionFactory(text='What is the quality of the product?',
                                                           label='qualityOfProduct',
                                                           flow=ip_item_flow, position=3)
        ip_item_option_2 = OptionFactory(text='Good', question=ip_item_question_3)
        ip_item_option_3 = OptionFactory(text='Damaged', question=ip_item_question_3)
        ip_item_question_4 = MultipleChoiceQuestionFactory(text='Are you satisfied with the product?',
                                                           label='satisfiedWithProduct', flow=ip_item_flow, position=4)
        ip_item_option_4 = OptionFactory(text='Yes', question=ip_item_question_4)
        ip_item_option_5 = OptionFactory(text='No', question=ip_item_question_4)

        # MIDDLE_MAN Flow and Questions
        middle_man_flow = FlowFactory(label=Flow.Label.MIDDLE_MAN)
        mm_question_1 = MultipleChoiceQuestionFactory(text='Was product received?', label='productReceived',
                                                      flow=middle_man_flow, position=1)
        mm_option_1 = OptionFactory(text='Yes', question=mm_question_1)
        mm_option_2 = OptionFactory(text='No', question=mm_question_1)
        mm_question_2 = TextQuestionFactory(label='dateOfReceipt', flow=middle_man_flow,
                                            text='When was item received?', position=2)
        mm_question_3 = NumericQuestionFactory(text='What is the amount received?', label='amountReceived',
                                               flow=middle_man_flow, position=3)

        end_user_flow = FlowFactory(label=Flow.Label.END_USER)
        eu_question_1 = MultipleChoiceQuestionFactory(text='Was the item received?', label='itemReceived',
                                                      flow=end_user_flow, position=1)
        eu_option_1 = OptionFactory(text='Yes', question=eu_question_1)
        eu_question_2 = NumericQuestionFactory(text='How much was received?', label='amountReceived',
                                               flow=end_user_flow)
        eu_question_3 = MultipleChoiceQuestionFactory(text='What is the quality of the product?',
                                                      label='qualityOfProduct', flow=end_user_flow, position=3)
        eu_option_3 = OptionFactory(text='Damaged', question=eu_question_3)
        eu_option_3_1 = OptionFactory(text='Good', question=eu_question_3)
        eu_question_4 = MultipleChoiceQuestionFactory(text='Are you satisfied with the product?',
                                                      label='satisfiedWithProduct', flow=end_user_flow, position=4)
        eu_option_4 = OptionFactory(text='Yes', question=eu_question_4)
        eu_question_5 = TextQuestionFactory(label='dateOfReceipt', flow=end_user_flow,
                                            text='When was Delivery Received?')

        ip_run_one = RunFactory(runnable=ip_node_one)
        MultipleChoiceAnswerFactory(question=ip_item_question_1, run=ip_run_one, value=ip_item_option_1)
        NumericAnswerFactory(question=ip_item_question_2, run=ip_run_one, value=1500)
        MultipleChoiceAnswerFactory(question=ip_item_question_3, run=ip_run_one, value=ip_item_option_2)
        MultipleChoiceAnswerFactory(question=ip_item_question_4, run=ip_run_one, value=ip_item_option_4)

        ip_run_three = RunFactory(runnable=ip_node_three)
        MultipleChoiceAnswerFactory(question=ip_item_question_1, run=ip_run_three, value=ip_item_option_no)

        ip_run_two = RunFactory(runnable=ip_node_two)
        MultipleChoiceAnswerFactory(question=ip_item_question_1, run=ip_run_two, value=ip_item_option_1)
        NumericAnswerFactory(question=ip_item_question_2, run=ip_run_two, value=50)
        MultipleChoiceAnswerFactory(question=ip_item_question_3, run=ip_run_two, value=ip_item_option_3)
        MultipleChoiceAnswerFactory(question=ip_item_question_4, run=ip_run_two, value=ip_item_option_5)

        middle_man_node_run = RunFactory(runnable=middle_man_node)
        MultipleChoiceAnswerFactory(question=mm_question_1, run=middle_man_node_run, value=mm_option_1)
        TextAnswerFactory(question=mm_question_2, run=middle_man_node_run, value='2014-9-25')
        NumericAnswerFactory(question=mm_question_3, run=middle_man_node_run, value=1501, remark='Some remark 2')

        end_user_run_one = RunFactory(runnable=end_user_node_one)
        MultipleChoiceAnswerFactory(question=eu_question_1, run=end_user_run_one, value=eu_option_1)
        NumericAnswerFactory(question=eu_question_2, run=end_user_run_one, value=5)
        MultipleChoiceAnswerFactory(question=eu_question_3, run=end_user_run_one, value=eu_option_3)
        MultipleChoiceAnswerFactory(question=eu_question_4, run=end_user_run_one, value=eu_option_4)
        TextAnswerFactory(run=end_user_run_one, question=eu_question_5, value='2014-10-10')

        end_user_run_two = RunFactory(runnable=end_user_node_two)
        MultipleChoiceAnswerFactory(question=eu_question_1, run=end_user_run_two, value=eu_option_1)
        NumericAnswerFactory(question=eu_question_2, run=end_user_run_two, value=500)
        MultipleChoiceAnswerFactory(question=eu_question_3, run=end_user_run_two, value=eu_option_3)
        MultipleChoiceAnswerFactory(question=eu_question_4, run=end_user_run_two, value=eu_option_4)
        TextAnswerFactory(question=eu_question_5, run=end_user_run_two, value='2013-12-12')

        assign_to_self_run = RunFactory(runnable=assign_to_self_node)
        MultipleChoiceAnswerFactory(question=eu_question_1, run=assign_to_self_run, value=eu_option_1)
        NumericAnswerFactory(question=eu_question_2, run=assign_to_self_run, value=500)
        TextAnswerFactory(question=eu_question_5, run=assign_to_self_run, value='2013-12-14')
        MultipleChoiceAnswerFactory(question=eu_question_3, run=assign_to_self_run, value=eu_option_3_1)
        MultipleChoiceAnswerFactory(question=eu_question_4, run=assign_to_self_run, value=eu_option_4)

        return end_user_node_one, purchase_order_item, release_order_item, end_user_node_two, ip_node_two, ip, assign_to_self_node