Jonathan Druart
f1f9c6dc74
.pm must not have -x .t must have -x .pl must have -x Test plan: Apply only the first patch, run the tests and confirm that the failures make sense Apply this patch and confirm that the test now returns green Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
333 lines
11 KiB
Raku
Executable file
333 lines
11 KiB
Raku
Executable file
#!/usr/bin/perl
|
|
|
|
use Modern::Perl;
|
|
use Test::More tests => 134;
|
|
|
|
use C4::Budgets;
|
|
use t::lib::Mocks;
|
|
|
|
# Avoid "redefined subroutine" warnings
|
|
local $SIG{__WARN__} = sub { warn $_[0] unless $_[0] =~ /redefined/ };
|
|
*C4::Budgets::GetBudgetUsers = \&Mock_GetBudgetUsers;
|
|
|
|
my %budgetusers = (
|
|
1 => [],
|
|
2 => [1],
|
|
3 => [2],
|
|
4 => [3],
|
|
5 => [],
|
|
6 => [1],
|
|
7 => [2],
|
|
8 => [3],
|
|
9 => [],
|
|
10 => [1],
|
|
11 => [2],
|
|
12 => [3],
|
|
13 => [],
|
|
14 => [1],
|
|
15 => [2],
|
|
16 => [3],
|
|
);
|
|
|
|
my $borrower1 = {
|
|
borrowernumber => 1
|
|
};
|
|
my $borrower2 = {
|
|
borrowernumber => 2
|
|
};
|
|
|
|
my $budget1 = {
|
|
budget_id => 1,
|
|
budget_permission => 0,
|
|
budget_owner_id => undef,
|
|
budget_branchcode => undef,
|
|
};
|
|
my $budget2 = {
|
|
budget_id => 2,
|
|
budget_permission => 0,
|
|
budget_owner_id => undef,
|
|
budget_branchcode => 'B1',
|
|
};
|
|
my $budget3 = {
|
|
budget_id => 3,
|
|
budget_permission => 0,
|
|
budget_owner_id => 1,
|
|
budget_branchcode => undef,
|
|
};
|
|
my $budget4 = {
|
|
budget_id => 4,
|
|
budget_permission => 0,
|
|
budget_owner_id => 1,
|
|
budget_branchcode => 'B1',
|
|
};
|
|
my $budget5 = {
|
|
budget_id => 5,
|
|
budget_permission => 1,
|
|
budget_owner_id => undef,
|
|
budget_branchcode => undef,
|
|
};
|
|
my $budget6 = {
|
|
budget_id => 6,
|
|
budget_permission => 1,
|
|
budget_owner_id => undef,
|
|
budget_branchcode => 'B1',
|
|
};
|
|
my $budget7 = {
|
|
budget_id => 7,
|
|
budget_permission => 1,
|
|
budget_owner_id => 1,
|
|
budget_branchcode => undef,
|
|
};
|
|
my $budget8 = {
|
|
budget_id => 8,
|
|
budget_permission => 1,
|
|
budget_owner_id => 1,
|
|
budget_branchcode => 'B1',
|
|
};
|
|
my $budget9 = {
|
|
budget_id => 9,
|
|
budget_permission => 2,
|
|
budget_owner_id => undef,
|
|
budget_branchcode => undef,
|
|
};
|
|
my $budget10 = {
|
|
budget_id => 10,
|
|
budget_permission => 2,
|
|
budget_owner_id => undef,
|
|
budget_branchcode => 'B1',
|
|
};
|
|
my $budget11 = {
|
|
budget_id => 11,
|
|
budget_permission => 2,
|
|
budget_owner_id => 1,
|
|
budget_branchcode => undef,
|
|
};
|
|
my $budget12 = {
|
|
budget_id => 12,
|
|
budget_permission => 2,
|
|
budget_owner_id => 1,
|
|
budget_branchcode => 'B1',
|
|
};
|
|
my $budget13 = {
|
|
budget_id => 13,
|
|
budget_permission => 3,
|
|
budget_owner_id => undef,
|
|
budget_branchcode => undef,
|
|
};
|
|
my $budget14 = {
|
|
budget_id => 14,
|
|
budget_permission => 3,
|
|
budget_owner_id => undef,
|
|
budget_branchcode => 'B1',
|
|
};
|
|
my $budget15 = {
|
|
budget_id => 15,
|
|
budget_permission => 3,
|
|
budget_owner_id => 1,
|
|
budget_branchcode => undef,
|
|
};
|
|
my $budget16 = {
|
|
budget_id => 16,
|
|
budget_permission => 3,
|
|
budget_owner_id => 1,
|
|
budget_branchcode => 'B1',
|
|
};
|
|
|
|
ok( !CanUserModifyBudget( 0, undef, {} ), "CanUserModifyBudget evaluates to false if DB user is passed" );
|
|
|
|
ok (CanUserModifyBudget($borrower1, $budget1, {superlibrarian => 1}));
|
|
ok (CanUserModifyBudget($borrower1, $budget1, {
|
|
acquisition => {
|
|
budget_manage_all => 1
|
|
}
|
|
}));
|
|
ok (CanUserModifyBudget($borrower1, $budget1, {acquisition => 1}));
|
|
|
|
ok (!CanUserModifyBudget($borrower1, $budget1, {}));
|
|
ok (!CanUserModifyBudget($borrower1, $budget1, {acquisition => 0}));
|
|
|
|
my $flags = {acquisition => {budget_modify => 1}};
|
|
|
|
t::lib::Mocks::mock_userenv({ branchcode => 'B1' });
|
|
|
|
# Restriction is 'none'
|
|
ok (CanUserModifyBudget($borrower1, $budget1, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget2, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget3, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget4, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget1, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget2, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget3, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget4, $flags));
|
|
|
|
# Restriction is 'owner'
|
|
ok (CanUserModifyBudget($borrower1, $budget5, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget6, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget7, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget8, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget5, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget6, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget7, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget8, $flags));
|
|
|
|
# Restriction is 'owner, users and library'
|
|
ok (CanUserModifyBudget($borrower1, $budget9, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget10, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget11, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget12, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget9, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget10, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget11, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget12, $flags));
|
|
|
|
# Restriction is 'owner and users'
|
|
ok (!CanUserModifyBudget($borrower1, $budget13, $flags)); # no owner, no user
|
|
ok (CanUserModifyBudget($borrower1, $budget14, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget15, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget16, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget13, $flags)); # no owner, no user
|
|
ok (!CanUserModifyBudget($borrower2, $budget14, $flags)); # No owner and user list contains borrower1
|
|
ok (CanUserModifyBudget($borrower2, $budget15, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget16, $flags));
|
|
|
|
t::lib::Mocks::mock_userenv({ branchcode => 'B2' });
|
|
|
|
# Restriction is 'none'
|
|
ok (CanUserModifyBudget($borrower1, $budget1, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget2, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget3, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget4, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget1, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget2, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget3, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget4, $flags));
|
|
|
|
# Restriction is 'owner'
|
|
ok (CanUserModifyBudget($borrower1, $budget5, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget6, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget7, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget8, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget5, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget6, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget7, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget8, $flags));
|
|
|
|
# Restriction is 'owner, users and library'
|
|
ok (CanUserModifyBudget($borrower1, $budget9, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget10, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget11, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget12, $flags));
|
|
ok (CanUserModifyBudget($borrower2, $budget9, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget10, $flags)); # Limited to library B1
|
|
ok (CanUserModifyBudget($borrower2, $budget11, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget12, $flags));
|
|
|
|
# Restriction is 'owner and users'
|
|
ok (!CanUserModifyBudget($borrower1, $budget13, $flags)); # No owner, no user
|
|
ok (CanUserModifyBudget($borrower1, $budget14, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget15, $flags));
|
|
ok (CanUserModifyBudget($borrower1, $budget16, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget13, $flags)); # No owner, no user
|
|
ok (!CanUserModifyBudget($borrower2, $budget14, $flags)); # No owner and user list contains borrower1
|
|
ok (CanUserModifyBudget($borrower2, $budget15, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget16, $flags));
|
|
|
|
|
|
# Same tests as above, without budget_modify permission
|
|
# All tests should failed
|
|
$flags = {acquisition => {order_manage => 1}};
|
|
|
|
t::lib::Mocks::mock_userenv({ branchcode => 'B1' });
|
|
|
|
# Restriction is 'none'
|
|
ok (!CanUserModifyBudget($borrower1, $budget1, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget2, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget3, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget4, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget1, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget2, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget3, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget4, $flags));
|
|
|
|
# Restriction is 'owner'
|
|
ok (!CanUserModifyBudget($borrower1, $budget5, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget6, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget7, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget8, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget5, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget6, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget7, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget8, $flags));
|
|
|
|
# Restriction is 'owner, users and library'
|
|
ok (!CanUserModifyBudget($borrower1, $budget9, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget10, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget11, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget12, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget9, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget10, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget11, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget12, $flags));
|
|
|
|
# Restriction is 'owner and users'
|
|
ok (!CanUserModifyBudget($borrower1, $budget13, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget14, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget15, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget16, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget13, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget14, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget15, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget16, $flags));
|
|
|
|
|
|
t::lib::Mocks::mock_userenv({ branchcode => 'B2' });
|
|
|
|
# Restriction is 'none'
|
|
ok (!CanUserModifyBudget($borrower1, $budget1, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget2, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget3, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget4, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget1, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget2, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget3, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget4, $flags));
|
|
|
|
# Restriction is 'owner'
|
|
ok (!CanUserModifyBudget($borrower1, $budget5, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget6, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget7, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget8, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget5, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget6, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget7, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget8, $flags));
|
|
|
|
# Restriction is 'owner, users and library'
|
|
ok (!CanUserModifyBudget($borrower1, $budget9, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget10, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget11, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget12, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget9, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget10, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget11, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget12, $flags));
|
|
|
|
# Restriction is 'owner and users'
|
|
ok (!CanUserModifyBudget($borrower1, $budget13, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget14, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget15, $flags));
|
|
ok (!CanUserModifyBudget($borrower1, $budget16, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget13, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget14, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget15, $flags));
|
|
ok (!CanUserModifyBudget($borrower2, $budget16, $flags));
|
|
|
|
|
|
# Mocked subs
|
|
|
|
# C4::Acquisition::GetBudgetUsers
|
|
sub Mock_GetBudgetUsers {
|
|
my ($budget_id) = @_;
|
|
|
|
return @{ $budgetusers{$budget_id} };
|
|
}
|