mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-28 08:03:36 +00:00
Kiwix content packages should be publicly accessible by default. Allow the frontpage shortcut to be accessed without logging in. Added a functional test to check that Kiwix library can be accessed without logging in. Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net> Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
120 lines
4.2 KiB
Python
120 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('/plinth/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'/plinth/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)
|
|
links_found = browser.links.find_by_href('/kiwix')
|
|
return len(links_found) == 1
|