diff options
author | Wojtek Kosior <koszko@koszko.org> | 2022-03-04 15:56:50 +0100 |
---|---|---|
committer | Wojtek Kosior <koszko@koszko.org> | 2022-03-04 16:36:44 +0100 |
commit | 587c1a88475c162b820d94c37e2cd18eb4422276 (patch) | |
tree | 96b30c12159f63b30c621e227df634056424f92f /test/haketilo_test/unit/test_settings.py | |
parent | 652e4476fdc2c7177145c0d993159f84a5f64c55 (diff) | |
download | browser-extension-587c1a88475c162b820d94c37e2cd18eb4422276.tar.gz browser-extension-587c1a88475c162b820d94c37e2cd18eb4422276.zip |
display an informative message in settings page if IndexedDB cannot be accessed
Diffstat (limited to 'test/haketilo_test/unit/test_settings.py')
-rw-r--r-- | test/haketilo_test/unit/test_settings.py | 61 |
1 files changed, 58 insertions, 3 deletions
diff --git a/test/haketilo_test/unit/test_settings.py b/test/haketilo_test/unit/test_settings.py index 7cdb76f..92ec4b6 100644 --- a/test/haketilo_test/unit/test_settings.py +++ b/test/haketilo_test/unit/test_settings.py @@ -20,18 +20,24 @@ Haketilo unit tests - entire settings page import pytest from .utils import * +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.common.by import By + from ..extension_crafting import ExtraHTML from ..script_loader import load_script from .utils import * -@pytest.mark.ext_data({ +ext_data = { 'background_script': broker_js, 'extra_html': ExtraHTML('html/settings.html', wrap_into_htmldoc=False) -}) +} + +@pytest.mark.ext_data(ext_data) @pytest.mark.usefixtures('webextension') def test_settings_page_tabs(driver, execute_in_page): """ - Test navigation throught the tabs of the settings page. + Test navigation through the tabs of the settings page. """ # First, put some sample data in IndexedDB. execute_in_page(load_script('common/indexeddb.js')) @@ -45,6 +51,13 @@ def test_settings_page_tabs(driver, execute_in_page): # Now navigate to settings page. testpage_url = driver.execute_script('return window.location.href;') driver.get(testpage_url.replace('testpage.html', 'html/settings.html')) + execute_in_page('init_settings_page();') + + WebDriverWait(driver, 10)\ + .until(EC.visibility_of_element_located((By.ID, "main_view"))) + + assert driver.find_elements_by_id('loader') == [] + assert not driver.find_element_by_id('indexeddb_error').is_displayed() names = ['blocking', 'mappings', 'resources', 'new_payload', 'repos'] tabs = dict([(n, driver.find_element_by_id(f'{n}_tab')) for n in names]) @@ -61,3 +74,45 @@ def test_settings_page_tabs(driver, execute_in_page): assert 'active_head' not in heads[tab_name_2].get_attribute('class') assert 'active_tab' not in tabs[tab_name_2].get_attribute('class') assert not tabs[tab_name_2].is_displayed() + +@pytest.mark.ext_data({ + **ext_data, + 'navigate_to': 'html/settings.html' +}) +@pytest.mark.usefixtures('webextension') +@pytest.mark.parametrize('incognito', [True, False]) +def test_settings_page_indexeddb_error(driver, execute_in_page, incognito): + """ + Test if failure to access IndexedDB in settings page results in the + appropriate message being shown. + """ + execute_in_page( + '''{ + /* + * Mock an unavailable IndexedDB. Calling onerror() without having set + * "errorCode" on the request is the behavior observed under Mozilla. + */ + indexedDB.open = function() { + const dummy_open_request = {}; + const dummy_event = {target: dummy_open_request}; + setTimeout(() => dummy_open_request.onerror(dummy_event), 0); + + return dummy_open_request; + } + + const dummy_tab = {incognito: arguments[0]}; + browser.tabs.getCurrent = () => Promise.resolve(dummy_tab); + + init_settings_page(); + }''', + incognito) + + WebDriverWait(driver, 10)\ + .until(EC.visibility_of_element_located((By.ID, 'indexeddb_error'))) + + assert driver.find_elements_by_id('loader') == [] + assert not driver.find_element_by_id('main_view').is_displayed() + + if incognito: + assert driver.find_element_by_id('indexeddb_private_mode_explanation')\ + .is_displayed() |