From bcf2a461ef1738ba3b66142462ede29bc20fdfe9 Mon Sep 17 00:00:00 2001 From: Jochen Klar Date: Sat, 18 Nov 2023 12:55:57 +0100 Subject: [PATCH 1/3] Add option_text and option_additional_input to Value and update value_and_unit and as_dict --- rdmo/projects/models/value.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/rdmo/projects/models/value.py b/rdmo/projects/models/value.py index 39fec66834..2ab2a174da 100644 --- a/rdmo/projects/models/value.py +++ b/rdmo/projects/models/value.py @@ -117,6 +117,10 @@ def as_dict(self): 'collection_index': self.collection_index, 'value_type': self.value_type, 'unit': self.unit, + 'text': self.text, + 'option_uri': self.option_uri, + 'option_text': self.option_text, + 'option_additional_input': self.option_additional_input, 'external_id': self.external_id, 'value': self.value, 'value_and_unit': self.value_and_unit, @@ -161,18 +165,14 @@ def value(self): else: return self.text else: - return None + return '' @property def value_and_unit(self): - value = self.value - - if value is None: - return '' - elif self.unit: - return f'{value} {self.unit}' + if self.unit: + return f'{self.value} {self.unit}' else: - return value + return self.value @property def is_true(self): @@ -254,6 +254,16 @@ def option_uri(self): if self.option is not None: return self.option.uri + @property + def option_text(self): + if self.option is not None: + return self.option.text + + @property + def option_additional_input(self): + if self.option is not None: + return self.option.additional_input + def copy_file(self, file_name, file_content): # copies a file field from a different value over to this value # this is tricky, because we need to trick django_cleanup to not delete the original file From 5015f3b7724b9f723474b0052b5afe764a1dda7f Mon Sep 17 00:00:00 2001 From: Jochen Klar Date: Sat, 18 Nov 2023 12:56:21 +0100 Subject: [PATCH 2/3] Add tests for Value properties --- rdmo/projects/tests/test_value.py | 73 +++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 rdmo/projects/tests/test_value.py diff --git a/rdmo/projects/tests/test_value.py b/rdmo/projects/tests/test_value.py new file mode 100644 index 0000000000..406b9014e5 --- /dev/null +++ b/rdmo/projects/tests/test_value.py @@ -0,0 +1,73 @@ +import datetime + +from ..models import Value + + +def mocked_trans(self, field): + return self.text_lang1 + + +def test_value_text(db): + value = Value.objects.get(id=1) + assert value.value == value.text + assert value.value_and_unit == value.text + assert value.option_text is None + assert value.option_additional_input is None + + +def test_value_textarea(db): + value = Value.objects.get(id=2) + assert value.value == value.text + assert value.value_and_unit == value.text + assert value.option_text is None + assert value.option_additional_input is None + + +def test_value_bool(db): + value = Value.objects.get(id=3) + assert value.value == 'Yes' + assert value.value_and_unit == 'Yes' + assert value.option_text is None + assert value.option_additional_input is None + + +def test_value_radio(db, mocker): + mocker.patch('rdmo.options.models.Option.trans', mocked_trans) + + value = Value.objects.get(id=4) + assert value.value == 'Other: Lorem ipsum' + assert value.value_and_unit == 'Other: Lorem ipsum' + assert value.option_text == 'Other' + assert value.option_additional_input is True + + +def test_value_select(db): + value = Value.objects.get(id=5) + assert value.value == '' + assert value.value_and_unit == '' + assert value.option_text == '' + assert value.option_additional_input is False + + +def test_value_range(db): + value = Value.objects.get(id=6) + assert value.value == value.text + assert value.value_and_unit == value.text + assert value.option_text is None + assert value.option_additional_input is None + + +def test_value_datetime(db): + value = Value.objects.get(id=7) + assert value.value == datetime.date(2018, 1, 1) + assert value.value_and_unit == datetime.date(2018, 1, 1) + assert value.option_text is None + assert value.option_additional_input is None + + +def test_value_file(db): + value = Value.objects.get(id=238) + assert value.value == 'rdmo-logo.svg' + assert value.value_and_unit == 'rdmo-logo.svg' + assert value.option_text is None + assert value.option_additional_input is None From b2ee634309553ec30c9e56b38fc558ca59295027 Mon Sep 17 00:00:00 2001 From: David Wallace Date: Wed, 22 Nov 2023 15:10:04 +0100 Subject: [PATCH 3/3] tests: fix test_value_select --- rdmo/projects/tests/test_value.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/rdmo/projects/tests/test_value.py b/rdmo/projects/tests/test_value.py index 406b9014e5..0ebeb71393 100644 --- a/rdmo/projects/tests/test_value.py +++ b/rdmo/projects/tests/test_value.py @@ -41,11 +41,12 @@ def test_value_radio(db, mocker): assert value.option_additional_input is True -def test_value_select(db): +def test_value_select(db, mocker): value = Value.objects.get(id=5) - assert value.value == '' - assert value.value_and_unit == '' - assert value.option_text == '' + mocker.patch('rdmo.options.models.Option.trans', mocked_trans) + assert value.value == 'One' + assert value.value_and_unit == 'One' + assert value.option_text == 'One' assert value.option_additional_input is False