108 lines
3.6 KiB
Python
108 lines
3.6 KiB
Python
from selenium.webdriver.common.by import By
|
|
|
|
from .utils import (
|
|
TEST_URL,
|
|
random_string,
|
|
register,
|
|
register_valid_user_and_logout,
|
|
)
|
|
|
|
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('id') == 'username'
|
|
assert inputs[0].get_attribute('type') == 'text'
|
|
assert inputs[1].get_attribute('id') == 'email'
|
|
assert inputs[1].get_attribute('type') == 'email'
|
|
assert inputs[2].get_attribute('id') == 'password'
|
|
assert inputs[2].get_attribute('type') == 'password'
|
|
assert inputs[4].get_attribute('id') == 'accepted_policy'
|
|
assert inputs[4].get_attribute('type') == 'checkbox'
|
|
|
|
form_infos = selenium.find_elements(By.CLASS_NAME, 'form-info')
|
|
assert len(form_infos) == 3
|
|
assert form_infos[0].text == (
|
|
'3 to 30 characters required, only alphanumeric characters and '
|
|
'the underscore character "_" allowed.'
|
|
)
|
|
assert form_infos[1].text == 'Enter a valid email address.'
|
|
assert form_infos[2].text == 'At least 8 characters required.'
|
|
|
|
button = selenium.find_elements(By.TAG_NAME, 'button')[-1]
|
|
assert button.get_attribute('type') == 'submit'
|
|
assert 'Register' in button.text
|
|
|
|
links = selenium.find_elements(By.CLASS_NAME, 'links')
|
|
assert links[0].tag_name == 'a'
|
|
assert 'Login' in links[0].text
|
|
assert links[1].tag_name == 'a'
|
|
assert "Didn't received instructions?" in links[1].text
|
|
|
|
def test_user_can_register(self, selenium):
|
|
user = {
|
|
'username': random_string(),
|
|
'email': f'{random_string()}@example.com',
|
|
'password': 'p@ssw0rd',
|
|
}
|
|
|
|
register(selenium, user)
|
|
|
|
message = selenium.find_element(By.CLASS_NAME, 'success-message').text
|
|
assert (
|
|
'A link to activate your account has been '
|
|
'emailed to the address provided.'
|
|
) in message
|
|
|
|
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',
|
|
}
|
|
|
|
register(selenium, user_infos)
|
|
|
|
assert selenium.current_url == URL
|
|
nav = selenium.find_element(By.ID, 'nav').text
|
|
assert 'Register' in nav
|
|
assert 'Login' in nav
|
|
|
|
def test_user_can_not_register_if_username_is_already_taken(
|
|
self, selenium
|
|
):
|
|
user = register_valid_user_and_logout(selenium)
|
|
user['email'] = f'{random_string()}@example.com'
|
|
|
|
register(selenium, user)
|
|
|
|
assert selenium.current_url == URL
|
|
errors = (
|
|
selenium.find_element(By.ID, 'user-form')
|
|
.find_element(By.CLASS_NAME, 'error-message')
|
|
.text
|
|
)
|
|
assert 'Sorry, that username is already taken.' in errors
|
|
|
|
def test_user_does_not_return_error_if_email_is_already_taken(
|
|
self, selenium
|
|
):
|
|
user = register_valid_user_and_logout(selenium)
|
|
user['username'] = random_string()
|
|
|
|
register(selenium, user)
|
|
|
|
assert selenium.current_url == f'{TEST_URL}/login'
|
|
message = selenium.find_element(By.CLASS_NAME, 'success-message').text
|
|
assert (
|
|
'A link to activate your account has been '
|
|
'emailed to the address provided.'
|
|
) in message
|