def test_home_after_adding_article(selenium, mock_server): register_valid_user(selenium) assert ( selenium.find_element_by_class_name('articles-msg').text == "No articles. Add one !" ) url = f'http://localhost:{mock_server.port}/html_ok' add_valid_article_with_tag(selenium, url) selenium.get(f"{URL}") WebDriverWait(selenium, 10).until( EC.text_to_be_present_in_element( (By.CLASS_NAME, 'articles-msg'), '1 article' ) ) card = selenium.find_element_by_class_name('card') assert 'default' in card.find_element_by_class_name('badge-rdltr').text assert ( 'this is a title' in card.find_element_by_class_name('card-title').text ) assert ( 'test_tag' in card.find_element_by_class_name('badge-rdltr-tag').text ) assert 'page 1 / 1' in selenium.find_element_by_id('pagination').text
def test_settings_update_tags(selenium): register_valid_user(selenium) selenium.get(f"{URL}settings/tags") add_button = selenium.find_elements_by_tag_name("button")[1] add_button.click() # add a tag fill_form(selenium, {"name": "python"}, is_category=False) tbody_td = selenium.find_element_by_tag_name( "tbody").find_elements_by_tag_name("td") assert "python" in tbody_td[1].text assert "0" in tbody_td[2].text edit_icon = tbody_td[3].find_element_by_class_name("fa-pencil") assert len(tbody_td[3].find_elements_by_class_name("fa-trash")) == 1 # edit the tag edit_icon.click() fill_form(selenium, {"name": "tests"}, is_category=False) tbody_td = selenium.find_element_by_tag_name( "tbody").find_elements_by_tag_name("td") assert "tests" in tbody_td[1].text # delete the tag tbody_td[3].find_element_by_class_name("fa-trash").click() tbody_td = selenium.find_element_by_tag_name( "tbody").find_elements_by_tag_name("td") assert tbody_td == []
def test_settings_display_tags(selenium): register_valid_user(selenium) selenium.get(f"{URL}settings") box = selenium.find_element_by_class_name("rdltr-box") box.find_elements_by_tag_name("button")[1].click() container = selenium.find_element_by_class_name("container") rows = container.find_elements_by_class_name("row") buttons = rows[0].find_elements_by_tag_name("button") back_to_settings = buttons[0] assert 'Back to settings' in back_to_settings.text assert 'Add a tag' in buttons[1].text rows[1].find_elements_by_tag_name("input") assert 'Search' in rows[1].find_element_by_tag_name("span").text table = rows[2].find_element_by_tag_name("table") thead_th = table.find_element_by_tag_name( "thead").find_elements_by_tag_name("th") assert "Id" in thead_th[0].text assert "Name" in thead_th[1].text assert "Nb articles" in thead_th[2].text assert "Action" in thead_th[3].text tbody_td = table.find_element_by_tag_name( "tbody").find_elements_by_tag_name("td") assert tbody_td == []
def test_settings_display_tags(selenium: WebDriver) -> None: register_valid_user(selenium) selenium.get(f'{URL}settings') box = selenium.find_element_by_class_name('rdltr-box') box.find_elements_by_tag_name('button')[1].click() container = selenium.find_element_by_class_name('container') rows = container.find_elements_by_class_name('row') buttons = rows[0].find_elements_by_tag_name('button') back_to_settings = buttons[0] assert 'Back to settings' in back_to_settings.text assert 'Add a tag' in buttons[1].text rows[1].find_elements_by_tag_name('input') assert 'Search' in rows[1].find_element_by_tag_name('span').text table = rows[2].find_element_by_tag_name('table') thead_th = table.find_element_by_tag_name( 'thead').find_elements_by_tag_name('th') assert 'Id' in thead_th[0].text assert 'Name' in thead_th[1].text assert 'Nb articles' in thead_th[2].text assert 'Action' in thead_th[3].text tbody_td = table.find_element_by_tag_name( 'tbody').find_elements_by_tag_name('td') assert tbody_td == []
def test_register_ok(selenium): register_valid_user(selenium) nav = selenium.find_element_by_tag_name('nav').text assert "Register" not in nav assert "Log in" not in nav assert "Settings" in nav assert "Logout" in nav
def test_settings_update_tags(selenium: WebDriver) -> None: register_valid_user(selenium) selenium.get(f'{URL}settings/tags') add_button = selenium.find_elements_by_tag_name('button')[1] add_button.click() # add a tag fill_form(selenium, {'name': 'python'}, is_category=False) tbody_td = selenium.find_element_by_tag_name( 'tbody').find_elements_by_tag_name('td') assert 'python' in tbody_td[1].text assert '0' in tbody_td[2].text edit_icon = tbody_td[3].find_element_by_class_name('fa-pencil') assert len(tbody_td[3].find_elements_by_class_name('fa-trash')) == 1 # edit the tag edit_icon.click() fill_form(selenium, {'name': 'tests'}, is_category=False) tbody_td = selenium.find_element_by_tag_name( 'tbody').find_elements_by_tag_name('td') assert 'tests' in tbody_td[1].text # delete the tag tbody_td[3].find_element_by_class_name('fa-trash').click() tbody_td = selenium.find_element_by_tag_name( 'tbody').find_elements_by_tag_name('td') assert tbody_td == []
def test_settings_update_categories(selenium): register_valid_user(selenium) selenium.get(f"{URL}settings/categories") add_button = selenium.find_elements_by_tag_name("button")[1] add_button.click() # add a category form_values = {"name": "news", "description": "News category"} fill_form(selenium, form_values) tbody_td = selenium.find_element_by_tag_name( "tbody").find_elements_by_tag_name("td") assert "default" in tbody_td[1].text assert (len( tbody_td[1].find_elements_by_class_name("badge-rdltr-small")) == 1) assert "Default category" in tbody_td[2].text assert "0" in tbody_td[3].text assert "news" in tbody_td[6].text assert tbody_td[6].find_elements_by_class_name("badge-rdltr-small") == [] assert "News category" in tbody_td[7].text assert "0" in tbody_td[8].text assert len(tbody_td[9].find_elements_by_class_name("fa-trash")) == 1 # edit the category tbody_td[9].find_element_by_class_name("fa-pencil").click() form_values = { "name": "sports", "description": "All articles about sports", } fill_form(selenium, form_values) tbody_td = selenium.find_element_by_tag_name( "tbody").find_elements_by_tag_name("td") assert "default" in tbody_td[1].text assert (len( tbody_td[1].find_elements_by_class_name("badge-rdltr-small")) == 1) assert "Default category" in tbody_td[2].text assert "0" in tbody_td[3].text assert "sports" in tbody_td[6].text assert tbody_td[6].find_elements_by_class_name("badge-rdltr-small") == [] assert "All articles about sports" in tbody_td[7].text assert "0" in tbody_td[8].text # delete the category tbody_td[9].find_element_by_class_name("fa-trash").click() tbody_td = selenium.find_element_by_tag_name( "tbody").find_elements_by_tag_name("td") assert len(tbody_td) == 5 assert "default" in tbody_td[1].text assert (len( tbody_td[1].find_elements_by_class_name("badge-rdltr-small")) == 1) assert "Default category" in tbody_td[2].text
def test_settings_update_categories(selenium: WebDriver) -> None: register_valid_user(selenium) selenium.get(f'{URL}settings/categories') add_button = selenium.find_elements_by_tag_name('button')[1] add_button.click() # add a category form_values = {'name': 'news', 'description': 'News category'} fill_form(selenium, form_values) tbody_td = selenium.find_element_by_tag_name( 'tbody').find_elements_by_tag_name('td') assert 'default' in tbody_td[1].text assert (len( tbody_td[1].find_elements_by_class_name('badge-rdltr-small')) == 1) assert 'Default category' in tbody_td[2].text assert '0' in tbody_td[3].text assert 'news' in tbody_td[6].text assert tbody_td[6].find_elements_by_class_name('badge-rdltr-small') == [] assert 'News category' in tbody_td[7].text assert '0' in tbody_td[8].text assert len(tbody_td[9].find_elements_by_class_name('fa-trash')) == 1 # edit the category tbody_td[9].find_element_by_class_name('fa-pencil').click() form_values = { 'name': 'sports', 'description': 'All articles about sports', } fill_form(selenium, form_values) tbody_td = selenium.find_element_by_tag_name( 'tbody').find_elements_by_tag_name('td') assert 'default' in tbody_td[1].text assert (len( tbody_td[1].find_elements_by_class_name('badge-rdltr-small')) == 1) assert 'Default category' in tbody_td[2].text assert '0' in tbody_td[3].text assert 'sports' in tbody_td[6].text assert tbody_td[6].find_elements_by_class_name('badge-rdltr-small') == [] assert 'All articles about sports' in tbody_td[7].text assert '0' in tbody_td[8].text # delete the category tbody_td[9].find_element_by_class_name('fa-trash').click() tbody_td = selenium.find_element_by_tag_name( 'tbody').find_elements_by_tag_name('td') assert len(tbody_td) == 5 assert 'default' in tbody_td[1].text assert (len( tbody_td[1].find_elements_by_class_name('badge-rdltr-small')) == 1) assert 'Default category' in tbody_td[2].text
def test_add_article_no_category_no_tag(selenium, mock_server): register_valid_user(selenium) menus = selenium.find_elements_by_class_name('menu') menus[3].click() url = f'http://localhost:{mock_server.port}/html_ok' link = selenium.find_element_by_id('link') link.send_keys(url) submit_button = selenium.find_element_by_tag_name('button') submit_button.click() check_article(selenium, url)
def test_add_article_empty_document(selenium, mock_server): register_valid_user(selenium) menus = selenium.find_elements_by_class_name('menu') menus[3].click() url = f'http://localhost:{mock_server.port}' link = selenium.find_element_by_id('link') link.send_keys(url) submit_button = selenium.find_element_by_tag_name('button') submit_button.click() errors = selenium.find_element_by_class_name('alert-danger').text assert 'Error. Cannot parse the document.' in errors
def test_add_article_invalid_url(selenium): register_valid_user(selenium) menus = selenium.find_elements_by_class_name('menu') menus[3].click() url = 'http://not-existing-url.not' link = selenium.find_element_by_id('link') link.send_keys(url) submit_button = selenium.find_element_by_tag_name('button') submit_button.click() selenium.implicitly_wait(1) errors = selenium.find_element_by_class_name('alert-danger').text assert 'Error. Cannot connect to the URL, please check it.' in errors
def test_password_update_ok(selenium): user_infos = register_valid_user(selenium) menus = selenium.find_elements_by_class_name('menu') menus[2].click() login_valid_user(selenium, user_infos) # click on user name menus = selenium.find_elements_by_class_name('menu') menus[0].click() # click on 'Change password' submit_button = selenium.find_element_by_tag_name('button') submit_button.click() # update password new_password = '******' password = selenium.find_element_by_id('oldPassword') password.send_keys(user_infos.get('password')) password = selenium.find_element_by_id('password') password.send_keys(new_password) password_conf = selenium.find_element_by_id('confirm-password') password_conf.send_keys(new_password) submit_button = selenium.find_element_by_tag_name('button') submit_button.click() # log out menus = selenium.find_elements_by_class_name('menu') menus[2].click() # log in user_infos['password'] = user_infos['password_conf'] = new_password login_valid_user(selenium, user_infos)
def test_add_article_with_category_and_tag(selenium, mock_server): register_valid_user(selenium) url = f'http://localhost:{mock_server.port}/html_ok' add_valid_article_with_tag(selenium, url) WebDriverWait(selenium, 10).until(EC.url_changes(f'{URL}articles/add')) assert selenium.find_element_by_class_name('badge-rdltr').text == 'default' assert selenium.find_element_by_tag_name('h1').text == 'this is a title' assert ( selenium.find_element_by_class_name('badge-rdltr-tag').text == 'test_tag' ) assert url in selenium.find_element_by_class_name('article-data').text assert ( selenium.find_element_by_id('article-content').text == 'this is a paragraph' )
def test_add_article_url_not_found(selenium, mock_server): register_valid_user(selenium) menus = selenium.find_elements_by_class_name('menu') menus[3].click() url = f'http://localhost:{mock_server.port}/not_found' link = selenium.find_element_by_id('link') link.send_keys(url) submit_button = selenium.find_element_by_tag_name('button') submit_button.click() errors = selenium.find_element_by_class_name('alert-danger').text assert ( 'Error. Cannot get the requested resource, ' 'please check the URL (code: 404)' in errors )
def test_settings_display_categories(selenium): register_valid_user(selenium) menus = selenium.find_elements_by_class_name('menu') menus[1].click() box = selenium.find_element_by_class_name("rdltr-box") buttons = box.find_elements_by_tag_name("button") assert 'Categories' in buttons[0].text assert 'Tags' in buttons[1].text assert 'Back to home' in buttons[2].text buttons[0].click() container = selenium.find_element_by_class_name("container") rows = container.find_elements_by_class_name("row") buttons = rows[0].find_elements_by_tag_name("button") back_to_settings = buttons[0] assert 'Back to settings' in back_to_settings.text assert 'Add a category' in buttons[1].text rows[1].find_elements_by_tag_name("input") assert 'Search' in rows[1].find_element_by_tag_name("span").text # default category should exist. this category can not be deleted table = rows[2].find_element_by_tag_name("table") thead_th = table.find_element_by_tag_name( "thead").find_elements_by_tag_name("th") assert "Id" in thead_th[0].text assert "Name" in thead_th[1].text assert "Description" in thead_th[2].text assert "Nb articles" in thead_th[3].text assert "Action" in thead_th[4].text tbody_td = table.find_element_by_tag_name( "tbody").find_elements_by_tag_name("td") assert "default" in tbody_td[1].text assert (len( tbody_td[1].find_elements_by_class_name("badge-rdltr-small")) == 1) assert "Default category" in tbody_td[2].text assert "0" in tbody_td[3].text assert len(tbody_td[4].find_elements_by_class_name("fa-trash")) == 0
def test_settings_display_categories(selenium: WebDriver) -> None: register_valid_user(selenium) menus = selenium.find_elements_by_class_name('menu') menus[1].click() box = selenium.find_element_by_class_name('rdltr-box') buttons = box.find_elements_by_tag_name('button') assert 'Categories' in buttons[0].text assert 'Tags' in buttons[1].text assert 'Back to home' in buttons[2].text buttons[0].click() container = selenium.find_element_by_class_name('container') rows = container.find_elements_by_class_name('row') buttons = rows[0].find_elements_by_tag_name('button') back_to_settings = buttons[0] assert 'Back to settings' in back_to_settings.text assert 'Add a category' in buttons[1].text rows[1].find_elements_by_tag_name('input') assert 'Search' in rows[1].find_element_by_tag_name('span').text # default category should exist. this category can not be deleted table = rows[2].find_element_by_tag_name('table') thead_th = table.find_element_by_tag_name( 'thead').find_elements_by_tag_name('th') assert 'Id' in thead_th[0].text assert 'Name' in thead_th[1].text assert 'Description' in thead_th[2].text assert 'Nb articles' in thead_th[3].text assert 'Action' in thead_th[4].text tbody_td = table.find_element_by_tag_name( 'tbody').find_elements_by_tag_name('td') assert 'default' in tbody_td[1].text assert (len( tbody_td[1].find_elements_by_class_name('badge-rdltr-small')) == 1) assert 'Default category' in tbody_td[2].text assert '0' in tbody_td[3].text assert len(tbody_td[4].find_elements_by_class_name('fa-trash')) == 0
def test_add_article_from_bookmark_unauthenticated_user(selenium, mock_server): user_infos = register_valid_user(selenium) menus = selenium.find_elements_by_class_name('menu') menus[2].click() bookmark_url = f'http://localhost:{mock_server.port}/html_ok' selenium.get(f"{URL}bookmarklet?url={parse.quote(bookmark_url)}") email = selenium.find_element_by_id('email') email.send_keys(user_infos.get('email')) password = selenium.find_element_by_id('password') password.send_keys(user_infos.get('password')) submit_button = selenium.find_element_by_tag_name('button') submit_button.click() selenium.implicitly_wait(1) check_article(selenium, bookmark_url)
def test_logout_and_login_ok(selenium): user_infos = register_valid_user(selenium) nav = selenium.find_element_by_tag_name('nav') nav_text = nav.text assert "Register" not in nav_text assert "Log in" not in nav_text assert "Logout" in nav_text menus = nav.find_elements_by_class_name('menu') menus[2].click() login_valid_user(selenium, user_infos) nav = selenium.find_element_by_tag_name('nav') nav_text = nav.text assert user_infos['username'] in nav_text assert "Settings" in nav_text assert "Logout" in nav_text
def test_logout_and_login_ok(selenium: WebDriver) -> None: user_infos = register_valid_user(selenium) nav = selenium.find_element_by_tag_name('nav') nav_text = nav.text assert 'Register' not in nav_text assert 'Log in' not in nav_text assert 'Logout' in nav_text menus = nav.find_elements_by_class_name('menu') menus[2].click() login_valid_user(selenium, user_infos) nav = selenium.find_element_by_tag_name('nav') nav_text = nav.text assert user_infos['username'] in nav_text assert 'Settings' in nav_text assert 'Logout' in nav_text
def test_add_article_from_bookmark(selenium, mock_server): register_valid_user(selenium) bookmark_url = f'http://localhost:{mock_server.port}/html_ok' rdltr_url = f"{URL}bookmarklet?url={parse.quote(bookmark_url)}" selenium.get(rdltr_url) check_article(selenium, bookmark_url)