Lines 20-26
Link Here
|
20 |
use Modern::Perl; |
20 |
use Modern::Perl; |
21 |
|
21 |
|
22 |
use Benchmark; |
22 |
use Benchmark; |
23 |
use Test::More tests => 8; |
23 |
use Test::More tests => 7; |
24 |
use Test::Deep qw( cmp_methods ); |
24 |
use Test::Deep qw( cmp_methods ); |
25 |
use Test::Exception; |
25 |
use Test::Exception; |
26 |
|
26 |
|
Lines 29-34
use Koha::Database;
Link Here
|
29 |
|
29 |
|
30 |
use t::lib::Mocks; |
30 |
use t::lib::Mocks; |
31 |
use t::lib::TestBuilder; |
31 |
use t::lib::TestBuilder; |
|
|
32 |
use Koha::Cache::Memory::Lite; |
32 |
|
33 |
|
33 |
my $schema = Koha::Database->new->schema; |
34 |
my $schema = Koha::Database->new->schema; |
34 |
my $builder = t::lib::TestBuilder->new; |
35 |
my $builder = t::lib::TestBuilder->new; |
Lines 687-751
subtest 'get_lostreturn_policy() tests' => sub {
Link Here
|
687 |
|
688 |
|
688 |
$schema->resultset('CirculationRule')->search()->delete; |
689 |
$schema->resultset('CirculationRule')->search()->delete; |
689 |
|
690 |
|
690 |
my $default_rule_charge = $builder->build( |
691 |
my $default_proc_rule_charge = $builder->build( |
691 |
{ |
692 |
{ |
692 |
source => 'CirculationRule', |
693 |
source => 'CirculationRule', |
693 |
value => { |
694 |
value => { |
694 |
branchcode => undef, |
695 |
branchcode => undef, |
695 |
categorycode => undef, |
696 |
categorycode => undef, |
696 |
itemtype => undef, |
697 |
itemtype => undef, |
697 |
rule_name => 'lostreturn', |
698 |
rule_name => 'processingreturn', |
698 |
rule_value => 'charge' |
699 |
rule_value => 'charge' |
699 |
} |
700 |
} |
700 |
} |
701 |
} |
701 |
); |
702 |
); |
702 |
my $branchcode = $builder->build( { source => 'Branch' } )->{branchcode}; |
703 |
my $default_lost_rule_charge = $builder->build( |
703 |
my $specific_rule_false = $builder->build( |
|
|
704 |
{ |
704 |
{ |
705 |
source => 'CirculationRule', |
705 |
source => 'CirculationRule', |
706 |
value => { |
706 |
value => { |
707 |
branchcode => $branchcode, |
707 |
branchcode => undef, |
708 |
categorycode => undef, |
708 |
categorycode => undef, |
709 |
itemtype => undef, |
709 |
itemtype => undef, |
710 |
rule_name => 'lostreturn', |
710 |
rule_name => 'lostreturn', |
711 |
rule_value => 0 |
711 |
rule_value => 'charge' |
712 |
} |
712 |
} |
713 |
} |
713 |
} |
714 |
); |
714 |
); |
715 |
my $branchcode2 = $builder->build( { source => 'Branch' } )->{branchcode}; |
715 |
my $branchcode = $builder->build( { source => 'Branch' } )->{branchcode}; |
716 |
my $specific_rule_refund = $builder->build( |
716 |
my $specific_lost_rule_false = $builder->build( |
717 |
{ |
717 |
{ |
718 |
source => 'CirculationRule', |
718 |
source => 'CirculationRule', |
719 |
value => { |
719 |
value => { |
720 |
branchcode => $branchcode2, |
720 |
branchcode => $branchcode, |
721 |
categorycode => undef, |
721 |
categorycode => undef, |
722 |
itemtype => undef, |
722 |
itemtype => undef, |
723 |
rule_name => 'lostreturn', |
723 |
rule_name => 'lostreturn', |
724 |
rule_value => 'refund' |
724 |
rule_value => 0 |
725 |
} |
725 |
} |
726 |
} |
726 |
} |
727 |
); |
727 |
); |
728 |
my $branchcode3 = $builder->build( { source => 'Branch' } )->{branchcode}; |
728 |
my $specific_proc_rule_false = $builder->build( |
729 |
my $specific_rule_restore = $builder->build( |
|
|
730 |
{ |
729 |
{ |
731 |
source => 'CirculationRule', |
730 |
source => 'CirculationRule', |
732 |
value => { |
731 |
value => { |
733 |
branchcode => $branchcode3, |
732 |
branchcode => $branchcode, |
734 |
categorycode => undef, |
733 |
categorycode => undef, |
735 |
itemtype => undef, |
734 |
itemtype => undef, |
736 |
rule_name => 'lostreturn', |
735 |
rule_name => 'processingreturn', |
737 |
rule_value => 'restore' |
736 |
rule_value => 0 |
738 |
} |
737 |
} |
739 |
} |
738 |
} |
740 |
); |
739 |
); |
741 |
|
740 |
my $branchcode2 = $builder->build( { source => 'Branch' } )->{branchcode}; |
742 |
# Make sure we have an unused branchcode |
741 |
my $specific_lost_rule_refund = $builder->build( |
743 |
my $branchcode4 = $builder->build( { source => 'Branch' } )->{branchcode}; |
|
|
744 |
my $specific_rule_dummy = $builder->build( |
745 |
{ |
742 |
{ |
746 |
source => 'CirculationRule', |
743 |
source => 'CirculationRule', |
747 |
value => { |
744 |
value => { |
748 |
branchcode => $branchcode4, |
745 |
branchcode => $branchcode2, |
749 |
categorycode => undef, |
746 |
categorycode => undef, |
750 |
itemtype => undef, |
747 |
itemtype => undef, |
751 |
rule_name => 'lostreturn', |
748 |
rule_name => 'lostreturn', |
Lines 753-892
subtest 'get_lostreturn_policy() tests' => sub {
Link Here
|
753 |
} |
750 |
} |
754 |
} |
751 |
} |
755 |
); |
752 |
); |
756 |
my $branch_without_rule = $specific_rule_dummy->{ branchcode }; |
753 |
my $specific_proc_rule_refund = $builder->build( |
757 |
Koha::CirculationRules |
|
|
758 |
->search( |
759 |
{ |
760 |
branchcode => $branch_without_rule, |
761 |
categorycode => undef, |
762 |
itemtype => undef, |
763 |
rule_name => 'lostreturn', |
764 |
rule_value => 'refund' |
765 |
} |
766 |
) |
767 |
->next |
768 |
->delete; |
769 |
|
770 |
my $item = $builder->build_sample_item( |
771 |
{ |
772 |
homebranch => $specific_rule_restore->{branchcode}, |
773 |
holdingbranch => $specific_rule_false->{branchcode} |
774 |
} |
775 |
); |
776 |
my $params = { |
777 |
return_branch => $specific_rule_refund->{ branchcode }, |
778 |
item => $item |
779 |
}; |
780 |
|
781 |
# Specific rules |
782 |
t::lib::Mocks::mock_preference( 'RefundLostOnReturnControl', 'CheckinLibrary' ); |
783 |
is( Koha::CirculationRules->get_lostreturn_policy( $params ), |
784 |
'refund','Specific rule for checkin branch is applied (refund)'); |
785 |
|
786 |
t::lib::Mocks::mock_preference( 'RefundLostOnReturnControl', 'ItemHomeBranch' ); |
787 |
is( Koha::CirculationRules->get_lostreturn_policy( $params ), |
788 |
'restore','Specific rule for home branch is applied (restore)'); |
789 |
|
790 |
t::lib::Mocks::mock_preference( 'RefundLostOnReturnControl', 'ItemHoldingBranch' ); |
791 |
is( Koha::CirculationRules->get_lostreturn_policy( $params ), |
792 |
0,'Specific rule for holding branch is applied (false)'); |
793 |
|
794 |
# Default rule check |
795 |
t::lib::Mocks::mock_preference( 'RefundLostOnReturnControl', 'CheckinLibrary' ); |
796 |
$params->{return_branch} = $branch_without_rule; |
797 |
is( Koha::CirculationRules->get_lostreturn_policy( $params ), |
798 |
'charge','No rule for branch, global rule applied (charge)'); |
799 |
|
800 |
# Change the default value just to try |
801 |
Koha::CirculationRules->search({ branchcode => undef, rule_name => 'lostreturn' })->next->rule_value(0)->store; |
802 |
is( Koha::CirculationRules->get_lostreturn_policy( $params ), |
803 |
0,'No rule for branch, global rule applied (false)'); |
804 |
|
805 |
# No default rule defined check |
806 |
Koha::CirculationRules |
807 |
->search( |
808 |
{ |
809 |
branchcode => undef, |
810 |
categorycode => undef, |
811 |
itemtype => undef, |
812 |
rule_name => 'lostreturn' |
813 |
} |
814 |
) |
815 |
->next |
816 |
->delete; |
817 |
is( Koha::CirculationRules->get_lostreturn_policy( $params ), |
818 |
'refund','No rule for branch, no default rule, fallback default (refund)'); |
819 |
|
820 |
# Fallback to ItemHoldBranch if CheckinLibrary is undefined |
821 |
$params->{return_branch} = undef; |
822 |
is( Koha::CirculationRules->get_lostreturn_policy( $params ), |
823 |
'restore','return_branch undefined, fallback to ItemHomeBranch rule (restore)'); |
824 |
|
825 |
$schema->storage->txn_rollback; |
826 |
}; |
827 |
|
828 |
subtest 'get_processingreturn_policy() tests' => sub { |
829 |
plan tests => 7; |
830 |
|
831 |
$schema->storage->txn_begin; |
832 |
|
833 |
$schema->resultset('CirculationRule')->search()->delete; |
834 |
|
835 |
my $default_rule_charge = $builder->build( |
836 |
{ |
754 |
{ |
837 |
source => 'CirculationRule', |
755 |
source => 'CirculationRule', |
838 |
value => { |
756 |
value => { |
839 |
branchcode => undef, |
757 |
branchcode => $branchcode2, |
840 |
categorycode => undef, |
758 |
categorycode => undef, |
841 |
itemtype => undef, |
759 |
itemtype => undef, |
842 |
rule_name => 'processingreturn', |
760 |
rule_name => 'processingreturn', |
843 |
rule_value => 'charge' |
761 |
rule_value => 'refund' |
844 |
} |
762 |
} |
845 |
} |
763 |
} |
846 |
); |
764 |
); |
847 |
my $branchcode = $builder->build( { source => 'Branch' } )->{branchcode}; |
765 |
my $branchcode3 = $builder->build( { source => 'Branch' } )->{branchcode}; |
848 |
my $specific_rule_false = $builder->build( |
766 |
my $specific_lost_rule_restore = $builder->build( |
849 |
{ |
767 |
{ |
850 |
source => 'CirculationRule', |
768 |
source => 'CirculationRule', |
851 |
value => { |
769 |
value => { |
852 |
branchcode => $branchcode, |
770 |
branchcode => $branchcode3, |
853 |
categorycode => undef, |
771 |
categorycode => undef, |
854 |
itemtype => undef, |
772 |
itemtype => undef, |
855 |
rule_name => 'processingreturn', |
773 |
rule_name => 'lostreturn', |
856 |
rule_value => 0 |
774 |
rule_value => 'restore' |
857 |
} |
775 |
} |
858 |
} |
776 |
} |
859 |
); |
777 |
); |
860 |
my $branchcode2 = $builder->build( { source => 'Branch' } )->{branchcode}; |
778 |
my $specific_proc_rule_restore = $builder->build( |
861 |
my $specific_rule_refund = $builder->build( |
|
|
862 |
{ |
779 |
{ |
863 |
source => 'CirculationRule', |
780 |
source => 'CirculationRule', |
864 |
value => { |
781 |
value => { |
865 |
branchcode => $branchcode2, |
782 |
branchcode => $branchcode3, |
866 |
categorycode => undef, |
783 |
categorycode => undef, |
867 |
itemtype => undef, |
784 |
itemtype => undef, |
868 |
rule_name => 'processingreturn', |
785 |
rule_name => 'processingreturn', |
869 |
rule_value => 'refund' |
786 |
rule_value => 'restore' |
870 |
} |
787 |
} |
871 |
} |
788 |
} |
872 |
); |
789 |
); |
873 |
my $branchcode3 = $builder->build( { source => 'Branch' } )->{branchcode}; |
790 |
|
874 |
my $specific_rule_restore = $builder->build( |
791 |
# Make sure we have an unused branchcode |
|
|
792 |
my $branchcode4 = $builder->build( { source => 'Branch' } )->{branchcode}; |
793 |
my $specific_lost_rule_dummy = $builder->build( |
875 |
{ |
794 |
{ |
876 |
source => 'CirculationRule', |
795 |
source => 'CirculationRule', |
877 |
value => { |
796 |
value => { |
878 |
branchcode => $branchcode3, |
797 |
branchcode => $branchcode4, |
879 |
categorycode => undef, |
798 |
categorycode => undef, |
880 |
itemtype => undef, |
799 |
itemtype => undef, |
881 |
rule_name => 'processingreturn', |
800 |
rule_name => 'lostreturn', |
882 |
rule_value => 'restore' |
801 |
rule_value => 'refund' |
883 |
} |
802 |
} |
884 |
} |
803 |
} |
885 |
); |
804 |
); |
886 |
|
805 |
my $specific_proc_rule_dummy = $builder->build( |
887 |
# Make sure we have an unused branchcode |
|
|
888 |
my $branchcode4 = $builder->build( { source => 'Branch' } )->{branchcode}; |
889 |
my $specific_rule_dummy = $builder->build( |
890 |
{ |
806 |
{ |
891 |
source => 'CirculationRule', |
807 |
source => 'CirculationRule', |
892 |
value => { |
808 |
value => { |
Lines 898-904
subtest 'get_processingreturn_policy() tests' => sub {
Link Here
|
898 |
} |
814 |
} |
899 |
} |
815 |
} |
900 |
); |
816 |
); |
901 |
my $branch_without_rule = $specific_rule_dummy->{ branchcode }; |
817 |
my $branch_without_rule = $specific_lost_rule_dummy->{ branchcode }; |
|
|
818 |
Koha::CirculationRules |
819 |
->search( |
820 |
{ |
821 |
branchcode => $branch_without_rule, |
822 |
categorycode => undef, |
823 |
itemtype => undef, |
824 |
rule_name => 'lostreturn', |
825 |
rule_value => 'refund' |
826 |
} |
827 |
) |
828 |
->next |
829 |
->delete; |
902 |
Koha::CirculationRules |
830 |
Koha::CirculationRules |
903 |
->search( |
831 |
->search( |
904 |
{ |
832 |
{ |
Lines 914-953
subtest 'get_processingreturn_policy() tests' => sub {
Link Here
|
914 |
|
842 |
|
915 |
my $item = $builder->build_sample_item( |
843 |
my $item = $builder->build_sample_item( |
916 |
{ |
844 |
{ |
917 |
homebranch => $specific_rule_restore->{branchcode}, |
845 |
homebranch => $specific_lost_rule_restore->{branchcode}, |
918 |
holdingbranch => $specific_rule_false->{branchcode} |
846 |
holdingbranch => $specific_lost_rule_false->{branchcode} |
919 |
} |
847 |
} |
920 |
); |
848 |
); |
921 |
my $params = { |
849 |
my $params = { |
922 |
return_branch => $specific_rule_refund->{ branchcode }, |
850 |
return_branch => $specific_lost_rule_refund->{ branchcode }, |
923 |
item => $item |
851 |
item => $item |
924 |
}; |
852 |
}; |
925 |
|
853 |
|
926 |
# Specific rules |
854 |
# Specific rules |
927 |
t::lib::Mocks::mock_preference( 'RefundLostOnReturnControl', 'CheckinLibrary' ); |
855 |
t::lib::Mocks::mock_preference( 'RefundLostOnReturnControl', 'CheckinLibrary' ); |
928 |
is( Koha::CirculationRules->get_processingreturn_policy( $params ), |
856 |
is_deeply( Koha::CirculationRules->get_lostreturn_policy( $params ), |
929 |
'refund','Specific rule for checkin branch is applied (refund)'); |
857 |
{ lostreturn => 'refund', processingreturn => 'refund' },'Specific rule for checkin branch is applied (refund)'); |
930 |
|
858 |
|
931 |
t::lib::Mocks::mock_preference( 'RefundLostOnReturnControl', 'ItemHomeBranch' ); |
859 |
t::lib::Mocks::mock_preference( 'RefundLostOnReturnControl', 'ItemHomeBranch' ); |
932 |
is( Koha::CirculationRules->get_processingreturn_policy( $params ), |
860 |
is_deeply( Koha::CirculationRules->get_lostreturn_policy( $params ), |
933 |
'restore','Specific rule for home branch is applied (restore)'); |
861 |
{ lostreturn => 'restore', processingreturn => 'restore' },'Specific rule for home branch is applied (restore)'); |
934 |
|
862 |
|
935 |
t::lib::Mocks::mock_preference( 'RefundLostOnReturnControl', 'ItemHoldingBranch' ); |
863 |
t::lib::Mocks::mock_preference( 'RefundLostOnReturnControl', 'ItemHoldingBranch' ); |
936 |
is( Koha::CirculationRules->get_processingreturn_policy( $params ), |
864 |
is_deeply( Koha::CirculationRules->get_lostreturn_policy( $params ), |
937 |
0,'Specific rule for holding branch is applied (false)'); |
865 |
{ lostreturn => 0, processingreturn => 0 },'Specific rule for holding branch is applied (false)'); |
938 |
|
866 |
|
939 |
# Default rule check |
867 |
# Default rule check |
940 |
t::lib::Mocks::mock_preference( 'RefundLostOnReturnControl', 'CheckinLibrary' ); |
868 |
t::lib::Mocks::mock_preference( 'RefundLostOnReturnControl', 'CheckinLibrary' ); |
941 |
$params->{return_branch} = $branch_without_rule; |
869 |
$params->{return_branch} = $branch_without_rule; |
942 |
is( Koha::CirculationRules->get_processingreturn_policy( $params ), |
870 |
is_deeply( Koha::CirculationRules->get_lostreturn_policy( $params ), |
943 |
'charge','No rule for branch, global rule applied (charge)'); |
871 |
{ lostreturn => 'charge', processingreturn => 'charge' },'No rule for branch, global rule applied (charge)'); |
944 |
|
872 |
|
945 |
# Change the default value just to try |
873 |
# Change the default value just to try |
|
|
874 |
Koha::CirculationRules->search({ branchcode => undef, rule_name => 'lostreturn' })->next->rule_value(0)->store; |
946 |
Koha::CirculationRules->search({ branchcode => undef, rule_name => 'processingreturn' })->next->rule_value(0)->store; |
875 |
Koha::CirculationRules->search({ branchcode => undef, rule_name => 'processingreturn' })->next->rule_value(0)->store; |
947 |
is( Koha::CirculationRules->get_processingreturn_policy( $params ), |
876 |
my $memory_cache = Koha::Cache::Memory::Lite->get_instance; |
948 |
0,'No rule for branch, global rule applied (false)'); |
877 |
$memory_cache->flush(); |
|
|
878 |
is_deeply( Koha::CirculationRules->get_lostreturn_policy( $params ), |
879 |
{ lostreturn => 0, processingreturn => 0 },'No rule for branch, global rule applied (false)'); |
949 |
|
880 |
|
950 |
# No default rule defined check |
881 |
# No default rule defined check |
|
|
882 |
Koha::CirculationRules |
883 |
->search( |
884 |
{ |
885 |
branchcode => undef, |
886 |
categorycode => undef, |
887 |
itemtype => undef, |
888 |
rule_name => 'lostreturn' |
889 |
} |
890 |
) |
891 |
->next |
892 |
->delete; |
893 |
# No default rule defined check |
951 |
Koha::CirculationRules |
894 |
Koha::CirculationRules |
952 |
->search( |
895 |
->search( |
953 |
{ |
896 |
{ |
Lines 959-971
subtest 'get_processingreturn_policy() tests' => sub {
Link Here
|
959 |
) |
902 |
) |
960 |
->next |
903 |
->next |
961 |
->delete; |
904 |
->delete; |
962 |
is( Koha::CirculationRules->get_processingreturn_policy( $params ), |
905 |
is_deeply( Koha::CirculationRules->get_lostreturn_policy( $params ), |
963 |
'refund','No rule for branch, no default rule, fallback default (refund)'); |
906 |
{ lostreturn => 'refund', processingreturn => 'refund' },'No rule for branch, no default rule, fallback default (refund)'); |
964 |
|
907 |
|
965 |
# Fallback to ItemHoldBranch if CheckinLibrary is undefined |
908 |
# Fallback to ItemHoldBranch if CheckinLibrary is undefined |
966 |
$params->{return_branch} = undef; |
909 |
$params->{return_branch} = undef; |
967 |
is( Koha::CirculationRules->get_processingreturn_policy( $params ), |
910 |
is_deeply( Koha::CirculationRules->get_lostreturn_policy( $params ), |
968 |
'restore','return_branch undefined, fallback to ItemHomeBranch rule (restore)'); |
911 |
{ lostreturn => 'restore', processingreturn => 'restore' },'return_branch undefined, fallback to ItemHomeBranch rule (restore)'); |
969 |
|
912 |
|
970 |
$schema->storage->txn_rollback; |
913 |
$schema->storage->txn_rollback; |
971 |
}; |
914 |
}; |
972 |
- |
|
|