diff --git a/CutList.Core.Tests/ResultsLengthDisplayTests.cs b/CutList.Core.Tests/ResultsLengthDisplayTests.cs index 5dacd4a..8ad9e29 100644 --- a/CutList.Core.Tests/ResultsLengthDisplayTests.cs +++ b/CutList.Core.Tests/ResultsLengthDisplayTests.cs @@ -24,4 +24,16 @@ public class ResultsLengthDisplayTests Assert.Contains("cut-part-badge-divider", markup); Assert.Contains("Show feet + inches", markup); } + + [Fact] + public void Printed_cut_list_rows_are_kept_together() + { + var sourcePath = Path.GetFullPath( + Path.Combine(AppContext.BaseDirectory, "../../../../CutList.Web/wwwroot/css/report.css")); + var css = File.ReadAllText(sourcePath); + + Assert.Contains(".cutlist-material-card tbody tr", css); + Assert.Contains("break-inside: avoid", css); + Assert.Contains("page-break-inside: avoid", css); + } } diff --git a/CutList.Web/wwwroot/css/report.css b/CutList.Web/wwwroot/css/report.css index f33da18..eccc37f 100644 --- a/CutList.Web/wwwroot/css/report.css +++ b/CutList.Web/wwwroot/css/report.css @@ -373,6 +373,12 @@ padding: 0 !important; } + /* Keep each stock-bar result, its cuts, and its waste on one printed page. */ + .cutlist-material-card tbody tr { + break-inside: avoid; + page-break-inside: avoid; + } + /* Reduce spacing */ .mb-4 { margin-bottom: 0.5rem !important; diff --git a/tests/test_cut_badge_format.py b/tests/test_cut_badge_format.py index d422e46..7a11cb1 100644 --- a/tests/test_cut_badge_format.py +++ b/tests/test_cut_badge_format.py @@ -22,7 +22,7 @@ class CutBadgeFormatTests(unittest.TestCase): self.assertIn('class="cut-part-badge-name"', cut_rows) self.assertIn('class="cut-part-badge-length"', cut_rows) self.assertIn('@item.Name', cut_rows) - self.assertIn('@ArchUnits.FormatFromInches(item.Length)', cut_rows) + self.assertIn('@FormatResultLength(item.Length)', cut_rows) self.assertNotIn('$"{item.Name} (', cut_rows) def test_length_section_has_a_darker_background_than_the_part_number_section(self) -> None: