# SPDX-License-Identifier: CC0-1.0 """ Haketilo unit tests - caching responses from remote repositories """ # This file is part of Haketilo # # Copyright (C) 2022 Wojtek Kosior # # This program is free software: you can redistribute it and/or modify # it under the terms of the CC0 1.0 Universal License as published by # the Creative Commons Corporation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # CC0 1.0 Universal License for more details. import pytest import json from selenium.webdriver.support.ui import WebDriverWait from ..script_loader import load_script from .utils import * def content_script(): script = load_script('content/repo_query_cacher.js') return f'{script}; {tab_id_asker}; start();' def bypass_js(): return load_script('background/CORS_bypass_server.js') + '; start();' def fetch_through_cache(driver, tab_id, url): return driver.execute_script( ''' return browser.tabs.sendMessage(arguments[0], ["repo_query", arguments[1]]); ''', tab_id, url) @pytest.mark.ext_data({ 'content_script': content_script, 'background_script': lambda: bypass_js() + ';' + tab_id_responder }) @pytest.mark.usefixtures('webextension') def test_repo_query_cacher_normal_use(driver, execute_in_page): """ Test if HTTP requests made through our cacher return correct results. """ tab_id = run_content_script_in_new_window(driver, 'https://gotmyowndoma.in') result = fetch_through_cache(driver, tab_id, 'https://counterdoma.in/') assert set(result.keys()) == {'ok', 'status', 'json'} counter_initial = result['json']['counter'] assert type(counter_initial) is int for i in range(2): result = fetch_through_cache(driver, tab_id, 'https://counterdoma.in/') assert result['json']['counter'] == counter_initial tab_id = run_content_script_in_new_window(driver, 'https://gotmyowndoma.in') result = fetch_through_cache(driver, tab_id, 'https://counterdoma.in/') assert result['json']['counter'] == counter_initial + 1 for i in range(2): result = fetch_through_cache(driver, tab_id, 'https://nxdoma.in/') assert set(result.keys()) == {'ok', 'status', 'error_json'} assert result['ok'] == False assert result['status'] == 404 for i in range(2): result = fetch_through_cache(driver, tab_id, 'bad://url') assert set(result.keys()) == {'error'} @pytest.mark.ext_data({ 'content_script': content_script, 'background_script': tab_id_responder }) @pytest.mark.usefixtures('webextension') def test_repo_query_cacher_bgscript_error(driver): """ Test if our cacher properly reports errors in communication with the background script. """ tab_id = run_content_script_in_new_window(driver, 'https://gotmyowndoma.in') result = fetch_through_cache(driver, tab_id, 'https://counterdoma.in/') assert set(result.keys()) == {'error'}