diff options
author | Alexandre Flament <alex@al-f.net> | 2021-09-02 16:01:34 +0200 |
---|---|---|
committer | Alexandre Flament <alex@al-f.net> | 2021-09-02 16:01:34 +0200 |
commit | b9c73fb69784726608d1a2d72b7a17f777d30b9d (patch) | |
tree | e1446c28afb7c49328ae7f9279b11c072c5b52c6 /tests/robot | |
parent | 065b4dab56bf3c374cab7896314168e9d3106171 (diff) | |
download | searxng-b9c73fb69784726608d1a2d72b7a17f777d30b9d.tar.gz searxng-b9c73fb69784726608d1a2d72b7a17f777d30b9d.zip |
[mod] move searx/testing.py to the tests directory
move robot tests to tests.robot
manage calls "python -m tests.robot"
Diffstat (limited to 'tests/robot')
-rw-r--r-- | tests/robot/__init__.py | 76 | ||||
-rw-r--r-- | tests/robot/__main__.py | 78 | ||||
-rw-r--r-- | tests/robot/settings_robot.yml | 62 | ||||
-rw-r--r-- | tests/robot/test_webapp.py | 78 |
4 files changed, 218 insertions, 76 deletions
diff --git a/tests/robot/__init__.py b/tests/robot/__init__.py index 7c08a91bd..e69de29bb 100644 --- a/tests/robot/__init__.py +++ b/tests/robot/__init__.py @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- - -from time import sleep - -url = "http://localhost:11111/" - - -def test_index(browser): - # Visit URL - browser.visit(url) - assert browser.is_text_present('about') - - -def test_404(browser): - # Visit URL - browser.visit(url + 'missing_link') - assert browser.is_text_present('Page not found') - - -def test_about(browser): - browser.visit(url) - browser.click_link_by_text('about') - assert browser.is_text_present('Why use it?') - - -def test_preferences(browser): - browser.visit(url) - browser.click_link_by_text('preferences') - assert browser.is_text_present('Preferences') - assert browser.is_text_present('Cookies') - - assert browser.is_element_present_by_xpath('//label[@for="checkbox_dummy"]') - - -def test_preferences_engine_select(browser): - browser.visit(url) - browser.click_link_by_text('preferences') - - assert browser.is_element_present_by_xpath('//a[@href="#tab_engine"]') - browser.find_by_xpath('//a[@href="#tab_engine"]').first.click() - - assert not browser.find_by_xpath('//input[@id="engine_general_dummy__general"]').first.checked - browser.find_by_xpath('//label[@for="engine_general_dummy__general"]').first.check() - browser.find_by_xpath('//input[@value="save"]').first.click() - - # waiting for the redirect - without this the test is flaky.. - sleep(1) - - browser.visit(url) - browser.click_link_by_text('preferences') - browser.find_by_xpath('//a[@href="#tab_engine"]').first.click() - - assert browser.find_by_xpath('//input[@id="engine_general_dummy__general"]').first.checked - - -def test_preferences_locale(browser): - browser.visit(url) - browser.click_link_by_text('preferences') - - browser.find_by_xpath('//a[@href="#tab_ui"]').first.click() - browser.select('locale', 'hu') - browser.find_by_xpath('//input[@value="save"]').first.click() - - # waiting for the redirect - without this the test is flaky.. - sleep(1) - - browser.visit(url) - browser.click_link_by_text('beállítások') - browser.is_text_present('Beállítások') - - -def test_search(browser): - browser.visit(url) - browser.fill('q', 'test search query') - browser.find_by_xpath('//button[@type="submit"]').first.click() - assert browser.is_text_present('didn\'t find any results') diff --git a/tests/robot/__main__.py b/tests/robot/__main__.py new file mode 100644 index 000000000..e435f512a --- /dev/null +++ b/tests/robot/__main__.py @@ -0,0 +1,78 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# lint: pylint +"""Shared testing code.""" + +# pylint: disable=missing-function-docstring + +import sys +import os +import subprocess +import traceback +import pathlib + +from splinter import Browser + +import tests as searx_tests +from tests.robot import test_webapp + + +class SearxRobotLayer(): + """Searx Robot Test Layer""" + + def setUp(self): + os.setpgrp() # create new process group, become its leader + + tests_path = pathlib.Path(searx_tests.__file__).resolve().parent + + # get program paths + webapp = str(tests_path.parent / 'searx' / 'webapp.py') + exe = 'python' + + # The Flask app is started by Flask.run(...), don't enable Flask's debug + # mode, the debugger from Flask will cause wired process model, where + # the server never dies. Further read: + # + # - debug mode: https://flask.palletsprojects.com/quickstart/#debug-mode + # - Flask.run(..): https://flask.palletsprojects.com/api/#flask.Flask.run + + os.environ['SEARX_DEBUG'] = '0' + + # set robot settings path + os.environ['SEARX_SETTINGS_PATH'] = str(tests_path / 'robot' / 'settings_robot.yml') + + # run the server + self.server = subprocess.Popen( # pylint: disable=consider-using-with + [exe, webapp], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT + ) + if hasattr(self.server.stdout, 'read1'): + print(self.server.stdout.read1(1024).decode()) + + def tearDown(self): + os.kill(self.server.pid, 9) + # remove previously set environment variable + del os.environ['SEARX_SETTINGS_PATH'] + + +def run_robot_tests(tests): + print('Running {0} tests'.format(len(tests))) + for test in tests: + with Browser('firefox', headless=True, profile_preferences={'intl.accept_languages': 'en'}) as browser: + test(browser) + + +def main(): + test_layer = SearxRobotLayer() + try: + test_layer.setUp() + run_robot_tests([getattr(test_webapp, x) for x in dir(test_webapp) if x.startswith('test_')]) + except Exception: # pylint: disable=broad-except + print('Error occured: {0}'.format(traceback.format_exc())) + sys.exit(1) + finally: + test_layer.tearDown() + + +if __name__ == '__main__': + main() diff --git a/tests/robot/settings_robot.yml b/tests/robot/settings_robot.yml new file mode 100644 index 000000000..ca65449f7 --- /dev/null +++ b/tests/robot/settings_robot.yml @@ -0,0 +1,62 @@ +general: + debug: false + instance_name: "searx_test" + +brand: + git_url: https://github.com/searxng/searxng + git_branch: master + issue_url: https://github.com/searxng/searxng/issues + new_issue_url: https://github.com/searxng/searxng/issues/new + docs_url: https://searxng.github.io/searxng + public_instances: https://searx.space + wiki_url: https://github.com/searxng/searxng/wiki + +search: + language: "all" + +server: + port: 11111 + bind_address: 127.0.0.1 + secret_key: "changedultrasecretkey" + base_url: false + http_protocol_version: "1.0" + +ui: + static_path: "" + templates_path: "" + default_theme: oscar + +preferences: + lock: [] + +outgoing: + request_timeout: 1.0 # seconds + useragent_suffix: "" + +engines: + - name: general dummy + engine: dummy + categories: general + shortcut: gd + + - name: dummy dummy + engine: dummy + categories: dummy + shortcut: dd + +locales: + en: English + hu: Magyar + +doi_resolvers: + oadoi.org: 'https://oadoi.org/' + doi.org: 'https://doi.org/' + doai.io: 'https://dissem.in/' + sci-hub.se: 'https://sci-hub.se/' + sci-hub.do: 'https://sci-hub.do/' + scihubtw.tw: 'https://scihubtw.tw/' + sci-hub.st: 'https://sci-hub.st/' + sci-hub.bar: 'https://sci-hub.bar/' + sci-hub.it.nf: 'https://sci-hub.it.nf/' + +default_doi_resolver: 'oadoi.org' diff --git a/tests/robot/test_webapp.py b/tests/robot/test_webapp.py new file mode 100644 index 000000000..cc1550c36 --- /dev/null +++ b/tests/robot/test_webapp.py @@ -0,0 +1,78 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# lint: pylint +# pylint: disable=missing-module-docstring,missing-function-docstring + +from time import sleep + +url = "http://localhost:11111/" + + +def test_index(browser): + # Visit URL + browser.visit(url) + assert browser.is_text_present('about') + + +def test_404(browser): + # Visit URL + browser.visit(url + 'missing_link') + assert browser.is_text_present('Page not found') + + +def test_about(browser): + browser.visit(url) + browser.click_link_by_text('about') + assert browser.is_text_present('Why use it?') + + +def test_preferences(browser): + browser.visit(url) + browser.click_link_by_text('preferences') + assert browser.is_text_present('Preferences') + assert browser.is_text_present('Cookies') + + assert browser.is_element_present_by_xpath('//label[@for="checkbox_dummy"]') + + +def test_preferences_engine_select(browser): + browser.visit(url) + browser.click_link_by_text('preferences') + + assert browser.is_element_present_by_xpath('//a[@href="#tab_engine"]') + browser.find_by_xpath('//a[@href="#tab_engine"]').first.click() + + assert not browser.find_by_xpath('//input[@id="engine_general_dummy__general"]').first.checked + browser.find_by_xpath('//label[@for="engine_general_dummy__general"]').first.check() + browser.find_by_xpath('//input[@value="save"]').first.click() + + # waiting for the redirect - without this the test is flaky.. + sleep(1) + + browser.visit(url) + browser.click_link_by_text('preferences') + browser.find_by_xpath('//a[@href="#tab_engine"]').first.click() + + assert browser.find_by_xpath('//input[@id="engine_general_dummy__general"]').first.checked + + +def test_preferences_locale(browser): + browser.visit(url) + browser.click_link_by_text('preferences') + + browser.find_by_xpath('//a[@href="#tab_ui"]').first.click() + browser.select('locale', 'hu') + browser.find_by_xpath('//input[@value="save"]').first.click() + + # waiting for the redirect - without this the test is flaky.. + sleep(1) + + browser.visit(url) + browser.click_link_by_text('beállítások') + browser.is_text_present('Beállítások') + + +def test_search(browser): + browser.visit(url) + browser.fill('q', 'test search query') + browser.find_by_xpath('//button[@type="submit"]').first.click() + assert browser.is_text_present('didn\'t find any results') |