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())
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)
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)
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)
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)
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)
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)
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)
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)
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)
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))
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_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))
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)
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())
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)
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)
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)
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)
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)