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 return s
def getTestResults(self, test=None, result=None, user=None): 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 results = self.test_results
@ -939,6 +947,25 @@ class StockItem(MPTTModel):
return results 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') @receiver(pre_delete, sender=StockItem, dispatch_uid='stock_item_pre_delete_log')
def before_delete_stock_item(sender, instance, using, **kwargs): 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 StockItem, StockLocation
from .models import StockItemTracking from .models import StockItemTracking
from .models import StockItemAttachment from .models import StockItemAttachment
from .models import StockItemTestResult
from django.db.models import Sum, Count from django.db.models import Sum, Count
from django.db.models.functions import Coalesce 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): class StockTrackingSerializer(InvenTreeModelSerializer):
""" Serializer for StockItemTracking model """ """ Serializer for StockItemTracking model """

View File

@ -423,3 +423,11 @@ class TestResultTest(StockTest):
# Passing tests # Passing tests
self.assertEqual(item.getTestResults(result=True).count(), 3) self.assertEqual(item.getTestResults(result=True).count(), 3)
self.assertEqual(item.getTestResults(result=False).count(), 1) 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())