142 lines
4.6 KiB
Python
142 lines
4.6 KiB
Python
from .utils import (
|
|
TEST_URL,
|
|
assert_navbar,
|
|
random_string,
|
|
register,
|
|
register_valid_user,
|
|
)
|
|
|
|
URL = f'{TEST_URL}/register'
|
|
|
|
|
|
class TestRegistration:
|
|
def test_it_displays_registration_form(self, selenium):
|
|
selenium.get(URL)
|
|
selenium.implicitly_wait(1)
|
|
|
|
inputs = selenium.find_elements_by_tag_name('input')
|
|
assert len(inputs) == 5
|
|
assert inputs[0].get_attribute('name') == 'username'
|
|
assert inputs[0].get_attribute('type') == 'text'
|
|
assert inputs[1].get_attribute('name') == 'email'
|
|
assert inputs[1].get_attribute('type') == 'email'
|
|
assert inputs[2].get_attribute('name') == 'password'
|
|
assert inputs[2].get_attribute('type') == 'password'
|
|
assert inputs[3].get_attribute('name') == 'password_conf'
|
|
assert inputs[3].get_attribute('type') == 'password'
|
|
assert inputs[4].get_attribute('name') == ''
|
|
assert inputs[4].get_attribute('type') == 'submit'
|
|
|
|
def test_user_can_register(self, selenium):
|
|
user = register_valid_user(selenium)
|
|
|
|
assert_navbar(selenium, user)
|
|
|
|
def test_user_can_not_register_with_invalid_email(self, selenium):
|
|
user_name = random_string()
|
|
user_infos = {
|
|
'username': user_name,
|
|
'email': user_name,
|
|
'password': 'p@ssw0rd',
|
|
'password_conf': 'p@ssw0rd',
|
|
}
|
|
|
|
register(selenium, user_infos)
|
|
|
|
assert selenium.current_url == URL
|
|
nav = selenium.find_element_by_tag_name('nav').text
|
|
assert 'Register' in nav
|
|
assert 'Login' in nav
|
|
|
|
def test_user_can_not_register_if_username_is_already_taken(
|
|
self, selenium
|
|
):
|
|
user_name = random_string()
|
|
user_infos = {
|
|
'username': 'admin',
|
|
'email': f'{user_name}@example.com',
|
|
'password': 'p@ssw0rd',
|
|
'password_conf': 'p@ssw0rd',
|
|
}
|
|
|
|
register(selenium, user_infos)
|
|
|
|
assert selenium.current_url == URL
|
|
errors = selenium.find_element_by_tag_name('code').text
|
|
assert 'Sorry. That user already exists.' in errors
|
|
|
|
def test_user_can_not_register_if_email_is_already_taken(self, selenium):
|
|
user_name = random_string()
|
|
user_infos = {
|
|
'username': user_name,
|
|
'email': 'admin@example.com',
|
|
'password': 'p@ssw0rd',
|
|
'password_conf': 'p@ssw0rd',
|
|
}
|
|
|
|
register(selenium, user_infos)
|
|
|
|
assert selenium.current_url == URL
|
|
errors = selenium.find_element_by_tag_name('code').text
|
|
assert 'Sorry. That user already exists.' in errors
|
|
|
|
def test_user_can_not_register_if_username_is_too_short(self, selenium):
|
|
user_name = random_string(2)
|
|
user_infos = {
|
|
'username': user_name,
|
|
'email': 'admin@example.com',
|
|
'password': 'p@ssw0rd',
|
|
'password_conf': 'p@ssw0rd',
|
|
}
|
|
|
|
register(selenium, user_infos)
|
|
|
|
assert selenium.current_url == URL
|
|
errors = selenium.find_element_by_tag_name('code').text
|
|
assert '3 to 12 characters required for username.' in errors
|
|
|
|
def test_user_can_not_register_if_username_is_too_long(self, selenium):
|
|
user_name = random_string(13)
|
|
user_infos = {
|
|
'username': user_name,
|
|
'email': 'admin@example.com',
|
|
'password': 'p@ssw0rd',
|
|
'password_conf': 'p@ssw0rd',
|
|
}
|
|
|
|
register(selenium, user_infos)
|
|
|
|
assert selenium.current_url == URL
|
|
errors = selenium.find_element_by_tag_name('code').text
|
|
assert '3 to 12 characters required for username.' in errors
|
|
|
|
def test_it_displays_error_if_passwords_do_not_match(self, selenium):
|
|
user_name = random_string()
|
|
user_infos = {
|
|
'username': user_name,
|
|
'email': f'{user_name}@example.com',
|
|
'password': 'p@ssw0rd',
|
|
'password_conf': 'password',
|
|
}
|
|
|
|
register(selenium, user_infos)
|
|
|
|
assert selenium.current_url == URL
|
|
errors = selenium.find_element_by_tag_name('code').text
|
|
assert 'Password and password confirmation don\'t match' in errors
|
|
|
|
def test_it_displays_error_if_password_is_too_short(self, selenium):
|
|
user_name = random_string()
|
|
user_infos = {
|
|
'username': user_name,
|
|
'email': f'{user_name}@example.com',
|
|
'password': 'p@ss',
|
|
'password_conf': 'p@ss',
|
|
}
|
|
|
|
register(selenium, user_infos)
|
|
|
|
assert selenium.current_url == URL
|
|
errors = selenium.find_element_by_tag_name('code').text
|
|
assert '8 characters required for password.' in errors
|