Files
notifications-admin/tests/app/main/test_two_factor_form.py
Ben Thorner 5bfce61bcf Rename "app_" fixture to "notify_admin"
This naming was introduced in 2016 without explanation [1]. I find it
confusing because:

- It's reminiscent of "_app", which is a Python convention indicating
the variable is internal, so maybe avoid using it.

- It suggests there's some other "app" fixture I should be using (there
isn't, though).

The Python style guide describes using an underscore suffix to avoid
clashes with inbuilt names [1], which is sort of applicable if we need
to import the "app" module [2]. However, we can also avoid clashes by
choosing a different name, without the strange underscore.

[1]: 3b1d521c10
[2]: 78824f54fd/tests/app/main/views/test_forgot_password.py (L5)
2021-05-19 11:44:20 +01:00

81 lines
2.1 KiB
Python

import pytest
from app import user_api_client
from app.main.forms import TwoFactorForm
def _check_code(code):
return user_api_client.check_verify_code('1', code, "sms")
@pytest.mark.parametrize('post_data', [
{'sms_code': '12345'},
{'sms_code': ' 12345 '},
{'sms_code': '12 34 5'},
{'sms_code': '1-23-45'},
])
def test_form_is_valid_returns_no_errors(
notify_admin,
mock_check_verify_code,
post_data,
):
with notify_admin.test_request_context(method='POST', data=post_data):
form = TwoFactorForm(_check_code)
assert form.validate() is True
assert form.errors == {}
mock_check_verify_code.assert_called_once_with('1', '12345', 'sms')
@pytest.mark.parametrize('post_data, expected_error', (
(
{'sms_code': '1234'},
'Not enough numbers',
),
(
{'sms_code': '123456'},
'Too many numbers',
),
(
{},
'Cannot be empty',
),
(
{'sms_code': '12E45'},
'Numbers only',
),
(
{'sms_code': ' ! 2 3 4 5'},
'Numbers only',
),
))
def test_check_verify_code_returns_errors(
notify_admin,
post_data,
expected_error,
mock_check_verify_code,
):
with notify_admin.test_request_context(method='POST', data=post_data):
form = TwoFactorForm(_check_code)
assert form.validate() is False
assert form.errors == {'sms_code': [expected_error]}
def test_check_verify_code_returns_error_when_code_has_expired(
notify_admin,
mock_check_verify_code_code_expired,
):
with notify_admin.test_request_context(method='POST', data={'sms_code': '99999'}):
form = TwoFactorForm(_check_code)
assert form.validate() is False
assert form.errors == {'sms_code': ['Code has expired']}
def test_check_verify_code_returns_error_when_code_was_not_found(
notify_admin,
mock_check_verify_code_code_not_found,
):
with notify_admin.test_request_context(method='POST', data={'sms_code': '99999'}):
form = TwoFactorForm(_check_code)
assert form.validate() is False
assert form.errors == {'sms_code': ['Code not found']}