@@ -, +, @@ - same as the original patch - verify that unit tests pass: prove t/Context.t --- C4/Context.pm | 10 +++++++--- t/Context.t | 28 +++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) --- a/C4/Context.pm +++ a/C4/Context.pm @@ -1242,10 +1242,14 @@ sub tz { =cut sub IsSuperLibrarian { - my $userenv = C4::Context->userenv - || carp("C4::Context->userenv not defined!"); + my $userenv = C4::Context->userenv; - return $userenv->{flags} % 2 == 1; + unless ( $userenv and exists $userenv->{flags} ) { + carp("C4::Context->userenv not defined!"); + return 0; + } + + return $userenv->{flags} % 2; } 1; --- a/t/Context.t +++ a/t/Context.t @@ -1,10 +1,32 @@ #!/usr/bin/perl -use strict; -use warnings; + +use Modern::Perl; use DBI; -use Test::More tests => 1; +use Test::More tests => 6; use Test::MockModule; BEGIN { use_ok('C4::Context'); } + +my $context = new Test::MockModule('C4::Context'); +my $userenv = {}; + +$context->mock('userenv', sub { + return $userenv; +}); + +local $SIG{__WARN__} = sub { die $_[0] }; + +eval { C4::Context::IsSuperLibrarian(); }; +like ( $@, qr/not defined/, "IsSuperLibrarian logs an error if no userenv is defined" ); + +$userenv->{flags} = 42; +my $is_super_librarian = eval{ C4::Context::IsSuperLibrarian() }; +is ( $@, q||, "IsSuperLibrarian does not log an error if userenv is defined" ); +is ( $is_super_librarian, 0, "With flag=42, it is not a super librarian" ); + +$userenv->{flags} = 421; +$is_super_librarian = eval{ C4::Context::IsSuperLibrarian() }; +is ( $@, q||, "IsSuperLibrarian does not log an error if userenv is defined" ); +is ( $is_super_librarian, 1, "With flag=1, it is a super librarian" ); --