1+ from unittest .mock import Mock
2+
13import pytest
2- from pytest_mock import MockFixture
4+ from django .core .files .uploadedfile import SimpleUploadedFile
5+ from pytest_mock import MockerFixture
36
7+ from country_workspace .contrib .kobo .api .data .helpers import VALUE_FORMAT
48from country_workspace .utils .fields import (
59 clean_field_name ,
610 TO_REMOVE_VALUES ,
711 clean_field_names ,
812 map_fields ,
913)
14+ from country_workspace .utils .flex_fields import Base64ImageInput , Base64ImageField
1015
1116
1217@pytest .mark .parametrize (
@@ -21,7 +26,7 @@ def test_clean_field_name(input_value, expected_output):
2126 assert clean_field_name (input_value ) == expected_output
2227
2328
24- def test_clean_field_names (mocker : MockFixture ) -> None :
29+ def test_clean_field_names (mocker : MockerFixture ) -> None :
2530 clean_field_name_mock = mocker .patch ("country_workspace.utils.fields.clean_field_name" )
2631
2732 cleaned = clean_field_names ({(key := "foo" ): "bar" })
@@ -42,3 +47,28 @@ def test_clean_field_names(mocker: MockFixture) -> None:
4247def test_map_fields (input_fields , expected_output ):
4348 result = map_fields (input_fields )
4449 assert result == expected_output
50+
51+
52+ @pytest .mark .parametrize ("value" , [None , "" , "test" ])
53+ def test_base64_image_input (value : str | None ) -> None :
54+ input_ = Base64ImageInput ()
55+ assert input_ .is_initial (value ) == bool (value )
56+
57+
58+ def test_base64_image_field_file_was_cleared (mocker : MockerFixture ) -> None :
59+ super_clean_mock = mocker .patch ("country_workspace.utils.flex_fields.forms.ImageField.clean" )
60+ super_clean_mock .return_value = False
61+ instance = Mock (spec = Base64ImageField )
62+
63+ assert Base64ImageField .clean (instance , False ) is None
64+
65+
66+ def test_base64_image_field_content_is_encoded (mocker : MockerFixture ) -> None :
67+ super_clean_mock = mocker .patch ("country_workspace.utils.flex_fields.forms.ImageField.clean" )
68+ b64encode_mock = mocker .patch ("country_workspace.utils.flex_fields.b64encode" )
69+ b64encode_mock .return_value .decode .return_value = (data := "decoded" )
70+ file = SimpleUploadedFile ("test.txt" , b"test" , content_type = (content_type := "text/plain" ))
71+ super_clean_mock .return_value = file
72+ instance = Mock (spec = Base64ImageField )
73+
74+ assert Base64ImageField .clean (instance , file ) == VALUE_FORMAT .format (mimetype = content_type , content = data )
0 commit comments