fix e2e tests
This commit is contained in:
parent
b57433d0c4
commit
8c9ae82842
@ -1,3 +1,5 @@
|
|||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
|
||||||
from .utils import TEST_URL
|
from .utils import TEST_URL
|
||||||
|
|
||||||
|
|
||||||
@ -9,7 +11,7 @@ class TestIndex:
|
|||||||
def test_navbar_contains_all_links(self, selenium):
|
def test_navbar_contains_all_links(self, selenium):
|
||||||
selenium.get(TEST_URL)
|
selenium.get(TEST_URL)
|
||||||
|
|
||||||
nav = selenium.find_element_by_id('nav').text
|
nav = selenium.find_element(By.ID, 'nav').text
|
||||||
assert "FitTrackee" in nav
|
assert "FitTrackee" in nav
|
||||||
assert "Login" in nav
|
assert "Login" in nav
|
||||||
assert "Register" in nav
|
assert "Register" in nav
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
|
||||||
from .utils import TEST_URL, login_valid_user, register_valid_user_and_logout
|
from .utils import TEST_URL, login_valid_user, register_valid_user_and_logout
|
||||||
|
|
||||||
URL = f'{TEST_URL}/login'
|
URL = f'{TEST_URL}/login'
|
||||||
@ -7,24 +9,24 @@ class TestLogin:
|
|||||||
def test_navbar_contains_login(self, selenium):
|
def test_navbar_contains_login(self, selenium):
|
||||||
selenium.get(URL)
|
selenium.get(URL)
|
||||||
|
|
||||||
nav = selenium.find_element_by_id('nav').text
|
nav = selenium.find_element(By.ID, 'nav').text
|
||||||
assert 'Login' in nav
|
assert 'Login' in nav
|
||||||
|
|
||||||
def test_it_displays_login_form(self, selenium):
|
def test_it_displays_login_form(self, selenium):
|
||||||
selenium.get(URL)
|
selenium.get(URL)
|
||||||
|
|
||||||
inputs = selenium.find_elements_by_tag_name('input')
|
inputs = selenium.find_elements(By.TAG_NAME, 'input')
|
||||||
assert len(inputs) == 2
|
assert len(inputs) == 2
|
||||||
assert inputs[0].get_attribute('id') == 'email'
|
assert inputs[0].get_attribute('id') == 'email'
|
||||||
assert inputs[0].get_attribute('type') == 'email'
|
assert inputs[0].get_attribute('type') == 'email'
|
||||||
assert inputs[1].get_attribute('id') == 'password'
|
assert inputs[1].get_attribute('id') == 'password'
|
||||||
assert inputs[1].get_attribute('type') == 'password'
|
assert inputs[1].get_attribute('type') == 'password'
|
||||||
|
|
||||||
button = selenium.find_element_by_tag_name('button')
|
button = selenium.find_element(By.TAG_NAME, 'button')
|
||||||
assert button.get_attribute('type') == 'submit'
|
assert button.get_attribute('type') == 'submit'
|
||||||
assert 'Log in' in button.text
|
assert 'Log in' in button.text
|
||||||
|
|
||||||
links = selenium.find_elements_by_class_name('links')
|
links = selenium.find_elements(By.CLASS_NAME, 'links')
|
||||||
assert links[0].tag_name == 'a'
|
assert links[0].tag_name == 'a'
|
||||||
assert 'Register' in links[0].text
|
assert 'Register' in links[0].text
|
||||||
assert links[1].tag_name == 'a'
|
assert links[1].tag_name == 'a'
|
||||||
@ -37,7 +39,7 @@ class TestLogin:
|
|||||||
|
|
||||||
login_valid_user(selenium, user)
|
login_valid_user(selenium, user)
|
||||||
|
|
||||||
nav = selenium.find_element_by_id('nav').text
|
nav = selenium.find_element(By.ID, 'nav').text
|
||||||
assert 'Register' not in nav
|
assert 'Register' not in nav
|
||||||
assert 'Login' not in nav
|
assert 'Login' not in nav
|
||||||
assert 'Dashboard' in nav
|
assert 'Dashboard' in nav
|
||||||
|
@ -1,16 +1,18 @@
|
|||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
|
||||||
from .utils import register_valid_user
|
from .utils import register_valid_user
|
||||||
|
|
||||||
|
|
||||||
class TestLogout:
|
class TestLogout:
|
||||||
def test_user_can_log_out(self, selenium):
|
def test_user_can_log_out(self, selenium):
|
||||||
user = register_valid_user(selenium)
|
user = register_valid_user(selenium)
|
||||||
user_menu = selenium.find_element_by_class_name('nav-items-user-menu')
|
user_menu = selenium.find_element(By.CLASS_NAME, 'nav-items-user-menu')
|
||||||
logout_link = user_menu.find_elements_by_class_name('nav-item')[2]
|
logout_link = user_menu.find_elements(By.CLASS_NAME, 'nav-item')[2]
|
||||||
|
|
||||||
logout_link.click()
|
logout_link.click()
|
||||||
selenium.implicitly_wait(1)
|
selenium.implicitly_wait(1)
|
||||||
|
|
||||||
nav = selenium.find_element_by_id('nav').text
|
nav = selenium.find_element(By.ID, 'nav').text
|
||||||
assert 'Register' in nav
|
assert 'Register' in nav
|
||||||
assert 'Login' in nav
|
assert 'Login' in nav
|
||||||
assert user['username'] not in nav
|
assert user['username'] not in nav
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
|
||||||
from .utils import register_valid_user
|
from .utils import register_valid_user
|
||||||
|
|
||||||
|
|
||||||
@ -5,18 +7,18 @@ class TestProfile:
|
|||||||
def test_it_displays_user_profile(self, selenium):
|
def test_it_displays_user_profile(self, selenium):
|
||||||
user = register_valid_user(selenium)
|
user = register_valid_user(selenium)
|
||||||
|
|
||||||
app_menu = selenium.find_element_by_class_name('nav-items-user-menu')
|
app_menu = selenium.find_element(By.CLASS_NAME, 'nav-items-user-menu')
|
||||||
profile_link = app_menu.find_elements_by_class_name('nav-item')[1]
|
profile_link = app_menu.find_elements(By.CLASS_NAME, 'nav-item')[1]
|
||||||
profile_link.click()
|
profile_link.click()
|
||||||
selenium.implicitly_wait(1)
|
selenium.implicitly_wait(1)
|
||||||
|
|
||||||
user_header = selenium.find_element_by_class_name('user-header')
|
user_header = selenium.find_element(By.CLASS_NAME, 'user-header')
|
||||||
assert user['username'] in user_header.text
|
assert user['username'] in user_header.text
|
||||||
assert '0\nworkouts' in user_header.text
|
assert '0\nworkouts' in user_header.text
|
||||||
assert '0\nkm' in user_header.text
|
assert '0\nkm' in user_header.text
|
||||||
assert '0\nsports' in user_header.text
|
assert '0\nsports' in user_header.text
|
||||||
|
|
||||||
user_infos = selenium.find_element_by_id('user-infos')
|
user_infos = selenium.find_element(By.ID, 'user-infos')
|
||||||
assert 'Registration date' in user_infos.text
|
assert 'Registration date' in user_infos.text
|
||||||
assert 'First name' in user_infos.text
|
assert 'First name' in user_infos.text
|
||||||
assert 'Last name' in user_infos.text
|
assert 'Last name' in user_infos.text
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
|
||||||
from .utils import (
|
from .utils import (
|
||||||
TEST_URL,
|
TEST_URL,
|
||||||
random_string,
|
random_string,
|
||||||
@ -13,7 +15,7 @@ class TestRegistration:
|
|||||||
selenium.get(URL)
|
selenium.get(URL)
|
||||||
selenium.implicitly_wait(1)
|
selenium.implicitly_wait(1)
|
||||||
|
|
||||||
inputs = selenium.find_elements_by_tag_name('input')
|
inputs = selenium.find_elements(By.TAG_NAME, 'input')
|
||||||
assert len(inputs) == 4
|
assert len(inputs) == 4
|
||||||
assert inputs[0].get_attribute('id') == 'username'
|
assert inputs[0].get_attribute('id') == 'username'
|
||||||
assert inputs[0].get_attribute('type') == 'text'
|
assert inputs[0].get_attribute('type') == 'text'
|
||||||
@ -22,7 +24,7 @@ class TestRegistration:
|
|||||||
assert inputs[2].get_attribute('id') == 'password'
|
assert inputs[2].get_attribute('id') == 'password'
|
||||||
assert inputs[2].get_attribute('type') == 'password'
|
assert inputs[2].get_attribute('type') == 'password'
|
||||||
|
|
||||||
form_infos = selenium.find_elements_by_class_name('form-info')
|
form_infos = selenium.find_elements(By.CLASS_NAME, 'form-info')
|
||||||
assert len(form_infos) == 3
|
assert len(form_infos) == 3
|
||||||
assert form_infos[0].text == (
|
assert form_infos[0].text == (
|
||||||
'3 to 30 characters required, only alphanumeric characters and '
|
'3 to 30 characters required, only alphanumeric characters and '
|
||||||
@ -31,11 +33,11 @@ class TestRegistration:
|
|||||||
assert form_infos[1].text == 'Enter a valid email address.'
|
assert form_infos[1].text == 'Enter a valid email address.'
|
||||||
assert form_infos[2].text == 'At least 8 characters required.'
|
assert form_infos[2].text == 'At least 8 characters required.'
|
||||||
|
|
||||||
button = selenium.find_element_by_tag_name('button')
|
button = selenium.find_element(By.TAG_NAME, 'button')
|
||||||
assert button.get_attribute('type') == 'submit'
|
assert button.get_attribute('type') == 'submit'
|
||||||
assert 'Register' in button.text
|
assert 'Register' in button.text
|
||||||
|
|
||||||
links = selenium.find_elements_by_class_name('links')
|
links = selenium.find_elements(By.CLASS_NAME, 'links')
|
||||||
assert links[0].tag_name == 'a'
|
assert links[0].tag_name == 'a'
|
||||||
assert 'Login' in links[0].text
|
assert 'Login' in links[0].text
|
||||||
assert links[1].tag_name == 'a'
|
assert links[1].tag_name == 'a'
|
||||||
@ -50,7 +52,7 @@ class TestRegistration:
|
|||||||
|
|
||||||
register(selenium, user)
|
register(selenium, user)
|
||||||
|
|
||||||
message = selenium.find_element_by_class_name('success-message').text
|
message = selenium.find_element(By.CLASS_NAME, 'success-message').text
|
||||||
assert (
|
assert (
|
||||||
'A link to activate your account has been '
|
'A link to activate your account has been '
|
||||||
'emailed to the address provided.'
|
'emailed to the address provided.'
|
||||||
@ -67,7 +69,7 @@ class TestRegistration:
|
|||||||
register(selenium, user_infos)
|
register(selenium, user_infos)
|
||||||
|
|
||||||
assert selenium.current_url == URL
|
assert selenium.current_url == URL
|
||||||
nav = selenium.find_element_by_id('nav').text
|
nav = selenium.find_element(By.ID, 'nav').text
|
||||||
assert 'Register' in nav
|
assert 'Register' in nav
|
||||||
assert 'Login' in nav
|
assert 'Login' in nav
|
||||||
|
|
||||||
@ -80,7 +82,7 @@ class TestRegistration:
|
|||||||
register(selenium, user)
|
register(selenium, user)
|
||||||
|
|
||||||
assert selenium.current_url == URL
|
assert selenium.current_url == URL
|
||||||
errors = selenium.find_element_by_class_name('error-message').text
|
errors = selenium.find_element(By.CLASS_NAME, 'error-message').text
|
||||||
assert 'Sorry, that username is already taken.' in errors
|
assert 'Sorry, that username is already taken.' in errors
|
||||||
|
|
||||||
def test_user_does_not_return_error_if_email_is_already_taken(
|
def test_user_does_not_return_error_if_email_is_already_taken(
|
||||||
@ -92,7 +94,7 @@ class TestRegistration:
|
|||||||
register(selenium, user)
|
register(selenium, user)
|
||||||
|
|
||||||
assert selenium.current_url == f'{TEST_URL}/login'
|
assert selenium.current_url == f'{TEST_URL}/login'
|
||||||
message = selenium.find_element_by_class_name('success-message').text
|
message = selenium.find_element(By.CLASS_NAME, 'success-message').text
|
||||||
assert (
|
assert (
|
||||||
'A link to activate your account has been '
|
'A link to activate your account has been '
|
||||||
'emailed to the address provided.'
|
'emailed to the address provided.'
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from selenium.webdriver.common.by import By
|
||||||
from selenium.webdriver.support import expected_conditions as EC
|
from selenium.webdriver.support import expected_conditions as EC
|
||||||
from selenium.webdriver.support.ui import Select, WebDriverWait
|
from selenium.webdriver.support.ui import Select, WebDriverWait
|
||||||
|
|
||||||
@ -7,36 +8,36 @@ from .utils import TEST_URL, register_valid_user
|
|||||||
class TestWorkout:
|
class TestWorkout:
|
||||||
def test_user_can_add_workout_without_gpx(self, selenium):
|
def test_user_can_add_workout_without_gpx(self, selenium):
|
||||||
register_valid_user(selenium)
|
register_valid_user(selenium)
|
||||||
app_menu = selenium.find_element_by_class_name('nav-items-app-menu')
|
app_menu = selenium.find_element(By.CLASS_NAME, 'nav-items-app-menu')
|
||||||
add_workout_link = app_menu.find_elements_by_class_name('nav-item')[3]
|
add_workout_link = app_menu.find_elements(By.CLASS_NAME, 'nav-item')[3]
|
||||||
|
|
||||||
add_workout_link.click()
|
add_workout_link.click()
|
||||||
selenium.implicitly_wait(1)
|
selenium.implicitly_wait(1)
|
||||||
radio_button = selenium.find_element_by_id('withoutGpx')
|
radio_button = selenium.find_element(By.ID, 'withoutGpx')
|
||||||
radio_button.click()
|
radio_button.click()
|
||||||
|
|
||||||
select = Select(selenium.find_element_by_id('sport'))
|
select = Select(selenium.find_element(By.ID, 'sport'))
|
||||||
select.select_by_index(1)
|
select.select_by_index(1)
|
||||||
selenium.find_element_by_name('title').send_keys('Workout title')
|
selenium.find_element(By.NAME, 'title').send_keys('Workout title')
|
||||||
selenium.find_element_by_name('workout-date').send_keys('2018-12-20')
|
selenium.find_element(By.NAME, 'workout-date').send_keys('2018-12-20')
|
||||||
selenium.find_element_by_name('workout-time').send_keys('14:05')
|
selenium.find_element(By.NAME, 'workout-time').send_keys('14:05')
|
||||||
selenium.find_element_by_name('workout-duration-hour').send_keys('01')
|
selenium.find_element(By.NAME, 'workout-duration-hour').send_keys('01')
|
||||||
selenium.find_element_by_name('workout-duration-minutes').send_keys(
|
selenium.find_element(By.NAME, 'workout-duration-minutes').send_keys(
|
||||||
'00'
|
'00'
|
||||||
)
|
)
|
||||||
selenium.find_element_by_name('workout-duration-seconds').send_keys(
|
selenium.find_element(By.NAME, 'workout-duration-seconds').send_keys(
|
||||||
'00'
|
'00'
|
||||||
)
|
)
|
||||||
selenium.find_element_by_name('workout-distance').send_keys('10')
|
selenium.find_element(By.NAME, 'workout-distance').send_keys('10')
|
||||||
|
|
||||||
confirm_button = selenium.find_element_by_class_name('confirm')
|
confirm_button = selenium.find_element(By.CLASS_NAME, 'confirm')
|
||||||
confirm_button.click()
|
confirm_button.click()
|
||||||
|
|
||||||
WebDriverWait(selenium, 10).until(
|
WebDriverWait(selenium, 10).until(
|
||||||
EC.url_changes(f"{TEST_URL}/workouts/add")
|
EC.url_changes(f"{TEST_URL}/workouts/add")
|
||||||
)
|
)
|
||||||
|
|
||||||
workout_details = selenium.find_element_by_id('workout-info').text
|
workout_details = selenium.find_element(By.ID, 'workout-info').text
|
||||||
assert 'Duration: 1:00:00' in workout_details
|
assert 'Duration: 1:00:00' in workout_details
|
||||||
assert 'Distance: 10 km' in workout_details
|
assert 'Distance: 10 km' in workout_details
|
||||||
assert 'Average Speed: 10 km/h' in workout_details
|
assert 'Average Speed: 10 km/h' in workout_details
|
||||||
|
19
e2e/utils.py
19
e2e/utils.py
@ -5,6 +5,7 @@ import string
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
from selenium.webdriver.common.by import By
|
||||||
from selenium.webdriver.support import expected_conditions as EC
|
from selenium.webdriver.support import expected_conditions as EC
|
||||||
from selenium.webdriver.support.ui import WebDriverWait
|
from selenium.webdriver.support.ui import WebDriverWait
|
||||||
from urllib3.util import parse_url
|
from urllib3.util import parse_url
|
||||||
@ -25,24 +26,24 @@ def random_string(length=8):
|
|||||||
def register(selenium, user):
|
def register(selenium, user):
|
||||||
selenium.get(f'{TEST_URL}/register')
|
selenium.get(f'{TEST_URL}/register')
|
||||||
selenium.implicitly_wait(1)
|
selenium.implicitly_wait(1)
|
||||||
username = selenium.find_element_by_id('username')
|
username = selenium.find_element(By.ID, 'username')
|
||||||
username.send_keys(user.get('username'))
|
username.send_keys(user.get('username'))
|
||||||
email = selenium.find_element_by_id('email')
|
email = selenium.find_element(By.ID, 'email')
|
||||||
email.send_keys(user.get('email'))
|
email.send_keys(user.get('email'))
|
||||||
password = selenium.find_element_by_id('password')
|
password = selenium.find_element(By.ID, 'password')
|
||||||
password.send_keys(user.get('password'))
|
password.send_keys(user.get('password'))
|
||||||
submit_button = selenium.find_element_by_tag_name('button')
|
submit_button = selenium.find_element(By.TAG_NAME, 'button')
|
||||||
submit_button.click()
|
submit_button.click()
|
||||||
|
|
||||||
|
|
||||||
def login(selenium, user):
|
def login(selenium, user):
|
||||||
selenium.get(f'{TEST_URL}/login')
|
selenium.get(f'{TEST_URL}/login')
|
||||||
selenium.implicitly_wait(1)
|
selenium.implicitly_wait(1)
|
||||||
email = selenium.find_element_by_id('email')
|
email = selenium.find_element(By.ID, 'email')
|
||||||
email.send_keys(user.get('email'))
|
email.send_keys(user.get('email'))
|
||||||
password = selenium.find_element_by_id('password')
|
password = selenium.find_element(By.ID, 'password')
|
||||||
password.send_keys(user.get('password'))
|
password.send_keys(user.get('password'))
|
||||||
submit_button = selenium.find_element_by_tag_name('button')
|
submit_button = selenium.find_element(By.TAG_NAME, 'button')
|
||||||
submit_button.click()
|
submit_button.click()
|
||||||
|
|
||||||
|
|
||||||
@ -61,8 +62,8 @@ def register_valid_user(selenium):
|
|||||||
|
|
||||||
def register_valid_user_and_logout(selenium):
|
def register_valid_user_and_logout(selenium):
|
||||||
user = register_valid_user(selenium)
|
user = register_valid_user(selenium)
|
||||||
user_menu = selenium.find_element_by_class_name('nav-items-user-menu')
|
user_menu = selenium.find_element(By.CLASS_NAME, 'nav-items-user-menu')
|
||||||
logout_link = user_menu.find_elements_by_class_name('nav-item')[2]
|
logout_link = user_menu.find_elements(By.CLASS_NAME, 'nav-item')[2]
|
||||||
logout_link.click()
|
logout_link.click()
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user