From 0a81e3bb13b1daa343e5c444728941d39ade4df9 Mon Sep 17 00:00:00 2001 From: LePetitTim Date: Tue, 2 Aug 2022 14:23:24 +0200 Subject: [PATCH] Add tests mapping --- geotrek/common/parsers.py | 2 +- geotrek/common/tests/test_parsers.py | 49 ++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/geotrek/common/parsers.py b/geotrek/common/parsers.py index 720f7c90ab..bdd502c7f8 100644 --- a/geotrek/common/parsers.py +++ b/geotrek/common/parsers.py @@ -363,7 +363,7 @@ def get_mapping(self, src, val, mapping, partial): if mapping is not None: if val and val not in mapping.keys(): values = [str(key) for key in mapping.keys()] - self.add_warning(_("Bad value '{val}' for field {src}. Should be {values}").format(val=str(val), src=src, separator=self.separator, values=values)) + self.add_warning(_("Bad value '{val}' for field {src}. Should be in {values}").format(val=str(val), src=src, separator=self.separator, values=values)) return None if not val: return None diff --git a/geotrek/common/tests/test_parsers.py b/geotrek/common/tests/test_parsers.py index 924ee67e72..e88866de20 100644 --- a/geotrek/common/tests/test_parsers.py +++ b/geotrek/common/tests/test_parsers.py @@ -36,6 +36,37 @@ class OrganismEidParser(ExcelParser): eid = 'organism' +class StructureExcelParser(ExcelParser): + model = Organism + fields = { + 'organism': 'nOm', + 'structure': 'structure' + } + eid = 'organism' + + +class OrganismNoMappingNoPartialParser(StructureExcelParser): + field_options = { + "structure": {"mapping": {"foo": "bar", "": "boo"}} + } + natural_keys = { + "structure": "name" + } + + +class OrganismNoMappingPartialParser(StructureExcelParser): + field_options = { + "structure": {"mapping": {"foo": "bar"}, "partial": True} + } + natural_keys = { + "structure": "name" + } + + +class OrganismNoNaturalKeysParser(StructureExcelParser): + warn_on_missing_fields = True + + class AttachmentParser(AttachmentParserMixin, OrganismEidParser): non_fields = {'attachments': 'photo'} @@ -127,6 +158,24 @@ def test_databaseerror_except(self, mock_parse_row): call_command('import', 'geotrek.common.tests.test_parsers.OrganismEidParser', filename, verbosity=2, stdout=output) self.assertIn('foo bar', output.getvalue()) + def test_fk_not_in_natural_keys(self): + output = StringIO() + filename = os.path.join(os.path.dirname(__file__), 'data', 'organism5.xls') + call_command('import', 'geotrek.common.tests.test_parsers.OrganismNoNaturalKeysParser', filename, verbosity=2, stdout=output) + self.assertIn("Destination field 'structure' not in natural keys configuration", output.getvalue()) + + def test_no_mapping_not_partial(self): + output = StringIO() + filename = os.path.join(os.path.dirname(__file__), 'data', 'organism5.xls') + call_command('import', 'geotrek.common.tests.test_parsers.OrganismNoMappingNoPartialParser', filename, verbosity=2, stdout=output) + self.assertIn("Bad value 'Structure' for field STRUCTURE. Should be in ['foo', '']", output.getvalue()) + + def test_no_mapping_partial(self): + output = StringIO() + filename = os.path.join(os.path.dirname(__file__), 'data', 'organism5.xls') + call_command('import', 'geotrek.common.tests.test_parsers.OrganismNoMappingPartialParser', filename, verbosity=2, stdout=output) + self.assertIn("Bad value 'Structure' for field STRUCTURE. Should contain ['foo']", output.getvalue()) + @override_settings(MEDIA_ROOT=mkdtemp('geotrek_test')) class AttachmentParserTests(TestCase):