Update the ZipArchive class to work with badly encoded filenames. GitLab issue #651. Thanks to Fabian (@ruffy91) for the report. Squashed commit of the following: Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com> commit 8ded3d09af16ea9457cbeef89ac4c72b3dde1fb5 Merge:7889ff64d9778c48d11dAuthor: Roberto Rosario <roberto.rosario@mayan-edms.com> Date: Mon Dec 16 04:25:57 2019 -0400 Merge branch 'versions/micro' into features/compressed_files_refactor commit7889ff64d9Author: Roberto Rosario <roberto.rosario@mayan-edms.com> Date: Tue Oct 1 00:20:50 2019 -0400 Document zip file encoding issues Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com> Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
82 lines
2.9 KiB
Python
82 lines
2.9 KiB
Python
from __future__ import unicode_literals
|
|
|
|
from mayan.apps.common.tests.base import BaseTestCase
|
|
|
|
from ..compressed_files import Archive, TarArchive, ZipArchive
|
|
|
|
from .literals import (
|
|
TEST_ARCHIVE_ZIP_CP437_MEMBER_PATH,
|
|
TEST_ARCHIVE_ZIP_SPECIAL_CHARACTERS_FILENAME_MEMBER_PATH,
|
|
TEST_COMPRESSED_FILE_CONTENTS, TEST_FILE_CONTENTS_1, TEST_FILE3_PATH,
|
|
TEST_FILENAME1, TEST_FILENAME3, TEST_TAR_BZ2_FILE_PATH,
|
|
TEST_TAR_FILE_PATH, TEST_TAR_GZ_FILE_PATH, TEST_ZIP_FILE_PATH
|
|
)
|
|
|
|
|
|
class TarArchiveClassTestCase(BaseTestCase):
|
|
archive_path = TEST_TAR_FILE_PATH
|
|
cls = TarArchive
|
|
filename = TEST_FILENAME3
|
|
file_path = TEST_FILE3_PATH
|
|
members_list = TEST_COMPRESSED_FILE_CONTENTS
|
|
member_name = TEST_FILENAME1
|
|
member_contents = TEST_FILE_CONTENTS_1
|
|
|
|
def test_add_file(self):
|
|
archive = self.cls()
|
|
archive.create()
|
|
with open(self.file_path, mode='rb') as file_object:
|
|
archive.add_file(file_object=file_object, filename=self.filename)
|
|
self.assertTrue(archive.members(), [self.filename])
|
|
|
|
def test_open(self):
|
|
with open(self.archive_path, mode='rb') as file_object:
|
|
archive = Archive.open(file_object=file_object)
|
|
self.assertTrue(isinstance(archive, self.cls))
|
|
|
|
def test_members(self):
|
|
with open(self.archive_path, mode='rb') as file_object:
|
|
archive = Archive.open(file_object=file_object)
|
|
self.assertEqual(archive.members(), self.members_list)
|
|
|
|
def test_member_contents(self):
|
|
with open(self.archive_path, mode='rb') as file_object:
|
|
archive = Archive.open(file_object=file_object)
|
|
self.assertEqual(
|
|
archive.member_contents(filename=self.member_name),
|
|
self.member_contents
|
|
)
|
|
|
|
def test_open_member(self):
|
|
with open(self.archive_path, mode='rb') as file_object:
|
|
archive = Archive.open(file_object=file_object)
|
|
file_object = archive.open_member(filename=self.member_name)
|
|
self.assertEqual(
|
|
file_object.read(), self.member_contents
|
|
)
|
|
|
|
|
|
class ZipArchiveClassTestCase(TarArchiveClassTestCase):
|
|
archive_path = TEST_ZIP_FILE_PATH
|
|
cls = ZipArchive
|
|
|
|
def test_open_member_with_special_characters_filename(self):
|
|
with open(TEST_ARCHIVE_ZIP_SPECIAL_CHARACTERS_FILENAME_MEMBER_PATH, mode='rb') as file_object:
|
|
archive = Archive.open(file_object=file_object)
|
|
list(archive.get_members())
|
|
|
|
def test_open_cp437_member(self):
|
|
with open(TEST_ARCHIVE_ZIP_CP437_MEMBER_PATH, mode='rb') as file_object:
|
|
archive = Archive.open(file_object=file_object)
|
|
list(archive.get_members())
|
|
|
|
|
|
class TarGzArchiveClassTestCase(TarArchiveClassTestCase):
|
|
archive_path = TEST_TAR_GZ_FILE_PATH
|
|
cls = TarArchive
|
|
|
|
|
|
class TarBz2ArchiveClassTestCase(TarArchiveClassTestCase):
|
|
archive_path = TEST_TAR_BZ2_FILE_PATH
|
|
cls = TarArchive
|