118 lines
2.3 KiB
Python
118 lines
2.3 KiB
Python
|
# -*- 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
|