From 3e270e97ffe8dcd172d6785dbdd43f37a358f75f Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Thu, 15 Feb 2024 12:58:41 +0100 Subject: [PATCH 1/2] Add country ordering --- .../api/tests/test_entities_api.py | 50 ++++++++++++++++++- server/vbv_lernwelt/core/admin.py | 1 + .../core/migrations/0007_country_order_id.py | 17 +++++++ server/vbv_lernwelt/core/models.py | 3 +- 4 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 server/vbv_lernwelt/core/migrations/0007_country_order_id.py diff --git a/server/vbv_lernwelt/api/tests/test_entities_api.py b/server/vbv_lernwelt/api/tests/test_entities_api.py index 3ca843fc..ba1d0f9f 100644 --- a/server/vbv_lernwelt/api/tests/test_entities_api.py +++ b/server/vbv_lernwelt/api/tests/test_entities_api.py @@ -3,7 +3,7 @@ from rest_framework import status from rest_framework.test import APITestCase from vbv_lernwelt.core.model_utils import add_countries, add_organisations -from vbv_lernwelt.core.models import Organisation, User +from vbv_lernwelt.core.models import Country, Organisation, User class EntitiesViewTest(APITestCase): @@ -15,7 +15,7 @@ class EntitiesViewTest(APITestCase): add_organisations() add_countries() - def test_list_entities(self) -> None: + def test_list_organisation_entities(self) -> None: # It seems that different locales handle ordering differently (especially with lower case letters) # As such we delete entries that start with lower case letters Organisation.objects.filter(organisation_id__in=[1, 2, 3]).delete() @@ -51,3 +51,49 @@ class EntitiesViewTest(APITestCase): "name": "Afghanistan", }, ) + + def test_list_country_entities_ordered_by_country_id(self) -> None: + # GIVEN + url = reverse("list_entities") + + first_country = Country.objects.get(country_id=1) + + # WHEN + response = self.client.get(url) + + # THEN + self.assertEqual(response.status_code, status.HTTP_200_OK) + + countries = response.data["countries"] + + self.assertEqual( + countries[0], + { + "id": first_country.country_id, + "name": first_country.name_de, + }, + ) + + def test_list_country_entities_ordered_by_order_id(self) -> None: + # GIVEN + url = reverse("list_entities") + + switzerland = Country.objects.get(name_de="Schweiz") + switzerland.order_id = 1 + switzerland.save() + + # WHEN + response = self.client.get(url) + + # THEN + self.assertEqual(response.status_code, status.HTTP_200_OK) + + countries = response.data["countries"] + + self.assertEqual( + countries[0], + { + "id": switzerland.country_id, + "name": switzerland.name_de, + }, + ) diff --git a/server/vbv_lernwelt/core/admin.py b/server/vbv_lernwelt/core/admin.py index d5a98ca1..bb09bea4 100644 --- a/server/vbv_lernwelt/core/admin.py +++ b/server/vbv_lernwelt/core/admin.py @@ -122,6 +122,7 @@ class OrganisationAdmin(admin.ModelAdmin): @admin.register(Country) class CountryAdmin(admin.ModelAdmin): list_display = ( + "order_id", "country_id", "name_de", "name_fr", diff --git a/server/vbv_lernwelt/core/migrations/0007_country_order_id.py b/server/vbv_lernwelt/core/migrations/0007_country_order_id.py new file mode 100644 index 00000000..a4f8be73 --- /dev/null +++ b/server/vbv_lernwelt/core/migrations/0007_country_order_id.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.20 on 2024-02-15 10:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0006_auto_20240125_0915"), + ] + + operations = [ + migrations.AddField( + model_name="country", + name="order_id", + field=models.PositiveIntegerField(default=20), + ), + ] diff --git a/server/vbv_lernwelt/core/models.py b/server/vbv_lernwelt/core/models.py index 1221dee3..dcfd5927 100644 --- a/server/vbv_lernwelt/core/models.py +++ b/server/vbv_lernwelt/core/models.py @@ -26,6 +26,7 @@ class Country(models.Model): name_de = models.CharField(max_length=255) name_fr = models.CharField(max_length=255) name_it = models.CharField(max_length=255) + order_id = models.PositiveIntegerField(default=10) def __str__(self): return f"{self.name_de} ({self.country_id})" @@ -33,7 +34,7 @@ class Country(models.Model): class Meta: verbose_name = "Country" verbose_name_plural = "Countries" - ordering = ["country_id"] + ordering = ["order_id", "country_id"] class User(AbstractUser): From f94ee0a26d8dfb954f3a9c76a5d5c59add59cb47 Mon Sep 17 00:00:00 2001 From: Christian Cueni Date: Tue, 20 Feb 2024 11:05:28 +0100 Subject: [PATCH 2/2] Use FloatField --- .../core/migrations/0007_country_order_id.py | 17 ----------------- server/vbv_lernwelt/core/models.py | 2 +- 2 files changed, 1 insertion(+), 18 deletions(-) delete mode 100644 server/vbv_lernwelt/core/migrations/0007_country_order_id.py diff --git a/server/vbv_lernwelt/core/migrations/0007_country_order_id.py b/server/vbv_lernwelt/core/migrations/0007_country_order_id.py deleted file mode 100644 index a4f8be73..00000000 --- a/server/vbv_lernwelt/core/migrations/0007_country_order_id.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.2.20 on 2024-02-15 10:38 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("core", "0006_auto_20240125_0915"), - ] - - operations = [ - migrations.AddField( - model_name="country", - name="order_id", - field=models.PositiveIntegerField(default=20), - ), - ] diff --git a/server/vbv_lernwelt/core/models.py b/server/vbv_lernwelt/core/models.py index dcfd5927..41b1a487 100644 --- a/server/vbv_lernwelt/core/models.py +++ b/server/vbv_lernwelt/core/models.py @@ -26,7 +26,7 @@ class Country(models.Model): name_de = models.CharField(max_length=255) name_fr = models.CharField(max_length=255) name_it = models.CharField(max_length=255) - order_id = models.PositiveIntegerField(default=10) + order_id = models.FloatField(default=20) def __str__(self): return f"{self.name_de} ({self.country_id})"