diff --git a/setup.py b/setup.py index 4516c831..d52a2e32 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ def parse_requirements(requirement_file): setup( - version="10.19.5", + version="10.19.6", name="swimlane", author="Swimlane", author_email="info@swimlane.com", diff --git a/swimlane/core/fields/reference.py b/swimlane/core/fields/reference.py index 3c841ef5..5cd65f34 100644 --- a/swimlane/core/fields/reference.py +++ b/swimlane/core/fields/reference.py @@ -98,14 +98,18 @@ def _set(self, value): def set_swimlane(self, value): """Store record ids in separate location for later use, but ignore initial value""" - # Values come in as a list of record ids or None + # Values come in as a list of record ids, record metadata tuples, or None value = value or [] if isinstance(value, dict): value = value["_v"] if "_v" in value else [] records = SortedDict() - for record_id in value: + for record in value: + if isinstance(record, (list, tuple)): + record_id = record[0] + else: + record_id = record records[record_id] = self._unset return super(ReferenceField, self).set_swimlane(records) diff --git a/tests/fields/test_reference.py b/tests/fields/test_reference.py index d5f052b2..5606f832 100644 --- a/tests/fields/test_reference.py +++ b/tests/fields/test_reference.py @@ -121,3 +121,16 @@ def test_orphaned_record_cleanup(self, mock_swimlane, mock_record, mock_app): def test_get_report(self, mock_record): """All for total coverage""" assert mock_record.get_field(self.single_field_name).get_report(mock_record) == mock_record.id + + def test_set_swimlane_with_record_metadata(self, mock_record): + """Test reference values returned as list of record metadata tuples (Turbine 26.2.3+)""" + field = mock_record.get_field(self.multi_field_name) + record_ids = ['aZ586fyJZcSkzyFyt', 'aRA4S8FNol6yI5EXO'] + value = [ + [record_ids[0], 'aU31z06zTqVz_dkb5', 'CIM-41919'], + [record_ids[1], 'aU31z06zTqVz_dkb5', 'CIM-41920'] + ] + + field.set_swimlane(value) + + assert set(field._value.keys()) == set(record_ids)