Unit test speed improvements (#4463)

* Unit test speed improvements

- Move from insantiating data in setUp to setUpTestData

* Update UserMixin class for API testing

* Bunch of test updates

* Further test updates

* Test fixes

* Add allowances for exchange rate server not responding

* Fixes for group role test
This commit is contained in:
Oliver
2023-03-08 15:22:08 +11:00
committed by GitHub
parent 9c594ed52b
commit 2dfea9b825
20 changed files with 258 additions and 180 deletions

View File

@ -731,38 +731,42 @@ class BuildOverallocationTest(BuildAPITest):
Using same Build ID=1 as allocation test above.
"""
def setUp(self):
@classmethod
def setUpTestData(cls):
"""Basic operation as part of test suite setup"""
super().setUp()
super().setUpTestData()
self.assignRole('build.add')
self.assignRole('build.change')
cls.assignRole('build.add')
cls.assignRole('build.change')
self.build = Build.objects.get(pk=1)
self.url = reverse('api-build-finish', kwargs={'pk': self.build.pk})
cls.build = Build.objects.get(pk=1)
cls.url = reverse('api-build-finish', kwargs={'pk': cls.build.pk})
StockItem.objects.create(part=Part.objects.get(pk=50), quantity=30)
# Keep some state for use in later assertions, and then overallocate
self.state = {}
self.allocation = {}
for i, bi in enumerate(self.build.part.bom_items.all()):
rq = self.build.required_quantity(bi, None) + i + 1
cls.state = {}
cls.allocation = {}
for i, bi in enumerate(cls.build.part.bom_items.all()):
rq = cls.build.required_quantity(bi, None) + i + 1
si = StockItem.objects.filter(part=bi.sub_part, quantity__gte=rq).first()
self.state[bi.sub_part] = (si, si.quantity, rq)
cls.state[bi.sub_part] = (si, si.quantity, rq)
BuildItem.objects.create(
build=self.build,
build=cls.build,
stock_item=si,
quantity=rq,
)
# create and complete outputs
self.build.create_build_output(self.build.quantity)
outputs = self.build.build_outputs.all()
self.build.complete_build_output(outputs[0], self.user)
cls.build.create_build_output(cls.build.quantity)
outputs = cls.build.build_outputs.all()
cls.build.complete_build_output(outputs[0], cls.user)
def test_setup(self):
"""Validate expected state after set-up."""
# Validate expected state after set-up.
self.assertEqual(self.build.incomplete_outputs.count(), 0)
self.assertEqual(self.build.complete_outputs.count(), 1)
self.assertEqual(self.build.completed, self.build.quantity)