James Valleroy 953d574692
monkeysphere: Convert functional tests to non-BDD python format
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2021-09-26 14:37:37 -07:00

101 lines
3.5 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Functional, browser based tests for monkeysphere app.
"""
import pytest
from plinth.tests import functional
pytestmark = [pytest.mark.system, pytest.mark.monkeysphere]
@pytest.fixture(scope='module', autouse=True)
def fixture_background(session_browser):
"""Login and install the app."""
functional.login(session_browser)
functional.set_advanced_mode(session_browser, True)
functional.install(session_browser, 'monkeysphere')
functional.set_domain_name(session_browser, 'mydomain.example')
yield
def test_import_ssh_keys(session_browser):
"""Test importing SSH keys."""
_import_key(session_browser, 'ssh', 'mydomain.example')
_assert_imported_key(session_browser, 'ssh', 'mydomain.example')
def test_import_https_keys(session_browser):
"""Test importing HTTPS keys."""
_import_key(session_browser, 'https', 'mydomain.example')
_assert_imported_key(session_browser, 'https', 'mydomain.example')
def test_publish_ssh_keys(session_browser):
"""Test publishing SSH keys."""
_import_key(session_browser, 'ssh', 'mydomain.example')
_publish_key(session_browser, 'ssh', 'mydomain.example')
def test_publish_https_keys(session_browser):
"""Test publishing HTTPS keys."""
_import_key(session_browser, 'https', 'mydomain.example')
_publish_key(session_browser, 'https', 'mydomain.example')
def test_backup_restore(session_browser):
"""Test backup and restore of keys"""
_import_key(session_browser, 'ssh', 'mydomain.example')
_import_key(session_browser, 'https', 'mydomain.example')
functional.backup_create(session_browser, 'monkeysphere',
'test_monkeysphere')
functional.backup_restore(session_browser, 'monkeysphere',
'test_monkeysphere')
_assert_imported_key(session_browser, 'ssh', 'mydomain.example')
_assert_imported_key(session_browser, 'https', 'mydomain.example')
def _find_domain(browser, key_type, domain_type, domain):
"""Iterate every domain of a given type which given key type."""
keys_of_type = browser.find_by_css(
'.monkeysphere-service-{}'.format(key_type))
for key_of_type in keys_of_type:
search_domains = key_of_type.find_by_css(
'.monkeysphere-{}-domain'.format(domain_type))
for search_domain in search_domains:
if search_domain.text == domain:
return key_of_type, search_domain
raise IndexError('Domain not found')
def _import_key(browser, key_type, domain):
"""Import a key of specified type for given domain into monkeysphere."""
try:
_assert_imported_key(browser, key_type, domain)
except IndexError:
pass
else:
return
key, _ = _find_domain(browser, key_type, 'importable', domain)
with functional.wait_for_page_update(browser):
key.find_by_css('.button-import').click()
def _assert_imported_key(browser, key_type, domain):
"""Assert that a key of specified type for given domain was imported.."""
functional.nav_to_module(browser, 'monkeysphere')
return _find_domain(browser, key_type, 'imported', domain)
def _publish_key(browser, key_type, domain):
"""Publish a key of specified type for given domain from monkeysphere."""
functional.nav_to_module(browser, 'monkeysphere')
key, _ = _find_domain(browser, key_type, 'imported', domain)
with functional.wait_for_page_update(browser):
key.find_by_css('.button-publish').click()
functional.wait_for_config_update(browser, 'monkeysphere')