mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
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:
parent
2bb9fd9955
commit
df91b8cf4d
@ -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):
|
||||||
|
@ -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 """
|
||||||
|
|
||||||
|
@ -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())
|
Loading…
Reference in New Issue
Block a user