diff --git a/t/db_dependent/Koha/Notice/Message.t b/t/db_dependent/Koha/Notice/Message.t
index 3be5ddf030..4a751e44fb 100755
--- a/t/db_dependent/Koha/Notice/Message.t
+++ b/t/db_dependent/Koha/Notice/Message.t
@@ -20,7 +20,7 @@
use Modern::Perl;
use Test::NoWarnings;
-use Test::More tests => 3;
+use Test::More tests => 4;
use C4::Letters qw( GetPreparedLetter EnqueueLetter );
@@ -145,7 +145,14 @@ subtest 'html_content() tests' => sub {
}
);
- t::lib::Mocks::mock_preference( 'AllNoticeStylesheet', '' );
+ # Mock all CSS preferences to ensure clean test state
+ t::lib::Mocks::mock_preference( 'AllNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'AllNoticeCSS', '' );
+ t::lib::Mocks::mock_preference( 'EmailNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'EmailNoticeCSS', '' );
+ t::lib::Mocks::mock_preference( 'PrintNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'PrintNoticeCSS', '' );
+
my $css_import = '';
my $message = Koha::Notice::Messages->find($message_id);
my $wrapped_compare = <<"WRAPPED";
@@ -190,6 +197,15 @@ WRAPPED
);
$template->is_html(0)->store;
+
+ # Reset all preferences for plaintext test
+ t::lib::Mocks::mock_preference( 'AllNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'AllNoticeCSS', '' );
+ t::lib::Mocks::mock_preference( 'EmailNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'EmailNoticeCSS', '' );
+ t::lib::Mocks::mock_preference( 'PrintNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'PrintNoticeCSS', '' );
+
$prepared_letter = GetPreparedLetter(
(
module => 'test',
@@ -220,4 +236,134 @@ WRAPPED
$schema->storage->txn_rollback;
};
+subtest 'stylesheets() tests' => sub {
+ plan tests => 8;
+
+ $schema->storage->txn_begin;
+
+ my $template = $builder->build_object(
+ {
+ class => 'Koha::Notice::Templates',
+ value => {
+ module => 'test',
+ code => 'TEST',
+ message_transport_type => 'email',
+ is_html => '1',
+ name => 'test notice template',
+ title => 'Test Title',
+ content => 'Test content',
+ branchcode => "",
+ lang => 'default',
+ }
+ }
+ );
+
+ my $patron = $builder->build_object( { class => 'Koha::Patrons' } );
+
+ my $prepared_letter = GetPreparedLetter(
+ (
+ module => 'test',
+ letter_code => 'TEST',
+ tables => {
+ borrowers => $patron->id,
+ },
+ )
+ );
+
+ # Test with no stylesheets set
+ t::lib::Mocks::mock_preference( 'AllNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'AllNoticeCSS', '' );
+ t::lib::Mocks::mock_preference( 'EmailNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'EmailNoticeCSS', '' );
+ t::lib::Mocks::mock_preference( 'PrintNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'PrintNoticeCSS', '' );
+
+ my $message_id = EnqueueLetter(
+ {
+ letter => $prepared_letter,
+ borrowernumber => $patron->id,
+ message_transport_type => 'email'
+ }
+ );
+ my $message = Koha::Notice::Messages->find($message_id);
+
+ is( $message->stylesheets, '', "No stylesheets when all preferences are empty" );
+
+ # Test AllNoticeStylesheet only
+ t::lib::Mocks::mock_preference( 'AllNoticeStylesheet', 'https://example.com/all.css' );
+ is(
+ $message->stylesheets, '',
+ "AllNoticeStylesheet works correctly"
+ );
+
+ # Test AllNoticeCSS only
+ t::lib::Mocks::mock_preference( 'AllNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'AllNoticeCSS', 'body { color: red; }' );
+ is( $message->stylesheets, '', "AllNoticeCSS works correctly" );
+
+ # Test email-specific stylesheet for email transport
+ t::lib::Mocks::mock_preference( 'AllNoticeCSS', '' );
+ t::lib::Mocks::mock_preference( 'EmailNoticeStylesheet', 'https://example.com/email.css' );
+ is(
+ $message->stylesheets, '',
+ "EmailNoticeStylesheet works for email transport"
+ );
+
+ # Test email-specific CSS for email transport
+ t::lib::Mocks::mock_preference( 'EmailNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'EmailNoticeCSS', '.email { font-weight: bold; }' );
+ is(
+ $message->stylesheets, '',
+ "EmailNoticeCSS works for email transport"
+ );
+
+ # Test combined all + email styles
+ t::lib::Mocks::mock_preference( 'AllNoticeStylesheet', 'https://example.com/all.css' );
+ t::lib::Mocks::mock_preference( 'AllNoticeCSS', 'body { margin: 0; }' );
+ t::lib::Mocks::mock_preference( 'EmailNoticeStylesheet', 'https://example.com/email.css' );
+ t::lib::Mocks::mock_preference( 'EmailNoticeCSS', '.email { color: blue; }' );
+
+ my $expected_combined =
+ '' . "\n"
+ . ''
+ . '' . "\n"
+ . '';
+ is( $message->stylesheets, $expected_combined, "Combined all and email styles work correctly" );
+
+ # Test print transport type
+ $message_id = EnqueueLetter(
+ {
+ letter => $prepared_letter,
+ borrowernumber => $patron->id,
+ message_transport_type => 'print'
+ }
+ );
+ $message = Koha::Notice::Messages->find($message_id);
+
+ # Reset email preferences and set print preferences
+ t::lib::Mocks::mock_preference( 'EmailNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'EmailNoticeCSS', '' );
+ t::lib::Mocks::mock_preference( 'PrintNoticeStylesheet', 'https://example.com/print.css' );
+ t::lib::Mocks::mock_preference( 'PrintNoticeCSS', '.print { page-break-after: always; }' );
+
+ my $expected_print =
+ '' . "\n"
+ . ''
+ . '' . "\n"
+ . '';
+ is( $message->stylesheets, $expected_print, "Print transport type uses correct stylesheets" );
+
+ # Test that email styles are NOT included for print transport
+ t::lib::Mocks::mock_preference( 'AllNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'AllNoticeCSS', '' );
+ t::lib::Mocks::mock_preference( 'EmailNoticeStylesheet', 'https://example.com/email.css' );
+ t::lib::Mocks::mock_preference( 'EmailNoticeCSS', '.email { color: blue; }' );
+ t::lib::Mocks::mock_preference( 'PrintNoticeStylesheet', '' );
+ t::lib::Mocks::mock_preference( 'PrintNoticeCSS', '' );
+
+ is( $message->stylesheets, '', "Print transport does not include email-specific styles" );
+
+ $schema->storage->txn_rollback;
+};
+
1;