pp-planer/tests/fixtures/ccli
Thorsten Bus ae42b48753 feat(songs): per-song sections + section editing; fix CCLI import bugs
Refactor lyric storage so each song owns its sections instead of sharing
global labels. Adds song_sections (per song+label) owning song_slides;
labels stay global ProPresenter group tags (name/color/macro). Arrangements
now reference sections, so editing/importing one song no longer corrupts
others that share a label name.

- New: song_sections table + migration with safe backfill; SongSection,
  SongArrangementSection models; SongSectionController (edit/add/delete
  sections, immediate persistence) wired into SongEditModal.
- Refactor writers/readers: CcliImport, ProImport, SongService,
  ArrangementController, SongController, ProExport, PDF, Translation
  (translation reset now section-scoped), CCLI pairing.
- CCLI import fixes: parse SongSelect copy-icon format (German "Vers"
  abbrev + trailing author), fill empty CTS-synced songs instead of
  blocking as duplicate, distinct label colors per section kind,
  import&edit/existing-song open the edit modal (no 404/405), teleport
  paste dialog above assign dialog, preview shows section content,
  correct SongSelect search URL, copy-icon instructions.
- Bookmarklet clicks #generalCopyLyricsButton and captures clipboard;
  serves correct host from request.
- Export: embed key-visual/background under fixed bundle-relative names.
- Tests updated for the section model; new section + isolation coverage.
2026-05-31 14:45:47 +02:00
..
5-verses.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
copy-icon-vers-author-trailing.txt feat(songs): per-song sections + section editing; fix CCLI import bugs 2026-05-31 14:45:47 +02:00
english-dutch.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
english-french.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
english-german-side-by-side.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
english-italian.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
english-only-multi-verse.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
english-only-single-verse.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
english-spanish.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
german-only.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
interlude-misc.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
intro-outro.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
long-bridge.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
missing-copyright.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
missing-year.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
mixed-german-english-labels.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
no-translation.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
pre-chorus.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
README.md test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
repeat-marker.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
tag-ending.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
umlauts.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
verse-letter-suffix.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00
whitespace-edge-cases.txt test(ccli): add fixture corpus for CCLI paste parser 2026-05-10 18:24:29 +02:00

CCLI Fixture Corpus

Synthetic CCLI SongSelect "View Lyrics" page text fixtures for testing the CcliPasteParser.

Anonymization

  • Song titles use Test Song N
  • Artist names use Test Artist N
  • CCLI IDs use 9999XXX
  • Lyrics are synthetic but keep realistic SongSelect structure

Format

Each fixture follows this structure:

  1. Song title (first line)
  2. Artist name
  3. Blank line
  4. Section label on its own line
  5. Lyric lines
  6. Repeated section blocks as needed
  7. Footer copyright line starting with ©
  8. Footer CCLI # NNNNNNN

Coverage

File Purpose
english-only-multi-verse.txt Standard EN song with Verse/Chorus/Bridge
english-only-single-verse.txt Minimal song with one verse and one chorus
english-german-side-by-side.txt Alternating EN/DE labels
english-french.txt English labels with French lyrics
english-spanish.txt English labels with Spanish lyrics
english-dutch.txt English labels with Dutch lyrics
english-italian.txt English labels with Italian lyrics
german-only.txt German labels only
repeat-marker.txt Repeat markers like (Repeat) and x2
verse-letter-suffix.txt Verse suffixes like 2a and 2b
mixed-german-english-labels.txt Mixed EN/DE labels
missing-copyright.txt No copyright line
missing-year.txt © without year
whitespace-edge-cases.txt Leading/trailing spaces and double blanks
umlauts.txt German umlauts and ß
long-bridge.txt Long bridge with internal blank line
pre-chorus.txt Pre-Chorus sections
tag-ending.txt Tag and Ending sections
intro-outro.txt Intro and Outro sections
interlude-misc.txt Interlude and Misc sections
no-translation.txt English-only import case
5-verses.txt Stress test with five verses