mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-03-11 09:04:54 +00:00
In some cases, we are visiting / and expecting to reach the home page of FreedomBox UI. When due to failed tests in config app, the home page is set to something other than FreedomBox UI, these tests fail. Fix this by visiting /freedombox explicitly instead. Tests: - When hope page is set to Syncthing, kiwix functional tests pass. Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
121 lines
4.2 KiB
Python
121 lines
4.2 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""
|
|
Functional, browser based tests for Kiwix app.
|
|
"""
|
|
|
|
import pathlib
|
|
from time import sleep
|
|
|
|
import pytest
|
|
|
|
from plinth.tests import functional
|
|
|
|
from .test_privileged import ZIM_ID
|
|
|
|
pytestmark = [pytest.mark.apps, pytest.mark.sso, pytest.mark.kiwix]
|
|
|
|
_default_url = functional.config['DEFAULT']['url']
|
|
|
|
_data_dir = pathlib.Path(__file__).parent / 'data'
|
|
|
|
|
|
class TestKiwixApp(functional.BaseAppTests):
|
|
"""Basic functional tests for Kiwix app."""
|
|
|
|
app_name = 'kiwix'
|
|
has_service = True
|
|
has_web = True
|
|
|
|
def test_add_delete_package(self, session_browser):
|
|
"""Test adding/deleting content package to the library."""
|
|
functional.app_enable(session_browser, 'kiwix')
|
|
|
|
zim_file = _data_dir / 'FreedomBox.zim'
|
|
_add_package(session_browser, str(zim_file))
|
|
assert _is_package_listed(session_browser, 'freedombox')
|
|
assert _is_package_available(session_browser, 'FreedomBox')
|
|
|
|
_delete_package(session_browser, ZIM_ID)
|
|
assert not _is_package_listed(session_browser, 'freedombox')
|
|
assert not _is_package_available(session_browser, 'FreedomBox')
|
|
|
|
@pytest.mark.backups
|
|
def test_backup_restore(self, session_browser):
|
|
"""Test backing up and restoring."""
|
|
functional.app_enable(session_browser, 'kiwix')
|
|
|
|
zim_file = _data_dir / 'FreedomBox.zim'
|
|
_add_package(session_browser, str(zim_file))
|
|
functional.backup_create(session_browser, 'kiwix', 'test_kiwix')
|
|
|
|
_delete_package(session_browser, ZIM_ID)
|
|
functional.backup_restore(session_browser, 'kiwix', 'test_kiwix')
|
|
|
|
assert _is_package_listed(session_browser, 'freedombox')
|
|
assert _is_package_available(session_browser, 'FreedomBox')
|
|
|
|
def test_add_invalid_zim_file(self, session_browser):
|
|
"""Test handling of invalid zim files."""
|
|
functional.app_enable(session_browser, 'kiwix')
|
|
|
|
zim_file = _data_dir / 'invalid.zim'
|
|
_add_package(session_browser, str(zim_file))
|
|
|
|
assert not _is_package_listed(session_browser, 'invalid')
|
|
|
|
def test_anonymous_access(self, session_browser):
|
|
"""Test anonymous access to Kiwix library."""
|
|
functional.app_enable(session_browser, 'kiwix')
|
|
functional.logout(session_browser)
|
|
assert functional.eventually(_shortcut_exists, args=[session_browser])
|
|
assert functional.eventually(_is_anonymous_read_allowed,
|
|
args=[session_browser])
|
|
|
|
|
|
def _add_package(browser, file_name):
|
|
"""Add a package by uploading the ZIM file in kiwix app page."""
|
|
browser.links.find_by_href(
|
|
'/freedombox/apps/kiwix/package/add/').first.click()
|
|
browser.attach_file('kiwix-file', file_name)
|
|
functional.submit(browser, form_class='form-kiwix')
|
|
|
|
|
|
def _is_package_available(browser, title) -> bool:
|
|
"""Check whether a ZIM file is available in Kiwix web interface."""
|
|
browser.visit(f'{_default_url}/kiwix')
|
|
sleep(1) # Allow time for the books to appear
|
|
titles = browser.find_by_id('book__title')
|
|
return any(element.value == title for element in titles)
|
|
|
|
|
|
def _is_package_listed(browser, name) -> bool:
|
|
"""Return whether a content package is list in kiwix app page."""
|
|
functional.nav_to_module(browser, 'kiwix')
|
|
links_found = browser.links.find_by_partial_href(f'/kiwix/viewer#{name}')
|
|
return len(links_found) == 1
|
|
|
|
|
|
def _delete_package(browser, zim_id):
|
|
"""Delete a content package from the kiwix app page."""
|
|
functional.nav_to_module(browser, 'kiwix')
|
|
link = browser.links.find_by_href(
|
|
f'/freedombox/apps/kiwix/package/{zim_id}/delete/')
|
|
if not link:
|
|
raise ValueError('ZIM file missing!')
|
|
|
|
link.first.click()
|
|
functional.submit(browser, form_class='form-delete')
|
|
|
|
|
|
def _is_anonymous_read_allowed(browser) -> bool:
|
|
"""Check if Kiwix library page can be accessed without logging in."""
|
|
functional.visit(browser, '/kiwix')
|
|
return browser.is_element_present_by_id('kiwixfooter')
|
|
|
|
|
|
def _shortcut_exists(browser) -> bool:
|
|
"""Check that the Kiwix shortcut exists on the front page."""
|
|
browser.visit(_default_url + '/freedombox/')
|
|
links_found = browser.links.find_by_href('/kiwix')
|
|
return len(links_found) == 1
|