From d3521d7374d92b804fbdc06bd495e259412738eb Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 24 May 2023 14:57:32 +0200 Subject: [PATCH] metadata: case-insensitive sort for AntiFeatures Categories --- fdroidserver/metadata.py | 4 +++- tests/metadata.TestCase | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index a4203b08..484b9b51 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -1127,7 +1127,7 @@ def _format_stringmap(appid, field, stringmap, versionCode=None): make_list = False break if make_list: - return outlist + return sorted(outlist, key=str.lower) return stringmap @@ -1208,6 +1208,8 @@ def _app_to_yaml(app): if field == 'Builds': if app.get('Builds'): cm.update({field: _builds_to_yaml(app)}) + elif field == 'Categories': + cm[field] = sorted(value, key=str.lower) elif field == 'CurrentVersionCode': cm[field] = _field_to_yaml(TYPE_INT, value) elif field == 'AntiFeatures': diff --git a/tests/metadata.TestCase b/tests/metadata.TestCase index 777002bc..631f0d9f 100755 --- a/tests/metadata.TestCase +++ b/tests/metadata.TestCase @@ -2019,6 +2019,20 @@ class MetadataTest(unittest.TestCase): appid, field, {afname: {'uz': 'a', locale: 'b', 'zh': 'c'}}, versionCode ) + def test_app_to_yaml_one_category(self): + """Categories does not get simplified to string when outputting YAML.""" + self.assertEqual( + metadata._app_to_yaml({'Categories': ['one']}), + {'Categories': ['one']}, + ) + + def test_app_to_yaml_categories(self): + """Sort case-insensitive before outputting YAML.""" + self.assertEqual( + metadata._app_to_yaml({'Categories': ['c', 'a', 'B']}), + {'Categories': ['a', 'B', 'c']}, + ) + class PostMetadataParseTest(unittest.TestCase): """Test the functions that post process the YAML input.