Ejemplo n.º 1
0
 def test_should_paginate_consignee_list_on_request(self):
     ConsigneeFactory()
     ConsigneeFactory()
     response = self.client.get('%s?paginate=true' % ENDPOINT_URL)
     self.assertIn('results', response.data)
     self.assertIn('count', response.data)
     self.assertIn('next', response.data)
     self.assertIn('previous', response.data)
     self.assertIn('pageSize', response.data)
     self.assertEqual(len(response.data['results']), 2)
Ejemplo n.º 2
0
    def test_should_filter_consignees_by_imported_from_vision_flag(self):
        vision_consignee = ConsigneeFactory(imported_from_vision=True)
        ConsigneeFactory(imported_from_vision=False)

        response = self.client.get(ENDPOINT_URL + '?imported_from_vision=True')

        self.assertEqual(response.status_code, 200)
        self.assertEqual(Consignee.objects.count(), 2)
        self.assertEqual(len(response.data), 1)
        self.assertEqual(response.data[0]['id'], vision_consignee.id)
Ejemplo n.º 3
0
    def test_should_build_contact_with_details_from_contacts_service(self):
        contact_id = '54335c56b3ae9d92f038abb0'
        fake_contact_json = {'firstName': "test", 'lastName': "user1", 'phone': "+256 782 443439",
                             '_id': contact_id}
        fake_response = FakeResponse(fake_contact_json, 200)
        consignee = ConsigneeFactory(contact_person_id=contact_id)
        when(requests).get("%s%s/" % (settings.CONTACTS_SERVICE_URL, contact_id)).thenReturn(fake_response)

        contact = consignee.build_contact()

        self.assertEqual(contact, fake_contact_json)
        self.assertEqual(consignee.contact, contact)
Ejemplo n.º 4
0
 def test_should_save_node_when_quantity_is_not_specified_but_parents_are(
         self):
     parent = DeliveryNodeFactory(consignee=ConsigneeFactory())
     node = DeliveryNode.objects.create(
         parents=[(parent, 5)],
         consignee=ConsigneeFactory(),
         item=PurchaseOrderItemFactory(),
         tree_position=Flow.Label.MIDDLE_MAN,
         location='Jinja',
         contact_person_id='89878528-864A-4320-8426-1DB5C9A5A337',
         delivery_date=datetime.today())
     self.assertEqual(DeliveryNode.objects.get(pk=node.id), node)
Ejemplo n.º 5
0
    def test_should_not_fetch_contact_from_contacts_service_if_contact_was_already_built(self):
        contact_id = '54335c56b3ae9d92f038abb1'
        fake_contact_json = {'firstName': "test", 'lastName': "user1", 'phone': "+256 782 443439",
                             '_id': contact_id}
        fake_response = FakeResponse(fake_contact_json, 200)
        consignee = ConsigneeFactory(contact_person_id=contact_id)
        when(requests).get("%s%s/" % (settings.CONTACTS_SERVICE_URL, contact_id)).thenReturn(fake_response)

        consignee.build_contact()
        consignee.build_contact()

        verify(requests, times=1).get("%s%s/" % (settings.CONTACTS_SERVICE_URL, contact_id))
Ejemplo n.º 6
0
    def test_should_get_programme_ips(self):
        programe = ProgrammeFactory(name='Our Programme')
        delivery = DeliveryFactory(programme=programe)
        kisoro = ConsigneeFactory(name="KISORO")
        wakiso = ConsigneeFactory(name="WAKISO")
        guru = ConsigneeFactory(name="GURU DHO")

        DeliveryNodeFactory(consignee=wakiso, distribution_plan=delivery)
        DeliveryNodeFactory(consignee=guru, distribution_plan=delivery)
        DeliveryNodeFactory(consignee=kisoro, distribution_plan=delivery)

        self.assertEqual(len(programe.to_dict_with_ips()['ips']), 3)
Ejemplo n.º 7
0
    def test_should_list_only_consignees_imported_from_vision_sorted_in_ascending_order_of_name(self):
        one = ConsigneeFactory(name='A', imported_from_vision=True)
        two = ConsigneeFactory(name='Z', imported_from_vision=True)
        three = ConsigneeFactory(name='G', imported_from_vision=True)
        four = ConsigneeFactory(name='E', imported_from_vision=True)
        ConsigneeFactory(imported_from_vision=False)

        response = self.client.get('/users/new/')
        consignees = response.context['form'].consignees
        consignee_ids = [c.id for c in consignees]

        self.assertEqual(Consignee.objects.count(), 5)
        self.assertEqual(len(consignees), 4)

        self.assertListEqual(consignee_ids, [one.id, four.id, three.id, two.id])
Ejemplo n.º 8
0
    def test_should_create_alerts_integration(self):
        purchase_order = PurchaseOrderFactory(order_number=5678)
        purchase_order_item = PurchaseOrderItemFactory(purchase_order=purchase_order)
        consignee = ConsigneeFactory(name="Liverpool FC")
        delivery = DeliveryFactory(consignee=consignee)
        DeliveryNodeFactory(item=purchase_order_item, distribution_plan=delivery)

        date_of_receipt = self.__get_current_date()
        good_comment = "All is good"

        data = {
            'runnable': delivery.id, 'answers': [
                {'question_label': 'deliveryReceived', 'value': 'No'},
                {'question_label': 'dateOfReceipt', 'value': date_of_receipt},
                {'question_label': 'isDeliveryInGoodOrder', 'value': 'Yes'},
                {'question_label': 'areYouSatisfied', 'value': 'Yes'},
                {'question_label': 'additionalDeliveryComments', 'value': good_comment}
            ]}

        response = self.client.post(ENDPOINT_URL, data=json.dumps(data), content_type='application/json')

        self.assertEqual(response.status_code, 201)

        alert = Alert.objects.get(consignee_name="Liverpool FC", order_number=5678)
        self.assertEqual(alert.issue, Alert.ISSUE_TYPES.not_received)
        self.assertTrue(self.mock_distribution_alert_raise.delay.called)
Ejemplo n.º 9
0
    def test_should_create_alert(self, mock_contact):
        purchase_order = PurchaseOrderFactory(order_number=5678)
        purchase_order_item = PurchaseOrderItemFactory(
            purchase_order=purchase_order)
        consignee = ConsigneeFactory(name="Liverpool FC")

        contact_person_id = 'some_id'
        contact = {
            u'_id': contact_person_id,
            u'firstName': u'Chris',
            u'lastName': u'George',
            u'phone': u'+256781111111'
        }
        mock_contact.return_value = contact

        delivery = DeliveryFactory(consignee=consignee,
                                   contact_person_id=contact_person_id)
        DeliveryNodeFactory(item=purchase_order_item,
                            distribution_plan=delivery)

        delivery.create_alert(Alert.ISSUE_TYPES.not_received)

        alerts = Alert.objects.filter(consignee_name="Liverpool FC",
                                      order_number=5678)
        self.assertEqual(alerts.count(), 1)
        alert = alerts.first()
        self.assertEqual(alert.order_type, PurchaseOrderItem.PURCHASE_ORDER)
        self.assertEqual(alert.order_number, 5678)
        self.assertEqual(alert.consignee_name, "Liverpool FC")
        self.assertEqual(alert.contact['contact_name'], "Chris George")
        self.assertEqual(alert.issue, Alert.ISSUE_TYPES.not_received)
        self.assertFalse(alert.is_resolved)
        self.assertIsNone(alert.remarks)
        self.assertEqual(alert.runnable.id, delivery.id)
        self.assertIsNone(alert.item_description)
Ejemplo n.º 10
0
    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)
Ejemplo n.º 11
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
Ejemplo n.º 12
0
    def test_should_fetch_name_from_contacts_and_adds_alert_attribute(self):
        answer_values = [
            {"category": {"base": "No"}, "label": Question.LABEL.deliveryReceived},
            {"category": {"base": "Yes"}, "label": Question.LABEL.isDeliveryInGoodOrder}
        ]
        purchase_order = PurchaseOrderFactory(order_number=5678)
        purchase_order_item = PurchaseOrderItemFactory(purchase_order=purchase_order)
        consignee = ConsigneeFactory(name="Liverpool FC - Unique")

        contact_person_id = 'some_id'
        contact = {u'_id': contact_person_id,
                   u'firstName': u'chris',
                   u'lastName': u'george',
                   u'phone': u'+256781111111'}

        delivery = DeliveryFactory(consignee=consignee, contact_person_id=contact_person_id)
        DeliveryNodeFactory(item=purchase_order_item, distribution_plan=delivery)

        response = MagicMock(json=MagicMock(return_value=contact), status_code=200)
        requests.get = MagicMock(return_value=response)

        ResponseAlertHandler(runnable=delivery, answer_values=answer_values).process()

        alert = Alert.objects.get(consignee_name="Liverpool FC - Unique", order_number=5678)
        self.assertEqual(alert.contact['contact_name'], "chris george")
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
0
    def test_should_get_all_nodes_delivered_by_a_consignee_for_a_specific_item(
            self):
        item = ItemFactory()
        consignee = ConsigneeFactory()

        node_one = DeliveryNodeFactory(
            item=PurchaseOrderItemFactory(item=item), consignee=consignee)
        child_node_one = DeliveryNodeFactory(
            item=PurchaseOrderItemFactory(item=item), parents=[(node_one, 10)])

        node_two = DeliveryNodeFactory(
            item=PurchaseOrderItemFactory(item=item), consignee=consignee)
        child_node_two = DeliveryNodeFactory(
            item=PurchaseOrderItemFactory(item=item), parents=[(node_two, 10)])

        other_item_node_to_consignee = DeliveryNodeFactory(consignee=consignee,
                                                           quantity=200)
        non_item_child_node = DeliveryNodeFactory(
            parents=[(other_item_node_to_consignee, 100)])

        non_consignee_child_node = DeliveryNodeFactory(
            item=PurchaseOrderItemFactory(item=item))

        returned_nodes = DeliveryNode.objects.delivered_by_consignee(
            consignee, item)

        self.assertItemsEqual([child_node_one, child_node_two], returned_nodes)
        self.assertNotIn(non_consignee_child_node, returned_nodes)
        self.assertNotIn(non_item_child_node, returned_nodes)
Ejemplo n.º 15
0
 def setUp(self):
     self.consignee = ConsigneeFactory()
     self.contact = {
         'first_name': 'Test',
         'last_name': 'User',
         'phone': '+256 772 123456'
     }
Ejemplo n.º 16
0
    def test_should_disallow_ip_viewer_to_delete_consignee(self):
        consignee = ConsigneeFactory(name='New Consignee')

        self._login_as('Implementing Partner_viewer')
        response = self.client.delete(ENDPOINT_URL + str(consignee.id) + '/')

        self.assertEqual(response.status_code, 403)
Ejemplo n.º 17
0
    def test_should_get_export_list_for_direct_delivery(self, mock_build_contact):
        self.clean()
        contact = {'firstName': 'John', 'lastName': 'Ssenteza', 'phone': '+256 782 123456'}
        mock_build_contact.return_value = contact
        delivery = DeliveryFactory()
        consignee_name = 'the consignee'
        consignee = ConsigneeFactory(name=consignee_name)
        order_number = 5404939
        mama_kit = 'Mama kit'
        material_code = 'Code 33'
        ro_item = PurchaseOrderItemFactory(item=ItemFactory(description=mama_kit, material_code=material_code),
                                           purchase_order=PurchaseOrderFactory(order_number=order_number))
        delivery_date = '2015-09-06'
        luweero = 'Luweero'
        remark = 'some remark'
        DeliveryNodeFactory(distribution_plan=delivery, delivery_date=delivery_date,
                            consignee=consignee, item=ro_item, location=luweero, remark=remark)

        header = [
            'Purchase Order', 'Item Description', 'Material Code', 'Quantity Shipped', 'Shipment Date',
            'Implementing Partner', 'Contact Person', 'Contact Number', 'District', 'Is End User',
            'Is Tracked', 'Remarks']
        row_one = [order_number, mama_kit, material_code, 10, delivery_date, consignee_name,
                   '%s %s' % (contact['firstName'], contact['lastName']),
                   contact['phone'], luweero, 'Yes', 'No', remark]

        expected_data = [header, row_one]

        csv_exporter = DeliveryCSVExporter.create_delivery_exporter_by_type('Direct', self.HOSTNAME)

        logger.info(expected_data)
        logger.info(csv_exporter.assemble_csv_data())

        self.assertEqual(csv_exporter.assemble_csv_data(), expected_data)
Ejemplo n.º 18
0
 def test_should_add_consignee_name_accessor_to_delivery_nodes_fetched_from_endpoint(
         self):
     consignee_name = 'WAKISO DHO'
     consignee = ConsigneeFactory(name=consignee_name)
     DeliveryNodeFactory(consignee=consignee)
     response = self.client.get(ENDPOINT_URL)
     self.assertEqual(response.data[0]['consignee_name'], consignee_name)
Ejemplo n.º 19
0
    def setup_responses(self):
        DeliveryNode.objects.all().delete()
        MultipleChoiceQuestion.objects.all().delete()

        from eums.fixtures.end_user_questions import seed_questions
        questions, options = seed_questions()

        po_item = PurchaseOrderItemFactory(quantity=100, value=1000)
        end_user_node_one = DeliveryNodeFactory(
            tree_position=DeliveryNode.END_USER, quantity=10, item=po_item)
        MultipleChoiceAnswerFactory(run=RunFactory(
            runnable=end_user_node_one, status=Run.STATUS.scheduled),
                                    question=questions['WAS_PRODUCT_RECEIVED'],
                                    value=options['PRODUCT_WAS_RECEIVED'])
        self.programme = ProgrammeFactory(name='my-program')
        self.ip = ConsigneeFactory()

        distribution_plan = DeliveryFactory(programme=self.programme,
                                            track=True)
        self.today = FakeDate.today()

        self.end_user_node_two = DeliveryNodeFactory(
            tree_position=DeliveryNode.END_USER,
            quantity=20,
            item=po_item,
            distribution_plan=distribution_plan)
        MultipleChoiceAnswerFactory(run=RunFactory(
            runnable=self.end_user_node_two, status=Run.STATUS.scheduled),
                                    question=questions['WAS_PRODUCT_RECEIVED'],
                                    value=options['PRODUCT_WAS_RECEIVED'])
        end_user_node_three = DeliveryNodeFactory(
            tree_position=DeliveryNode.END_USER,
            quantity=30,
            item=po_item,
            distribution_plan=distribution_plan,
            ip=self.ip,
            consignee=self.ip,
            delivery_date=self.today + datetime.timedelta(days=3))
        MultipleChoiceAnswerFactory(run=RunFactory(
            runnable=end_user_node_three, status=Run.STATUS.scheduled),
                                    question=questions['WAS_PRODUCT_RECEIVED'],
                                    value=options['PRODUCT_WAS_NOT_RECEIVED'])
        end_user_node_four = DeliveryNodeFactory(
            tree_position=DeliveryNode.END_USER, quantity=40, item=po_item)
        MultipleChoiceAnswerFactory(run=RunFactory(
            runnable=end_user_node_four, status=Run.STATUS.scheduled),
                                    question=questions['WAS_PRODUCT_RECEIVED'],
                                    value=options['PRODUCT_WAS_NOT_RECEIVED'])
        end_user_node_five = DeliveryNodeFactory(
            tree_position=DeliveryNode.END_USER, quantity=50, item=po_item)
        MultipleChoiceAnswerFactory(run=RunFactory(
            runnable=end_user_node_five, status=Run.STATUS.scheduled),
                                    question=questions['WAS_PRODUCT_RECEIVED'],
                                    value=options['PRODUCT_WAS_NOT_RECEIVED'])
        non_response_node = DeliveryNodeFactory(
            tree_position=DeliveryNode.END_USER,
            track=True,
            quantity=60,
            item=po_item)
        RunFactory(runnable=non_response_node, status=Run.STATUS.scheduled)
Ejemplo n.º 20
0
    def test_should_disallow_unicef_viewer_to_change_consignee(self):
        consignee = ConsigneeFactory(name='New Consignee')

        self._login_as('UNICEF_viewer')
        response = self.client.put(ENDPOINT_URL + str(consignee.id) + '/',
                                   {'name': 'Updated Consignee'})

        self.assertEqual(response.status_code, 403)
Ejemplo n.º 21
0
    def test_should_filter_admin_deliveries_by_date_when_only_form_date_exist(self):
        first_consignee = ConsigneeFactory()
        second_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)
        third_delivery = DeliveryFactory(consignee=second_consignee, track=True, delivery_date=date)

        response = self.client.get(ENDPOINT_URL + '?from=2014-07-6')

        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)
        self.assertIn(third_delivery.id, ids)
Ejemplo n.º 22
0
    def test_should_build_contact_with_details_from_contacts_service(self):
        contact_id = '54335c56b3ae9d92f038abb0'
        fake_contact_json = {
            'firstName': "test",
            'lastName': "user1",
            'phone': "+256 782 443439",
            '_id': contact_id
        }
        fake_response = FakeResponse(fake_contact_json, 200)
        consignee = ConsigneeFactory(contact_person_id=contact_id)
        when(requests).get("%s%s/" % (settings.CONTACTS_SERVICE_URL,
                                      contact_id)).thenReturn(fake_response)

        contact = consignee.build_contact()

        self.assertEqual(contact, fake_contact_json)
        self.assertEqual(consignee.contact, contact)
Ejemplo n.º 23
0
    def test_should_return_parent_consignee_name_as_sender_for_node_when_parent(
            self):
        parent_consignee = ConsigneeFactory(name="Arsenal Fan Club")
        parent_node = DeliveryNodeFactory(consignee=parent_consignee)
        child_node = DeliveryNodeFactory(parents=[(parent_node, 5)])
        message = DeliveryRunMessage(child_node)

        self.assertEqual(message.sender_name(), "Arsenal Fan Club")
Ejemplo n.º 24
0
    def test_should_get_sender_name(self):
        sender_name = 'Save the children'
        root_node = DeliveryNodeFactory(consignee=ConsigneeFactory(
            name=sender_name))
        self.assertEqual(root_node.sender_name(), 'UNICEF')

        node = DeliveryNodeFactory(parents=[(root_node, 5)])
        self.assertEqual(node.sender_name(), sender_name)
    def test_should_get_programmes_with_associated_ips(self):
        programme = ProgrammeFactory(name='Our Programme')
        delivery = DeliveryFactory(programme=programme)
        kisoro = ConsigneeFactory(name="KISORO")
        wakiso = ConsigneeFactory(name="WAKISO")
        guru = ConsigneeFactory(name="GURU DHO")

        DeliveryNodeFactory(consignee=wakiso, distribution_plan=delivery)
        DeliveryNodeFactory(consignee=guru, distribution_plan=delivery)
        DeliveryNodeFactory(consignee=kisoro, distribution_plan=delivery)

        response = self.client.get(ENDPOINT_URL + 'with-ips/', format='json')

        self.assertEqual(response.status_code, 200)
        expected_response = get_programme(programme, response.data)[0]

        [self.assertIn(ip, expected_response['ips']) for ip in [kisoro.id, wakiso.id, guru.id]]
    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)
Ejemplo n.º 27
0
    def test_should_give_unicef_user_permission_to_edit_non_vision_consignee(
            self):
        consignee = ConsigneeFactory(imported_from_vision=False)

        self._login_as('UNICEF_admin')
        response = self.client.get(ENDPOINT_URL + str(consignee.id) +
                                   '/permission_to_edit/')

        self.assertEqual(response.status_code, 200)
Ejemplo n.º 28
0
    def test_nodes_should_be_saved_with_their_ip(self):
        consignee = ConsigneeFactory()
        root = DeliveryNodeFactory(consignee=consignee, quantity=100)
        child = DeliveryNodeFactory(parents=[(root, 60)])
        grandchild = DeliveryNodeFactory(parents=[(child, 30)])

        self.assertEqual(root.ip, consignee)
        self.assertEqual(child.ip, consignee)
        self.assertEqual(grandchild.ip, consignee)
Ejemplo n.º 29
0
    def test_should_disallow_ip_editor_to_delete_consignee_that_is_vision_imported(
            self):
        user = User.objects.create_user(username='******',
                                        password='******')
        consignee = ConsigneeFactory(name="User Attached Consignee")
        profile = UserProfile(user=user, consignee=consignee)
        profile.save()
        user.groups = [Group.objects.get(name='Implementing Partner_editor')]
        user.save()

        consignee = ConsigneeFactory(name='New Consignee',
                                     imported_from_vision=True)
        self.client.login(username='******', password='******')
        response = self.client.delete(ENDPOINT_URL + str(consignee.id) + '/')

        self.assertEqual(response.status_code, 403)
        self.assertEqual(
            Consignee.objects.filter(name='New Consignee').count(), 1)
Ejemplo n.º 30
0
    def test_should_disallow_ip_viewer_to_edit_vision_consignee(self):
        consignee = ConsigneeFactory(imported_from_vision=True)

        self._login_as('Implementing Partner_viewer')
        response = self.client.get(ENDPOINT_URL + str(consignee.id) +
                                   '/permission_to_edit/')

        self.assertEqual(response.data['permission'], 'consignee_forbidden')
        self.assertEqual(response.status_code, 200)
Ejemplo n.º 31
0
def create_consignee(_, consignee_details=None):
    if not consignee_details:
        consignee_details = {}
    consignee = ConsigneeFactory(name=consignee_details.get('name', ''),
                                 type=consignee_details.get('type', 'implementing_partner'),
                                 customer_id=consignee_details.get('customer_id', 'L400'),
                                 location=consignee_details.get('location', 'Kampala'),
                                 imported_from_vision=consignee_details.get('imported_from_vision', False))
    return consignee.__dict__
Ejemplo n.º 32
0
    def test_should_filter_deliveries_by_ip(self):
        first_consignee = ConsigneeFactory()
        second_consignee = ConsigneeFactory()
        first_delivery = DeliveryFactory(consignee=first_consignee, track=True)
        second_delivery = DeliveryFactory(consignee=first_consignee)
        third_delivery = DeliveryFactory(consignee=second_consignee)

        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.assertNotIn(second_delivery.id, ids)
        self.assertNotIn(third_delivery.id, ids)