# -*- coding: utf-8 -*- # type: ignore from __future__ import annotations import pytest from pytest_mock import MockerFixture from keep_it_secret import fields from keep_it_secret.secrets import Secrets class TestingField(fields.Field): def get_value(self, secrets): return 'test' def test_init(): # When result = TestingField() # Then assert result.as_type == str assert result.required is True assert result.description is None assert isinstance(result.name, str) is True assert len(result.name) > 0 def test_new(mocker: MockerFixture): # Given mock_init = mocker.patch.object( TestingField, '__init__', return_value=None, ) # When _ = TestingField.new( as_type=int, required=False, description='spameggs', ) # Then mock_init.assert_called_once_with( as_type=int, required=False, description='spameggs', ) @pytest.mark.parametrize( 'argument,value', [ ('as_type', int), ('required', False), ('description', 'spam'), ], ) def test_init_with_kwargs(argument, value): # When result = TestingField(**{argument: value}) # Then assert getattr(result, argument) == value def test_call(mocker: MockerFixture, testing_secrets: Secrets): # Given field = TestingField() # When result = field(testing_secrets) # Then assert result == 'test' def test_call_get_value_call(mocker: MockerFixture, testing_secrets: Secrets): # Given field = TestingField() mock_get_value = mocker.patch.object( field, 'get_value', return_value='spam', ) # When result = field(testing_secrets) # Then assert result == 'spam' mock_get_value.assert_called_once_with(testing_secrets) def test_call_get_value_None(mocker: MockerFixture, testing_secrets: Secrets): # Given field = TestingField(as_type=int) _ = mocker.patch.object(field, 'get_value', return_value=None) # When result = field(testing_secrets) # Then assert result is None def test_call_with_as_type(mocker: MockerFixture, testing_secrets: Secrets): # Given field = TestingField(as_type=int) _ = mocker.patch.object(field, 'get_value', return_value='5') # When result = field(testing_secrets) # Then assert result == 5