# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors # License: MIT. See LICENSE import io from pypdf import PdfReader import frappe import frappe.utils.pdf as pdfgen from frappe.core.doctype.file.test_file import make_test_image_file from frappe.tests import IntegrationTestCase class TestPdf(IntegrationTestCase): @property def html(self): return """

This is a test html snippet

Test link 1 Test link 2 Test link 3
Please mail us at email
""" def runTest(self): self.test_read_options_from_html() def test_read_options_from_html(self): _, html_options = pdfgen.read_options_from_html(self.html) self.assertTrue(html_options["margin-top"] == "0") self.assertTrue(html_options["margin-left"] == "10mm") self.assertTrue(html_options["margin-right"] == "0") html_1 = """
Hello
""" _, options = pdfgen.read_options_from_html(html_1) self.assertTrue(options["margin-top"] == "0") self.assertTrue(options["margin-left"] == "10mm") self.assertTrue(options["margin-bottom"] == "20mm") # margin-right was for .more-info (child of .print-format) # so it should not be extracted into options self.assertFalse(options.get("margin-right")) def test_empty_style(self): html = """
Hello
""" _, options = pdfgen.read_options_from_html(html) self.assertTrue(options) def test_pdf_encryption(self): password = "qwe" pdf = pdfgen.get_pdf(self.html, options={"password": password}) reader = PdfReader(io.BytesIO(pdf)) self.assertTrue(reader.is_encrypted) self.assertTrue(reader.decrypt(password)) def test_pdf_generation_as_a_user(self): frappe.set_user("Administrator") pdf = pdfgen.get_pdf(self.html) self.assertTrue(pdf) def test_private_images_in_pdf(self): with make_test_image_file(private=True) as file: html = f"""
""" pdf = pdfgen.get_pdf(html) # If image was actually retrieved then size will be in few kbs, else bytes. self.assertGreaterEqual(len(pdf), 10_000)