Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -160,3 +160,5 @@ cython_debug/
#.idea/

package_scripts/tmp/

tmp/
21 changes: 21 additions & 0 deletions src/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,27 @@ def after_request(response):
request_data = request.get_json()
to_log["upstream_context"] = request_data.get("upstream_context")

if os.environ.get("DUMP_NON_REG_FIXTURES"):
fixtures_dir = "tests/fixtures"
procedure_id = request_data["upstream_context"]["procedure_id"]
html_file_path = os.path.join(
fixtures_dir, f"procedure-{procedure_id}.html"
)
with open(html_file_path, "w") as html_file:
html_file.write(request_data["html"])

pdf_file_path = os.path.join(
fixtures_dir, f"procedure-{procedure_id}.pdf"
)
html = HTML(
string=request_data["html"],
base_url=app.config["BASE_URL"],
url_fetcher=custom_url_fetcher,
)
with open(pdf_file_path, "wb") as f:
f.write(html.write_pdf())
print(f"New reference PDF saved: {pdf_file_path}")

if request.headers.get("X-Request-Id"):
to_log["request_id"] = request.headers.get("X-Request-Id")

Expand Down
65 changes: 65 additions & 0 deletions tests/fixtures/procedure-98904.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<html lang='fr'>
<head>
<link rel="stylesheet" href="/assets/attestation.debug-3c57ac8945dab8095dd2b5cb0fb3fd6321ef7b646edb4c2ceed35b8af00b93d3.css" media="all" />
<title>Attestation</title>



<meta content='ds.test:3000' name='generator'>
<meta content='2024-09-02T12:46:42+02:00' name='dcterms.created'>
</head>
<body id='attestation'>
<div class='a4-container official-layout'>
<div class='content'>
<header class='first-header'>
<div class='left'>
<img alt="" class="marianne" src="/assets/centered_marianne-00cb9c7009adea9ffa65aa8cf028ce2f94b88b1bcdaf202c5a42fc1976f0dabd.svg" />
<div class='bloc-marque'>
<p class="intitule">DS</p>
<img alt="" class="devise" src="/assets/liberte2-5ee183e5c6400eccff4b10a6a3c3beff34ec3582b77aa13ef701bb8f40c6bd19.svg" />
</div>
</div>
<div class='right'>
</div>
</header>
<footer>
<p>Préfecture de zone / [email protected]
<br />2 878 rue de la Capitainerie — CS — 25000 RENNES CEDEX 02 - Tel: 02 01 02 01 02</p>
</footer>
<div class='main'>
<header><div style="text-align:left;"><p style="text-align:left;">Service des techs de DS</p></div>
<div style="text-align:left;"><p style="text-align:left;">Fait le </p></div></header><h1 style="text-align:center;">Titre de l’attestation</h1><p class="body-start" style="text-align:left;">Cher M. C C ,</p><p style="text-align:left;">Voici le rendu d’une liste à choix multilpes : </p><ul>
<li><p>Premier choix</p></li>
<li><p>Deuxième choix</p></li>
</ul><p> </p><p style="text-align:left;">Et celui d’un bloc répétable : </p><ol class="tdc-repetition">
<li><dl>
<dt>Nom</dt>
<dd>Lavande</dd>
<dt>Nombre</dt>
<dd>20</dd>
<dt>Pourquoi si peu ?</dt>
<dd></dd>
</dl></li>
<li><dl>
<dt>Nom</dt>
<dd>Olivier</dd>
<dt>Nombre</dt>
<dd>1</dd>
<dt>Pourquoi si peu ?</dt>
<dd>pas la place</dd>
</dl></li>
<li><dl>
<dt>Nom</dt>
<dd>Un nom super long qui aura de bonnes chances de passer sur une seconde ligne (ou pas, on verra hein)</dd>
<dt>Nombre</dt>
<dd>20</dd>
<dt>Pourquoi si peu ?</dt>
<dd></dd>
</dl></li>
</ol><p> </p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><h3 style="text-align:left;">Un niveau de titre qui passe sur 2 lignes, et qui pose un problème de chevauchement lorqu’on a un line-height qui n’est pas adapté.</h3><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p><p style="text-align:left;">Vous pouvez éditer ce texte pour personnaliser votre attestation. Pour ajouter du contenu issu du dossier, utilisez les balises situées sous cette zone de saisie.</p>
</div>
</div>
</div>

</body>
</html>
Binary file added tests/fixtures/procedure-98904.pdf
Binary file not shown.
48 changes: 48 additions & 0 deletions tests/test_non_regression.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import os
from unittest import TestCase
from weasyprint import HTML
from src.custom_fetcher import custom_url_fetcher

fixtures_dir = "tests/fixtures"
output_dir = "tmp"

os.makedirs(output_dir, exist_ok=True)


class TestIntegrations(TestCase):
# NOTE: App server must run in order to fetch assets.
def test_non_regression(self):
if "CI" in os.environ:
self.skipTest(
"Skipping non-regression test in CI: app server assets must run."
)

# Iterate through each HTML file in the fixtures directory
for filename in os.listdir(fixtures_dir):
if filename.endswith(".html"):
html_file_path = os.path.join(fixtures_dir, filename)

# Load HTML content
with open(html_file_path, "r", encoding="utf-8") as f:
string_html = f.read()

# Generate PDF.
html = HTML(
string=string_html,
base_url=os.environ.get("BASE_URL"),
url_fetcher=custom_url_fetcher,
)

pdf = html.write_pdf()

# Define output PDF file path
pdf_filename = filename.replace(".html", ".pdf")

# Save the PDF to the specified directory
pdf_file_path = os.path.join(output_dir, pdf_filename)
with open(pdf_file_path, "wb") as f:
f.write(pdf)

print(
f"Non regression PDF generated: {pdf_file_path}, compare it with reference"
)