Fiches de poste : message de l'organisation en bas de chaque page
Edition.volunteer_message imprimé en pied de chaque page (suite d'une feuille comprise), la marge du bas agrandie de sa hauteur ; rien sans message. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
c6ea7378c7
commit
cc8c2e61ab
@@ -174,3 +174,25 @@ def test_a_night_that_passes_midnight_stays_on_its_festival_day(client, edition,
|
||||
text = reader.pages[0].extract_text()
|
||||
assert "jeudi 9 juillet" in text.lower()
|
||||
assert "01:00" in text
|
||||
|
||||
|
||||
def test_organisation_message_is_passed_as_the_page_footer(client, edition, session, monkeypatch):
|
||||
import app.api.position_sheets as sheets_api
|
||||
|
||||
captured = {}
|
||||
original = sheets_api.generate_position_sheets_pdf
|
||||
|
||||
def spy(sheets, footer=None):
|
||||
captured["footer"] = footer
|
||||
return original(sheets, footer)
|
||||
|
||||
monkeypatch.setattr(sheets_api, "generate_position_sheets_pdf", spy)
|
||||
position = make_position(session, edition)
|
||||
make_shift(session, edition, position, start=dt_at(9, 19), end=dt_at(9, 22))
|
||||
|
||||
assert client.post(_url(edition), json={}).status_code == 200
|
||||
assert captured["footer"] is None
|
||||
|
||||
client.patch(f"/editions/{edition.id}", json={"volunteer_message": "Repas à 18h30"})
|
||||
assert client.post(_url(edition), json={}).status_code == 200
|
||||
assert captured["footer"].message == "Repas à 18h30"
|
||||
|
||||
@@ -174,3 +174,31 @@ def test_unreadable_photo_does_not_break_the_sheet():
|
||||
[_sheet(volunteers=(SheetVolunteer(name="Alex", phone=None, photo=b"pas une image"),))]
|
||||
)
|
||||
assert pdf.startswith(b"%PDF")
|
||||
|
||||
|
||||
def _page_texts(pdf: bytes) -> list[str]:
|
||||
from pypdf import PdfReader
|
||||
|
||||
return [page.extract_text() for page in PdfReader(io.BytesIO(pdf)).pages]
|
||||
|
||||
|
||||
def test_footer_message_is_printed_at_the_bottom_of_every_page():
|
||||
from app.sheets.pdf import SheetFooter
|
||||
|
||||
# Deux feuilles, dont une assez longue pour déborder sur une 2e page.
|
||||
many = tuple(SheetVolunteer(name=f"Bénévole {i}", phone=None, photo=None) for i in range(40))
|
||||
pdf = generate_position_sheets_pdf(
|
||||
[_sheet(volunteers=many), _sheet()],
|
||||
SheetFooter(title="Message de l'organisation", message="Repas à 18h30\nBadges à l'accueil"),
|
||||
)
|
||||
pages = _page_texts(pdf)
|
||||
assert len(pages) >= 3
|
||||
for text in pages:
|
||||
assert "Message de l'organisation" in text
|
||||
assert "Repas à 18h30" in text
|
||||
assert "Badges à l'accueil" in text
|
||||
|
||||
|
||||
def test_no_footer_without_message():
|
||||
pages = _page_texts(generate_position_sheets_pdf([_sheet()]))
|
||||
assert "Message de l'organisation" not in pages[0]
|
||||
|
||||
Reference in New Issue
Block a user