import pytest
from werkzeug.datastructures import MultiDict

from app.main.forms import CreateKeyForm


@pytest.mark.parametrize('expiry_date, expected_errors', (
    (None, ['A key with this name already exists']),
    ('2001-01-01 01:01:01', None),
))
def test_return_validation_error_when_key_name_exists(
    client,
    expiry_date,
    expected_errors,
):
    _existing_keys = [
        {
            'name': 'some key',
            'expiry_date': expiry_date,
        },
        {
            'name': 'another key',
            'expiry_date': None,
        },
    ]

    form = CreateKeyForm(
        _existing_keys,
        formdata=MultiDict([('key_name', 'Some key')])
    )

    form.key_type.choices = [('a', 'a'), ('b', 'b')]
    form.validate()
    assert form.errors.get('key_name') == expected_errors


@pytest.mark.parametrize(
    'key_type, expected_error', [
        ('', 'This field is required.'),
        ('invalid', 'Not a valid choice')
    ]
)
def test_return_validation_error_when_key_type_not_chosen(client, key_type, expected_error):

    form = CreateKeyForm(
        [],
        formdata=MultiDict([('key_name', 'Some key'), ('key_type', key_type)]))
    form.key_type.choices = [('a', 'a'), ('b', 'b')]
    form.validate()
    assert form.errors['key_type'] == [expected_error]
