From cec4c92a29d59221d71ac0e45d511927b9df3233 Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Thu, 24 Mar 2022 21:31:28 +0530 Subject: [PATCH] fix(test): Update file tests for the new API changes --- frappe/core/doctype/file/test_file.py | 61 +++++++++++++++------------ 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/frappe/core/doctype/file/test_file.py b/frappe/core/doctype/file/test_file.py index a130f2caff..f6310ef454 100644 --- a/frappe/core/doctype/file/test_file.py +++ b/frappe/core/doctype/file/test_file.py @@ -9,6 +9,7 @@ import frappe from frappe import _ from frappe.core.api.file import create_new_folder, get_attached_images, get_files_in_folder, move_file, unzip_file from frappe.core.doctype.file.file import File +from frappe.exceptions import ValidationError from frappe.utils import get_files_path test_content1 = 'Hello' @@ -46,7 +47,7 @@ class TestBase64File(unittest.TestCase): def setUp(self): self.attached_to_doctype, self.attached_to_docname = make_test_doc() self.test_content = base64.b64encode(test_content1.encode('utf-8')) - _file = frappe.get_doc({ + _file: File = frappe.get_doc({ "doctype": "File", "file_name": "test_base64.txt", "attached_to_doctype": self.attached_to_doctype, @@ -297,7 +298,7 @@ class TestFile(unittest.TestCase): _file.save() folder = frappe.get_doc("File", "Home/Test Folder 1/Test Folder 3") - self.assertRaises(frappe.ValidationError, folder.delete) + self.assertRaises(ValidationError, folder.delete) def test_same_file_url_update(self): attached_to_doctype1, attached_to_docname1 = make_test_doc() @@ -336,21 +337,20 @@ class TestFile(unittest.TestCase): file1 = frappe.get_doc({ "doctype": "File", "file_name": 'parent_dir.txt', - "attached_to_doctype": "", - "attached_to_name": "", "is_private": 1, - "content": test_content1}).insert() + "content": test_content1, + }).insert() file1.file_url = '/private/files/../test.txt' - self.assertRaises(frappe.exceptions.ValidationError, file1.save) + self.assertRaises(ValidationError, file1.save) # No validation to see if file exists file1.reload() file1.file_url = '/private/files/parent_dir2.txt' - file1.save() + self.assertRaises(OSError, file1.save) def test_file_url_validation(self): - test_file = frappe.get_doc({ + test_file: File = frappe.get_doc({ "doctype": "File", "file_name": 'logo', "file_url": 'https://frappe.io/files/frappe.png' @@ -360,11 +360,11 @@ class TestFile(unittest.TestCase): # bad path test_file.file_url = "/usr/bin/man" - self.assertRaisesRegex(frappe.exceptions.ValidationError, "URL must start with http:// or https://", test_file.validate) + self.assertRaisesRegex(ValidationError, f"Cannot access file path {test_file.file_url}", test_file.validate) test_file.file_url = None test_file.file_name = "/usr/bin/man" - self.assertRaisesRegex(frappe.exceptions.ValidationError, "There is some problem with the file url", test_file.validate) + self.assertRaisesRegex(ValidationError, "There is some problem with the file url", test_file.validate) test_file.file_url = None test_file.file_name = "_file" @@ -372,7 +372,7 @@ class TestFile(unittest.TestCase): test_file.file_url = None test_file.file_name = "/private/files/_file" - self.assertRaisesRegex(IOError, "does not exist", test_file.validate) + self.assertRaisesRegex(ValidationError, "File name cannot have", test_file.validate) def test_make_thumbnail(self): # test web image @@ -431,29 +431,29 @@ class TestFile(unittest.TestCase): "doctype": "File", "file_url": frappe.utils.get_url('/_test/assets/image.jpg'), }).insert(ignore_permissions=True) - self.assertRaisesRegex(frappe.exceptions.ValidationError, 'not a zip file', test_file.unzip) + self.assertRaisesRegex(ValidationError, 'not a zip file', test_file.unzip) class TestAttachment(unittest.TestCase): test_doctype = 'Test For Attachment' - def setUp(self): - if frappe.db.exists('DocType', self.test_doctype): - return - + @classmethod + def setUpClass(cls): frappe.get_doc( doctype='DocType', - name=self.test_doctype, + name=cls.test_doctype, module='Custom', custom=1, fields=[ {'label': 'Title', 'fieldname': 'title', 'fieldtype': 'Data'}, {'label': 'Attachment', 'fieldname': 'attachment', 'fieldtype': 'Attach'}, - ] - ).insert() + ], + ).insert(ignore_if_duplicate=True) - def tearDown(self): - frappe.delete_doc('DocType', self.test_doctype) + @classmethod + def tearDownClass(cls): + frappe.db.rollback() + frappe.delete_doc('DocType', cls.test_doctype) def test_file_attachment_on_update(self): doc = frappe.get_doc( @@ -465,8 +465,7 @@ class TestAttachment(unittest.TestCase): 'doctype': 'File', 'file_name': 'test_attach.txt', 'content': 'Test Content' - }) - file.save() + }).save() doc.attachment = file.file_url doc.save() @@ -483,9 +482,10 @@ class TestAttachment(unittest.TestCase): class TestAttachmentsAccess(unittest.TestCase): + def setUp(self) -> None: + frappe.db.delete("File", {"is_folder": False}) def test_attachments_access(self): - frappe.set_user('test4@example.com') self.attached_to_doctype, self.attached_to_docname = make_test_doc() @@ -536,6 +536,7 @@ class TestAttachmentsAccess(unittest.TestCase): self.assertIn('test_user.txt', system_manager_attachments_files) self.assertIn('test_user.txt', user_attachments_files) + def tearDown(self) -> None: frappe.set_user('Administrator') frappe.db.rollback() @@ -614,16 +615,20 @@ class TestFileOptimization(unittest.TestCase): file_path = frappe.get_app_path("frappe", "tests/data/sample_image_for_optimization.jpg") with open(file_path, "rb") as f: file_content = f.read() - test_file = frappe.get_doc({ + + test_file: File = frappe.get_doc({ "doctype": "File", "file_name": "sample_image_for_optimization.jpg", - "content": file_content + "content": file_content, }).insert() + test_file.flags.new_file = False # so that we can get away with committing this for now image_path = test_file.get_full_path() - size_before_optimization = os.stat(image_path).st_size + size_before_optimization = os.stat(image_path).st_size test_file.optimize_file() - frappe.db.rollback() + + test_file.on_rollback() + size_after_rollback = os.stat(image_path).st_size self.assertEqual(size_before_optimization, size_after_rollback) test_file.delete()