from django.test import TestCase import django.core.exceptions as django_exceptions from .models import Part, BomItem class BomItemTest(TestCase): fixtures = [ 'category', 'part', 'location', 'bom', ] def setUp(self): self.bob = Part.objects.get(id=100) self.orphan = Part.objects.get(name='Orphan') def test_str(self): b = BomItem.objects.get(id=1) self.assertEqual(str(b), '10 x M2x4 LPHS to make Bob') def test_has_bom(self): self.assertFalse(self.orphan.has_bom) self.assertTrue(self.bob.has_bom) self.assertEqual(self.bob.bom_count, 4) def test_in_bom(self): parts = self.bob.required_parts() self.assertIn(self.orphan, parts) def test_bom_export(self): parts = self.bob.required_parts() data = self.bob.export_bom(format='csv') for p in parts: self.assertIn(p.name, data) self.assertIn(p.description, data) def test_used_in(self): self.assertEqual(self.bob.used_in_count, 0) self.assertEqual(self.orphan.used_in_count, 1) def test_self_reference(self): """ Test that we get an appropriate error when we create a BomItem which points to itself """ with self.assertRaises(django_exceptions.ValidationError): # A validation error should be raised here item = BomItem.objects.create(part=self.bob, sub_part=self.bob, quantity=7) item.clean()