diff --git a/core/concepts/serializers.py b/core/concepts/serializers.py index dbec928f..77774717 100644 --- a/core/concepts/serializers.py +++ b/core/concepts/serializers.py @@ -297,7 +297,7 @@ def get_mappings(self, obj): # pylint: disable=too-many-locals ) if is_collection else obj.get_bidirectional_mappings() if not include_retired: mappings = mappings.filter(retired=False) - return serializer_class(mappings, many=True).data + return serializer_class(mappings.order_by('id'), many=True).data if self.include_direct_mappings: mappings = obj.get_unidirectional_mappings_for_collection( parent_uri, collection_version) if is_collection else obj.get_unidirectional_mappings() @@ -307,7 +307,7 @@ def get_mappings(self, obj): # pylint: disable=too-many-locals mappings = mappings.filter(to_source_url__in=target_repo_urls) if not include_retired: mappings = mappings.filter(retired=False) - return serializer_class(mappings, many=True).data + return serializer_class(mappings.order_by('id'), many=True).data return [] @@ -726,11 +726,11 @@ def get_mappings(self, obj): mappings = obj.get_bidirectional_mappings_for_collection( parent_uri, collection_version ) if is_collection else obj.get_bidirectional_mappings() - return MappingDetailSerializer(mappings, many=True, context=context).data + return MappingDetailSerializer(mappings.order_by('id'), many=True, context=context).data if self.include_direct_mappings: mappings = obj.get_unidirectional_mappings_for_collection( parent_uri, collection_version) if is_collection else obj.get_unidirectional_mappings() - return MappingDetailSerializer(mappings, many=True, context=context).data + return MappingDetailSerializer(mappings.order_by('id'), many=True, context=context).data return [] diff --git a/core/integration_tests/tests_concepts.py b/core/integration_tests/tests_concepts.py index 87215f9c..0c943f14 100644 --- a/core/integration_tests/tests_concepts.py +++ b/core/integration_tests/tests_concepts.py @@ -4702,4 +4702,8 @@ def test_inverse_mappings_are_unchanged(self): batched = self.client.get(url).data with patch.object(ConceptAbstractSerializer, 'preload_page', lambda *args: None): per_concept = self.client.get(url).data - self.assertEqual(batched, per_concept) + # plain lists, so a failure shows the differing element + self.assertEqual(list(batched), list(per_concept)) + for row in batched: + mapping_ids = [int(mapping['uuid']) for mapping in row['mappings']] + self.assertEqual(mapping_ids, sorted(mapping_ids))