FreedomBox/freedombox/modules/kiwix/tests/test_privileged.py
Sunil Mohan Adapa c700e0866e
*: Additional import path related changes
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-08-28 07:35:37 -04:00

87 lines
2.5 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Test module for Kiwix actions.
"""
import pathlib
import shutil
from unittest.mock import patch
import pytest
import freedombox.settings
from freedombox.modules.kiwix import privileged
pytestmark = pytest.mark.usefixtures('mock_privileged')
privileged_modules_to_mock = ['freedombox.modules.kiwix.privileged']
EMPTY_LIBRARY_CONTENTS = '''<?xml version="1.0" encoding="UTF-8"?>
<library version="20110515">
</library>'''
ZIM_ID = 'bc4f8cdf-5626-2b13-3860-0033deddfbea'
@pytest.fixture(autouse=True)
def fixture_kiwix_home(tmp_path):
"""Create a new Kiwix home in a new temporary directory.
Initialize with a sample, valid library file.
"""
privileged.KIWIX_HOME = tmp_path / 'kiwix'
privileged.KIWIX_HOME.mkdir()
privileged.CONTENT_DIR = privileged.KIWIX_HOME / 'content'
privileged.CONTENT_DIR.mkdir()
privileged.LIBRARY_FILE = privileged.KIWIX_HOME / 'library_zim.xml'
source_file = pathlib.Path(__file__).parent / 'data/sample_library_zim.xml'
shutil.copy(source_file, privileged.LIBRARY_FILE)
@pytest.fixture(name='upload_dir')
def fixture_upload_dir(tmp_path):
"""Overwrite the Django upload path."""
old_value = freedombox.settings.FILE_UPLOAD_TEMP_DIR
freedombox.settings.FILE_UPLOAD_TEMP_DIR = tmp_path
yield tmp_path
freedombox.settings.FILE_UPLOAD_TEMP_DIR = old_value
@pytest.fixture(autouse=True)
def fixture_patch():
"""Patch some underlying methods."""
with patch('subprocess.check_call'), patch('subprocess.run'), patch(
'shutil.chown'):
yield
def test_add_package(upload_dir):
"""Test adding a content package to Kiwix."""
zim_file_name = 'wikipedia_en_all_maxi_2022-05.zim'
orig_file = upload_dir / zim_file_name
orig_file.touch()
privileged.add_package(zim_file_name, str(orig_file))
assert (privileged.KIWIX_HOME / 'content' / zim_file_name).exists()
assert not orig_file.exists()
def test_list_packages():
"""Test listing the content packages from a library file."""
content = privileged.list_packages()
assert content[ZIM_ID] == {
'title': 'FreedomBox',
'description': 'A sample content archive',
'path': 'freedombox'
}
def test_delete_package():
"""Test deleting one content package."""
zim_file = privileged.CONTENT_DIR / 'FreedomBox.zim'
zim_file.touch()
privileged.delete_package(ZIM_ID)
assert not zim_file.exists()
# Cannot check that the book is removed from library_zim.xml