Add function to get all test results as a map

- This will be required for pushing out to a test report
This commit is contained in:
Oliver Walters 2020-05-16 20:45:10 +10:00
parent 2bb9fd9955
commit df91b8cf4d
3 changed files with 54 additions and 0 deletions

View File

@ -922,6 +922,14 @@ class StockItem(MPTTModel):
return s
def getTestResults(self, test=None, result=None, user=None):
"""
Return all test results associated with this StockItem.
Optionally can filter results by:
- Test name
- Test result
- User
"""
results = self.test_results
@ -939,6 +947,25 @@ class StockItem(MPTTModel):
return results
def testResultMap(self, **kwargs):
"""
Return a map of test-results using the test name as the key.
Where multiple test results exist for a given name,
the *most recent* test is used.
This map is useful for rendering to a template (e.g. a test report),
as all named tests are accessible.
"""
results = self.getTestResults(**kwargs).order_by('-date')
result_map = {}
for result in results:
result_map[result.test] = result
return result_map
@receiver(pre_delete, sender=StockItem, dispatch_uid='stock_item_pre_delete_log')
def before_delete_stock_item(sender, instance, using, **kwargs):

View File

@ -7,6 +7,7 @@ from rest_framework import serializers
from .models import StockItem, StockLocation
from .models import StockItemTracking
from .models import StockItemAttachment
from .models import StockItemTestResult
from django.db.models import Sum, Count
from django.db.models.functions import Coalesce
@ -216,6 +217,24 @@ class StockItemAttachmentSerializer(InvenTreeModelSerializer):
]
class StockItemTestResultSerializer(InvenTreeModelSerializer):
""" Serializer for the StockItemTestResult model """
class Meta:
model = StockItemTestResult
fields = [
'pk',
'test',
'result',
'value',
'attachment',
'notes',
'user',
'date'
]
class StockTrackingSerializer(InvenTreeModelSerializer):
""" Serializer for StockItemTracking model """

View File

@ -423,3 +423,11 @@ class TestResultTest(StockTest):
# Passing tests
self.assertEqual(item.getTestResults(result=True).count(), 3)
self.assertEqual(item.getTestResults(result=False).count(), 1)
# Result map
result_map = item.testResultMap()
self.assertEqual(len(result_map), 3)
for test in ['Firmware Version', 'Settings Checksum', 'Temperature Test']:
self.assertIn(test, result_map.keys())