mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-02-25 08:43:36 +00:00
Earlier, the uploaded ZIM file was being written to disk twice. Manual Test ----------- Without the changes in this commit, the English MediaWiki archive of 6.83 GB cannot be uploaded to the dev container of size 12 GB, since two temporary files are created. With the changes in this commit, the same file can be uploaded successfully and accessed using Kiwix reader. - Uploaded file has expected ownership and permissions. Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net> [sunil: Handle error for uploading duplicate content.] [sunil: Set root:root ownership on the uploaded file.] [sunil: Use the action utility for checking that the upload file and moving it.] Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: Veiko Aasa <veiko17@disroot.org>
87 lines
2.5 KiB
Python
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 plinth.settings
|
|
from plinth.modules.kiwix import privileged
|
|
|
|
pytestmark = pytest.mark.usefixtures('mock_privileged')
|
|
privileged_modules_to_mock = ['plinth.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 = plinth.settings.FILE_UPLOAD_TEMP_DIR
|
|
plinth.settings.FILE_UPLOAD_TEMP_DIR = tmp_path
|
|
yield tmp_path
|
|
plinth.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
|