Skip to content

Commit

Permalink
Add civ list serializer ordering test
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisvanrun committed Jan 10, 2025
1 parent 4c14d3a commit de92546
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 2 deletions.
7 changes: 6 additions & 1 deletion app/grandchallenge/components/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,12 @@ def validate(self, attrs):

class SortedCIVSerializer(serializers.ListSerializer):
def to_representation(self, data):
sorted_data = sort_civs(data.all())
iterable = (
data.all()
if isinstance(data, serializers.models.manager.BaseManager)
else data
)
sorted_data = sort_civs(iterable)
return super().to_representation(sorted_data)


Expand Down
58 changes: 57 additions & 1 deletion app/tests/components_tests/test_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,12 @@
from grandchallenge.components.models import InterfaceKind
from grandchallenge.components.serializers import (
ComponentInterfaceValuePostSerializer,
ComponentInterfaceValueSerializer,
)
from tests.components_tests.factories import (
ComponentInterfaceFactory,
ComponentInterfaceValueFactory,
)
from tests.components_tests.factories import ComponentInterfaceFactory
from tests.factories import ImageFactory, UploadSessionFactory, UserFactory

TEST_DATA = {
Expand Down Expand Up @@ -468,3 +472,55 @@ def test_civ_post_image_valid(kind, rf):

# verify
assert serializer.is_valid()


@pytest.mark.django_db
def test_civ_serializer_list_ordering():

civs = [
ComponentInterfaceValueFactory(
interface=ComponentInterfaceFactory(
kind=InterfaceKind.InterfaceKindChoices.IMAGE,
store_in_database=False,
)
),
ComponentInterfaceValueFactory(
interface=ComponentInterfaceFactory(
kind=InterfaceKind.InterfaceKindChoices.THUMBNAIL_PNG,
store_in_database=False,
)
),
ComponentInterfaceValueFactory(
interface=ComponentInterfaceFactory(
kind=InterfaceKind.InterfaceKindChoices.ZIP,
store_in_database=False,
)
),
ComponentInterfaceValueFactory(
interface=ComponentInterfaceFactory(
kind=InterfaceKind.InterfaceKindChoices.STRING
),
value="bar",
),
ComponentInterfaceValueFactory(
interface=ComponentInterfaceFactory(
kind=InterfaceKind.InterfaceKindChoices.CHART
),
value="foo",
),
]

serializer = ComponentInterfaceValueSerializer(many=True)

produced_order = [
civ["interface"]["kind"]
for civ in serializer.to_representation(data=civs)
]

assert produced_order == [
InterfaceKind.InterfaceKindChoices.STRING.label,
InterfaceKind.InterfaceKindChoices.THUMBNAIL_PNG.label,
InterfaceKind.InterfaceKindChoices.CHART.label,
InterfaceKind.InterfaceKindChoices.ZIP.label,
InterfaceKind.InterfaceKindChoices.IMAGE.label,
]

0 comments on commit de92546

Please sign in to comment.