mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-04 07:05:41 +00:00 
			
		
		
		
	Fixed tests
- Tree classes now need extra configuration in the fixture - Check for null pk when cleaning a tree node
This commit is contained in:
		@@ -82,7 +82,7 @@ class InvenTreeTree(MPTTModel):
 | 
				
			|||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def has_children(self):
 | 
					    def has_children(self):
 | 
				
			||||||
        """ True if there are any children under this item """
 | 
					        """ True if there are any children under this item """
 | 
				
			||||||
        return self.getUniqueChildren().count() > 0
 | 
					        return self.getUniqueChildren(include_self=False).count() > 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def getAcceptableParents(self):
 | 
					    def getAcceptableParents(self):
 | 
				
			||||||
        """ Returns a list of acceptable parent items within this model
 | 
					        """ Returns a list of acceptable parent items within this model
 | 
				
			||||||
@@ -157,7 +157,7 @@ class InvenTreeTree(MPTTModel):
 | 
				
			|||||||
            pass
 | 
					            pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Ensure that the new parent is not already a child
 | 
					        # Ensure that the new parent is not already a child
 | 
				
			||||||
        if self.id in self.getUniqueChildren(include_self=False):
 | 
					        if self.pk is not None and self.id in self.getUniqueChildren(include_self=False):
 | 
				
			||||||
            raise ValidationError("Category cannot set a child as parent")
 | 
					            raise ValidationError("Category cannot set a child as parent")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __str__(self):
 | 
					    def __str__(self):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,11 @@
 | 
				
			|||||||
    name: Electronics
 | 
					    name: Electronics
 | 
				
			||||||
    description: Electronic components
 | 
					    description: Electronic components
 | 
				
			||||||
    parent: null
 | 
					    parent: null
 | 
				
			||||||
    default_location: 1  # Home
 | 
					    default_location: 1
 | 
				
			||||||
 | 
					    level: 0
 | 
				
			||||||
 | 
					    tree_id: 1
 | 
				
			||||||
 | 
					    lft: 1
 | 
				
			||||||
 | 
					    rght: 12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: part.partcategory
 | 
					- model: part.partcategory
 | 
				
			||||||
  pk: 2
 | 
					  pk: 2
 | 
				
			||||||
@@ -15,6 +19,10 @@
 | 
				
			|||||||
    description: Resistors
 | 
					    description: Resistors
 | 
				
			||||||
    parent: 1
 | 
					    parent: 1
 | 
				
			||||||
    default_location: null
 | 
					    default_location: null
 | 
				
			||||||
 | 
					    level: 1
 | 
				
			||||||
 | 
					    tree_id: 1
 | 
				
			||||||
 | 
					    lft: 2
 | 
				
			||||||
 | 
					    rght: 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: part.partcategory
 | 
					- model: part.partcategory
 | 
				
			||||||
  pk: 3
 | 
					  pk: 3
 | 
				
			||||||
@@ -23,6 +31,10 @@
 | 
				
			|||||||
    description: Capacitors
 | 
					    description: Capacitors
 | 
				
			||||||
    parent: 1
 | 
					    parent: 1
 | 
				
			||||||
    default_location: null
 | 
					    default_location: null
 | 
				
			||||||
 | 
					    level: 1
 | 
				
			||||||
 | 
					    tree_id: 1
 | 
				
			||||||
 | 
					    lft: 4
 | 
				
			||||||
 | 
					    rght: 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: part.partcategory
 | 
					- model: part.partcategory
 | 
				
			||||||
  pk: 4
 | 
					  pk: 4
 | 
				
			||||||
@@ -31,6 +43,10 @@
 | 
				
			|||||||
    description: Integrated Circuits
 | 
					    description: Integrated Circuits
 | 
				
			||||||
    parent: 1
 | 
					    parent: 1
 | 
				
			||||||
    default_location: null
 | 
					    default_location: null
 | 
				
			||||||
 | 
					    level: 1
 | 
				
			||||||
 | 
					    tree_id: 1
 | 
				
			||||||
 | 
					    lft: 6
 | 
				
			||||||
 | 
					    rght: 11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: part.partcategory
 | 
					- model: part.partcategory
 | 
				
			||||||
  pk: 5
 | 
					  pk: 5
 | 
				
			||||||
@@ -39,6 +55,10 @@
 | 
				
			|||||||
    description: Microcontrollers
 | 
					    description: Microcontrollers
 | 
				
			||||||
    parent: 4
 | 
					    parent: 4
 | 
				
			||||||
    default_location: null
 | 
					    default_location: null
 | 
				
			||||||
 | 
					    level: 2
 | 
				
			||||||
 | 
					    tree_id: 1
 | 
				
			||||||
 | 
					    lft: 7
 | 
				
			||||||
 | 
					    rght: 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: part.partcategory
 | 
					- model: part.partcategory
 | 
				
			||||||
  pk: 6
 | 
					  pk: 6
 | 
				
			||||||
@@ -47,6 +67,10 @@
 | 
				
			|||||||
    description: Communication interfaces
 | 
					    description: Communication interfaces
 | 
				
			||||||
    parent: 4
 | 
					    parent: 4
 | 
				
			||||||
    default_location: null
 | 
					    default_location: null
 | 
				
			||||||
 | 
					    level: 2
 | 
				
			||||||
 | 
					    tree_id: 1
 | 
				
			||||||
 | 
					    lft: 9
 | 
				
			||||||
 | 
					    rght: 10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: part.partcategory
 | 
					- model: part.partcategory
 | 
				
			||||||
  pk: 7
 | 
					  pk: 7
 | 
				
			||||||
@@ -54,6 +78,10 @@
 | 
				
			|||||||
    name: Mechanical
 | 
					    name: Mechanical
 | 
				
			||||||
    description: Mechanical componenets
 | 
					    description: Mechanical componenets
 | 
				
			||||||
    default_location: null
 | 
					    default_location: null
 | 
				
			||||||
 | 
					    level: 0
 | 
				
			||||||
 | 
					    tree_id: 2
 | 
				
			||||||
 | 
					    lft: 1
 | 
				
			||||||
 | 
					    rght: 4
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
- model: part.partcategory
 | 
					- model: part.partcategory
 | 
				
			||||||
  pk: 8
 | 
					  pk: 8
 | 
				
			||||||
@@ -62,3 +90,7 @@
 | 
				
			|||||||
    description: Screws, bolts, etc
 | 
					    description: Screws, bolts, etc
 | 
				
			||||||
    parent: 7
 | 
					    parent: 7
 | 
				
			||||||
    default_location: 5
 | 
					    default_location: 5
 | 
				
			||||||
 | 
					    level: 1
 | 
				
			||||||
 | 
					    tree_id: 2
 | 
				
			||||||
 | 
					    lft: 2
 | 
				
			||||||
 | 
					    rght: 3
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -385,7 +385,7 @@ class Part(models.Model):
 | 
				
			|||||||
            cats = self.category.get_ancestors(ascending=True, include_self=True)
 | 
					            cats = self.category.get_ancestors(ascending=True, include_self=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for cat in cats:
 | 
					            for cat in cats:
 | 
				
			||||||
                if cat.defaul_location:
 | 
					                if cat.default_location:
 | 
				
			||||||
                    return cat.default_location
 | 
					                    return cat.default_location
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Default case - no default category found
 | 
					        # Default case - no default category found
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,7 +48,7 @@ class CategoryTest(TestCase):
 | 
				
			|||||||
    def test_unique_childs(self):
 | 
					    def test_unique_childs(self):
 | 
				
			||||||
        """ Test the 'unique_children' functionality """
 | 
					        """ Test the 'unique_children' functionality """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        childs = self.electronics.getUniqueChildren()
 | 
					        childs = [item.pk for item in self.electronics.getUniqueChildren()]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.assertIn(self.transceivers.id, childs)
 | 
					        self.assertIn(self.transceivers.id, childs)
 | 
				
			||||||
        self.assertIn(self.ic.id, childs)
 | 
					        self.assertIn(self.ic.id, childs)
 | 
				
			||||||
@@ -58,7 +58,7 @@ class CategoryTest(TestCase):
 | 
				
			|||||||
    def test_unique_parents(self):
 | 
					    def test_unique_parents(self):
 | 
				
			||||||
        """ Test the 'unique_parents' functionality """
 | 
					        """ Test the 'unique_parents' functionality """
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        parents = self.transceivers.getUniqueParents()
 | 
					        parents = [item.pk for item in self.transceivers.getUniqueParents()]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.assertIn(self.electronics.id, parents)
 | 
					        self.assertIn(self.electronics.id, parents)
 | 
				
			||||||
        self.assertIn(self.ic.id, parents)
 | 
					        self.assertIn(self.ic.id, parents)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,10 @@
 | 
				
			|||||||
  fields:
 | 
					  fields:
 | 
				
			||||||
    name: 'Home'
 | 
					    name: 'Home'
 | 
				
			||||||
    description: 'My house'
 | 
					    description: 'My house'
 | 
				
			||||||
 | 
					    level: 0
 | 
				
			||||||
 | 
					    tree_id: 1
 | 
				
			||||||
 | 
					    lft: 1
 | 
				
			||||||
 | 
					    rght: 6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: stock.stocklocation
 | 
					- model: stock.stocklocation
 | 
				
			||||||
  pk: 2
 | 
					  pk: 2
 | 
				
			||||||
@@ -12,6 +16,10 @@
 | 
				
			|||||||
    name: 'Bathroom'
 | 
					    name: 'Bathroom'
 | 
				
			||||||
    description: 'Where I keep my bath'
 | 
					    description: 'Where I keep my bath'
 | 
				
			||||||
    parent: 1
 | 
					    parent: 1
 | 
				
			||||||
 | 
					    level: 1
 | 
				
			||||||
 | 
					    tree_id: 1
 | 
				
			||||||
 | 
					    lft: 2
 | 
				
			||||||
 | 
					    rght: 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: stock.stocklocation
 | 
					- model: stock.stocklocation
 | 
				
			||||||
  pk: 3
 | 
					  pk: 3
 | 
				
			||||||
@@ -19,12 +27,20 @@
 | 
				
			|||||||
    name: 'Dining Room'
 | 
					    name: 'Dining Room'
 | 
				
			||||||
    description: 'A table lives here'
 | 
					    description: 'A table lives here'
 | 
				
			||||||
    parent: 1
 | 
					    parent: 1
 | 
				
			||||||
 | 
					    level: 0
 | 
				
			||||||
 | 
					    tree_id: 1
 | 
				
			||||||
 | 
					    lft: 4
 | 
				
			||||||
 | 
					    rght: 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: stock.stocklocation
 | 
					- model: stock.stocklocation
 | 
				
			||||||
  pk: 4
 | 
					  pk: 4
 | 
				
			||||||
  fields:
 | 
					  fields:
 | 
				
			||||||
    name: 'Office'
 | 
					    name: 'Office'
 | 
				
			||||||
    description: 'Place of work'
 | 
					    description: 'Place of work'
 | 
				
			||||||
 | 
					    level: 0
 | 
				
			||||||
 | 
					    tree_id: 2
 | 
				
			||||||
 | 
					    lft: 1
 | 
				
			||||||
 | 
					    rght: 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: stock.stocklocation
 | 
					- model: stock.stocklocation
 | 
				
			||||||
  pk: 5
 | 
					  pk: 5
 | 
				
			||||||
@@ -32,6 +48,10 @@
 | 
				
			|||||||
    name: 'Drawer_1'
 | 
					    name: 'Drawer_1'
 | 
				
			||||||
    description: 'In my desk'
 | 
					    description: 'In my desk'
 | 
				
			||||||
    parent: 4
 | 
					    parent: 4
 | 
				
			||||||
 | 
					    level: 0
 | 
				
			||||||
 | 
					    tree_id: 2
 | 
				
			||||||
 | 
					    lft: 2
 | 
				
			||||||
 | 
					    rght: 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- model: stock.stocklocation
 | 
					- model: stock.stocklocation
 | 
				
			||||||
  pk: 6
 | 
					  pk: 6
 | 
				
			||||||
@@ -39,6 +59,10 @@
 | 
				
			|||||||
    name: 'Drawer_2'
 | 
					    name: 'Drawer_2'
 | 
				
			||||||
    description: 'Also in my desk'
 | 
					    description: 'Also in my desk'
 | 
				
			||||||
    parent: 4
 | 
					    parent: 4
 | 
				
			||||||
 | 
					    level: 0
 | 
				
			||||||
 | 
					    tree_id: 2
 | 
				
			||||||
 | 
					    lft: 4
 | 
				
			||||||
 | 
					    rght: 5
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
- model: stock.stocklocation
 | 
					- model: stock.stocklocation
 | 
				
			||||||
  pk: 7
 | 
					  pk: 7
 | 
				
			||||||
@@ -46,3 +70,7 @@
 | 
				
			|||||||
    name: 'Drawer_3'
 | 
					    name: 'Drawer_3'
 | 
				
			||||||
    description: 'Again, in my desk'
 | 
					    description: 'Again, in my desk'
 | 
				
			||||||
    parent: 4
 | 
					    parent: 4
 | 
				
			||||||
 | 
					    level: 0
 | 
				
			||||||
 | 
					    tree_id: 2
 | 
				
			||||||
 | 
					    lft: 6
 | 
				
			||||||
 | 
					    rght: 7
 | 
				
			||||||
@@ -67,15 +67,18 @@ class StockTest(TestCase):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        # Move one of the drawers
 | 
					        # Move one of the drawers
 | 
				
			||||||
        self.drawer3.parent = self.home
 | 
					        self.drawer3.parent = self.home
 | 
				
			||||||
 | 
					        self.drawer3.save()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.assertNotEqual(self.drawer3.parent, self.office)
 | 
					        self.assertNotEqual(self.drawer3.parent, self.office)
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        self.assertEqual(self.drawer3.pathstring, 'Home/Drawer_3')
 | 
					        self.assertEqual(self.drawer3.pathstring, 'Home/Drawer_3')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_children(self):
 | 
					    def test_children(self):
 | 
				
			||||||
        self.assertTrue(self.office.has_children)
 | 
					        self.assertTrue(self.office.has_children)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.assertFalse(self.drawer2.has_children)
 | 
					        self.assertFalse(self.drawer2.has_children)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        childs = self.office.getUniqueChildren()
 | 
					        childs = [item.pk for item in self.office.getUniqueChildren()]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.assertIn(self.drawer1.id, childs)
 | 
					        self.assertIn(self.drawer1.id, childs)
 | 
				
			||||||
        self.assertIn(self.drawer2.id, childs)
 | 
					        self.assertIn(self.drawer2.id, childs)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user