"""Test TextField Class.""" import pytest from payee.connectors.secure_data.exceptions import ( SecureDocumentFieldValidationException, ) from payee.connectors.secure_data.fields.text_field import TextField def test_text_field_create_and_set(): """Test creating and setting values.""" test_field = TextField('id', value=2) assert test_field.value == '2' test_field.value = 1 assert test_field.value == '1' test_field.value = '1' assert test_field.value == '1' assert test_field.encrypt is True def test_text_field_required(): """Test required fields.""" test_field = TextField('id', required=True) with pytest.raises(SecureDocumentFieldValidationException): test_field.value = None test_field.value = '1' assert test_field.value == '1' @pytest.mark.parametrize( 'original_left,original_right,asterisk_count,expected_value', ( (None, None, None, '***************'), (2, None, None, '12*****'), (None, 3, None, '****567'), (2, None, 1, '12*'), (None, 3, 2, '**567'), (1, 2, 1, '1*67'), ), ) def test_text_field_obscured( original_left, original_right, asterisk_count, expected_value ): """Test obscured fields.""" test_field = TextField( 'id', obscure_in_response=True, original_symbols_count_left=original_left, original_symbols_count_right=original_right, asterisk_count=asterisk_count, ) assert test_field.value is None test_field.value = '1234567' assert test_field.value == expected_value assert test_field.original_value == '1234567' def test_text_field_allowed_values(): """Test allowed values.""" test_field = TextField('id', allowed_values=['foo', 'bar']) test_field.value = 'foo' assert test_field.value == 'foo' with pytest.raises(SecureDocumentFieldValidationException): test_field.value = 'baz' def test_text_field_params(): """Test getting params.""" params = dict( value='2', encrypt=False, obscure_in_response=True, original_symbols_count_left=4, original_symbols_count_right=5, asterisk_count=8, required=True, allowed_values=['2', '5', 'no'], ) test_field = TextField('id', **params) assert test_field._params == params def test_clone(): """Test clone.""" params = dict( value='2', encrypt=False, obscure_in_response=True, original_symbols_count_left=4, original_symbols_count_right=5, asterisk_count=8, required=True, allowed_values=['2', '5', 'no'], ) test_field = TextField('id', **params) cloned_field = test_field.clone() assert type(cloned_field) is TextField assert test_field._params == cloned_field._params @pytest.mark.parametrize( 'original_left,original_right,asterisk_count,value,has_obscured', ( (None, None, None, '***************', True), (None, None, None, '1234', False), (2, None, None, '12*****', True), (None, 3, None, '****567', True), (2, None, 1, '12*', True), (None, 3, 2, '**567', True), (1, 2, 1, '1*67', True), (1, 2, 1, '1**67', False), ), ) def test_text_field_has_obscured_value( original_left, original_right, asterisk_count, value, has_obscured ): """Test has_obscured_value.""" test_field = TextField( 'id', obscure_in_response=True, original_symbols_count_left=original_left, original_symbols_count_right=original_right, asterisk_count=asterisk_count, ) test_field.value = value assert test_field.has_obscured_value is has_obscured