mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-02-18 08:33:41 +00:00
- The configuration module defaults to values in the production configuration file. - If the file is found, it is read and the read values overwrite the defaults. If the file is not found, no error is raised. This allows us to not ship the configuration file. User may create the configuration if they want to change the defaults. This eases upgrades when configuration is edited. This also make FreedomBox robust to deployments where /etc/ is not populated by default such as OSTree. It is also a good practice for daemons as followed by the likes of systemd. - If the file partly populated only the values read override the defaults and the remaining values don't change. This allows the user to write simpler configuration file. Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
114 lines
3.1 KiB
Python
114 lines
3.1 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""
|
|
pytest configuration for all tests.
|
|
"""
|
|
|
|
import importlib
|
|
import os
|
|
import pathlib
|
|
|
|
import pytest
|
|
|
|
try:
|
|
importlib.import_module('pytest_bdd')
|
|
_bdd_available = True
|
|
except ImportError:
|
|
_bdd_available = False
|
|
else:
|
|
from plinth.tests.functional.step_definitions import *
|
|
|
|
|
|
def pytest_ignore_collect(path, config):
|
|
"""Return True to ignore functional tests."""
|
|
if path.basename == 'test_functional.py':
|
|
return not _bdd_available
|
|
|
|
|
|
def pytest_addoption(parser):
|
|
"""Add a command line option to run functional tests."""
|
|
parser.addoption('--include-functional', action='store_true',
|
|
default=False, help='Run functional tests also')
|
|
|
|
|
|
def pytest_collection_modifyitems(config, items):
|
|
"""Filter out functional tests unless --include-functional is passed."""
|
|
if config.getoption('--include-functional'):
|
|
# Option provided on command line, no filtering
|
|
return
|
|
|
|
skip_functional = pytest.mark.skip(
|
|
reason='--include-functional not provided')
|
|
for item in items:
|
|
if 'functional' in item.keywords or (
|
|
item.parent.fspath.basename
|
|
and item.parent.fspath.basename == 'test_functional.py'):
|
|
item.add_marker(skip_functional)
|
|
|
|
|
|
@pytest.fixture(name='load_cfg')
|
|
def fixture_load_cfg():
|
|
"""Load test configuration."""
|
|
from plinth import cfg
|
|
|
|
root_dir = pathlib.Path(__file__).resolve().parent
|
|
test_data_dir = root_dir / 'plinth' / 'tests' / 'data'
|
|
cfg_file = test_data_dir / 'etc' / 'plinth' / 'plinth.config'
|
|
cfg.read(str(cfg_file), str(root_dir))
|
|
yield cfg
|
|
cfg.read(str(cfg_file), str(root_dir))
|
|
|
|
|
|
@pytest.fixture(name='develop_mode')
|
|
def fixture_develop_mode(load_cfg):
|
|
"""Turn on development mode for a test."""
|
|
load_cfg.develop = True
|
|
yield
|
|
load_cfg.develop = False
|
|
|
|
|
|
@pytest.fixture(name='needs_root', scope='session')
|
|
def fixture_needs_root():
|
|
"""Skip test if not running in root mode."""
|
|
if os.geteuid() != 0:
|
|
pytest.skip('Needs to be root')
|
|
|
|
|
|
@pytest.fixture(name='needs_not_root', scope='session')
|
|
def fixture_needs_not_root():
|
|
"""Skip test if running in root mode."""
|
|
if os.geteuid() == 0:
|
|
pytest.skip('Needs not to be root')
|
|
|
|
|
|
@pytest.fixture(name='needs_sudo')
|
|
def fixture_needs_sudo():
|
|
"""Skip test if sudo command is not available."""
|
|
if not os.path.isfile('/usr/bin/sudo'):
|
|
pytest.skip('Needs sudo command installed.')
|
|
|
|
|
|
@pytest.fixture(scope='session')
|
|
def splinter_selenium_implicit_wait():
|
|
"""Disable implicit waiting."""
|
|
return 0
|
|
|
|
|
|
@pytest.fixture(scope='session')
|
|
def splinter_wait_time():
|
|
"""Disable explicit waiting."""
|
|
return 0.01
|
|
|
|
|
|
@pytest.fixture(scope='session')
|
|
def splinter_browser_load_condition():
|
|
"""When a page it loaded, wait until <body> is available."""
|
|
|
|
def _load_condition(browser):
|
|
if browser.url == 'about:blank':
|
|
return True
|
|
|
|
ready_state = browser.execute_script('return document.readyState;')
|
|
return ready_state == 'complete'
|
|
|
|
return _load_condition
|