示例#1
0
    def test_should_know_if_it_is_fully_delivered_or_not_using_only_tracked_nodes(
            self):
        purchase_order = PurchaseOrderFactory()

        item_one = PurchaseOrderItemFactory(purchase_order=purchase_order,
                                            quantity=100)
        item_two = PurchaseOrderItemFactory(purchase_order=purchase_order,
                                            quantity=100)
        self.assertFalse(purchase_order.is_fully_delivered())

        delivery = DeliveryFactory()
        node_one = NodeFactory(
            item=item_one,
            quantity=100,
            distribution_plan=delivery,
            tree_position=DistributionPlanNode.IMPLEMENTING_PARTNER)
        self.assertFalse(purchase_order.is_fully_delivered())

        node_two = NodeFactory(
            item=item_two,
            quantity=100,
            distribution_plan=delivery,
            tree_position=DistributionPlanNode.IMPLEMENTING_PARTNER)
        self.assertFalse(purchase_order.is_fully_delivered())

        delivery.track = True
        delivery.save()
        node_two.quantity = 50
        node_two.save()
        self.assertFalse(purchase_order.is_fully_delivered())

        node_two.quantity = 100
        node_two.save()
        self.assertTrue(purchase_order.is_fully_delivered())
示例#2
0
 def test_should_take_multiple_losses_into_account_when_calculating_balance(
         self):
     node = DeliveryNodeFactory(acknowledged=50)
     DeliveryNodeLossFactory(quantity=10, delivery_node=node)
     DeliveryNodeLossFactory(quantity=25, delivery_node=node)
     node.save()
     self.assertEqual(node.balance, 15)
示例#3
0
    def test_should_ignore_updates_to_quantity_on_non_root_node(self):
        node_one = DeliveryNodeFactory()
        node = DeliveryNodeFactory(parents=[{'id': node_one.id, 'quantity': 7}])

        node.quantity = 50
        node.save()

        self.assertEqual(node.quantity_in(), 7)
示例#4
0
    def test_update_should_leave_parents_intact_if_parents_are_not_specified(self):
        node_one = DeliveryNodeFactory()
        node_two = DeliveryNodeFactory()

        node = DeliveryNodeFactory(parents=[{'id': node_one.id, 'quantity': 8}, {'id': node_two.id, 'quantity': 10}])

        node.location = 'Changed'
        node.save()
        self.assertEqual(node.quantity_in(), 18)
        self.assertEqual(node.location, 'Changed')
    def test_should_add_changed_node_to_sync_data(self, *_):
        node = DeliveryNodeFactory(location='Kampala')
        SyncInfo.objects.create(status=SyncInfo.STATUS.SUCCESSFUL)
        list_nodes_to_update()

        node.location = 'Changed location'
        node.save()
        nodes_to_sync = list_nodes_to_update()

        self.assertIn(node, nodes_to_sync)
示例#6
0
    def test_should_add_changed_node_to_sync_data(self, *_):
        node = DeliveryNodeFactory(location='Kampala')
        SyncInfo.objects.create(status=SyncInfo.STATUS.SUCCESSFUL)
        list_nodes_to_update()

        node.location = 'Changed location'
        node.save()
        nodes_to_sync = list_nodes_to_update()

        self.assertIn(node, nodes_to_sync)
    def test_should_not_include_match_clauses_with_empty_id_lists(self, mock_scan):
        node = DeliveryNodeFactory(location='Kampala')
        SyncInfo.objects.create(status=SyncInfo.STATUS.SUCCESSFUL)
        list_nodes_to_update()

        node.location = 'Changed location'
        node.save()
        nodes_to_sync = list_nodes_to_update()

        self.assertFalse(mock_scan.called)
        self.assertIn(node, nodes_to_sync)
示例#8
0
    def test_should_ignore_updates_to_quantity_on_non_root_node(self):
        node_one = DeliveryNodeFactory()
        node = DeliveryNodeFactory(parents=[{
            'id': node_one.id,
            'quantity': 7
        }])

        node.quantity = 50
        node.save()

        self.assertEqual(node.quantity_in(), 7)
示例#9
0
    def test_should_not_include_match_clauses_with_empty_id_lists(
            self, mock_scan):
        node = DeliveryNodeFactory(location='Kampala')
        SyncInfo.objects.create(status=SyncInfo.STATUS.SUCCESSFUL)
        list_nodes_to_update()

        node.location = 'Changed location'
        node.save()
        nodes_to_sync = list_nodes_to_update()

        self.assertFalse(mock_scan.called)
        self.assertIn(node, nodes_to_sync)
示例#10
0
    def test_should_ignore_quantity_on_update_if_parents_are_specified(self):
        node_one = DeliveryNodeFactory()

        node = DeliveryNodeFactory(quantity=0)

        node.parents = [{'id': node_one.id, 'quantity': 7}]
        node.quantity = 50
        node.save()
        self.assertEqual(node.quantity_in(), 7)

        node.parents = []
        node.save()
        self.assertEqual(node.quantity_in(), 0)
示例#11
0
    def test_should_ignore_quantity_on_update_if_parents_are_specified(self):
        node_one = DeliveryNodeFactory()

        node = DeliveryNodeFactory(quantity=0)

        node.parents = [{'id': node_one.id, 'quantity': 7}]
        node.quantity = 50
        node.save()
        self.assertEqual(node.quantity_in(), 7)

        node.parents = []
        node.save()
        self.assertEqual(node.quantity_in(), 0)
示例#12
0
    def test_update_should_override_parents_when_parents_list_is_passed(self):
        node_one = DeliveryNodeFactory()
        node_two = DeliveryNodeFactory()

        node = DeliveryNodeFactory(parents=[{'id': node_one.id, 'quantity': 8}, {'id': node_two.id, 'quantity': 10}])
        self.assertEqual(node.quantity_in(), 18)

        node.parents = [{'id': node_one.id, 'quantity': 7}]
        node.save()
        self.assertEqual(node.quantity_in(), 7)

        node.parents = []
        node.save()
        self.assertEqual(node.quantity_in(), 0)
示例#13
0
    def test_should_delete_tracked_node_on_update_with_zero_quantity(self):
        node = DeliveryNodeFactory(quantity=10, track=True)
        self.assertEqual(DeliveryNode.objects.count(), 1)

        node.quantity = 0
        returned_node = node.save()
        self.assertEqual(DeliveryNode.objects.count(), 0)
        self.assertTrue(isinstance(returned_node, DeliveryNode))
示例#14
0
    def test_update_should_leave_parents_intact_if_parents_are_not_specified(
            self):
        node_one = DeliveryNodeFactory()
        node_two = DeliveryNodeFactory()

        node = DeliveryNodeFactory(parents=[{
            'id': node_one.id,
            'quantity': 8
        }, {
            'id': node_two.id,
            'quantity': 10
        }])

        node.location = 'Changed'
        node.save()
        self.assertEqual(node.quantity_in(), 18)
        self.assertEqual(node.location, 'Changed')
示例#15
0
    def test_should_delete_tracked_node_on_update_with_zero_quantity(self):
        node = DeliveryNodeFactory(quantity=10, track=True)
        self.assertEqual(DeliveryNode.objects.count(), 1)

        node.quantity = 0
        returned_node = node.save()
        self.assertEqual(DeliveryNode.objects.count(), 0)
        self.assertTrue(isinstance(returned_node, DeliveryNode))
示例#16
0
    def test_update_should_override_parents_when_parents_list_is_passed(self):
        node_one = DeliveryNodeFactory()
        node_two = DeliveryNodeFactory()

        node = DeliveryNodeFactory(parents=[{
            'id': node_one.id,
            'quantity': 8
        }, {
            'id': node_two.id,
            'quantity': 10
        }])
        self.assertEqual(node.quantity_in(), 18)

        node.parents = [{'id': node_one.id, 'quantity': 7}]
        node.save()
        self.assertEqual(node.quantity_in(), 7)

        node.parents = []
        node.save()
        self.assertEqual(node.quantity_in(), 0)
示例#17
0
    def test_should_know_if_it_is_fully_delivered_or_not_using_only_tracked_nodes(self):
        purchase_order = PurchaseOrderFactory()

        item_one = PurchaseOrderItemFactory(purchase_order=purchase_order, quantity=100)
        item_two = PurchaseOrderItemFactory(purchase_order=purchase_order, quantity=100)
        self.assertFalse(purchase_order.is_fully_delivered())

        delivery = DeliveryFactory()
        node_one = NodeFactory(item=item_one, quantity=100, distribution_plan=delivery)
        self.assertFalse(purchase_order.is_fully_delivered())

        node_two = NodeFactory(item=item_two, quantity=100, distribution_plan=delivery)
        self.assertFalse(purchase_order.is_fully_delivered())

        delivery.track = True
        delivery.save()
        node_two.quantity = 50
        node_two.save()
        self.assertFalse(purchase_order.is_fully_delivered())

        node_two.quantity = 100
        node_two.save()
        self.assertTrue(purchase_order.is_fully_delivered())
示例#18
0
 def test_should_take_multiple_losses_into_account_when_calculating_balance(self):
     node = DeliveryNodeFactory(acknowledged=50)
     DeliveryNodeLossFactory(quantity=10, delivery_node=node)
     DeliveryNodeLossFactory(quantity=25, delivery_node=node)
     node.save()
     self.assertEqual(node.balance, 15)
示例#19
0
 def test_update_quantity_to__zero_on_root_node(self):
     node = DeliveryNodeFactory(quantity=100)
     node.quantity = 0
     node.save()
     self.assertEqual(node.quantity_in(), 0)
示例#20
0
 def test_update_quantity_on_root_node_should_update_quantity(self):
     node = DeliveryNodeFactory(quantity=100)
     node.quantity = 50
     node.save()
     self.assertEqual(node.quantity_in(), 50)
示例#21
0
 def test_update_quantity_on_root_node_should_update_quantity(self):
     node = DeliveryNodeFactory(quantity=100)
     node.quantity = 50
     node.save()
     self.assertEqual(node.quantity_in(), 50)
示例#22
0
 def test_update_quantity_to__zero_on_root_node(self):
     node = DeliveryNodeFactory(quantity=100)
     node.quantity = 0
     node.save()
     self.assertEqual(node.quantity_in(), 0)