Lines 21-27
use File::Basename qw/basename/;
Link Here
|
21 |
use Koha::Database; |
21 |
use Koha::Database; |
22 |
use Koha::Illrequestattributes; |
22 |
use Koha::Illrequestattributes; |
23 |
use Koha::Illrequest::Config; |
23 |
use Koha::Illrequest::Config; |
|
|
24 |
use Koha::Biblios; |
24 |
use Koha::Patrons; |
25 |
use Koha::Patrons; |
|
|
26 |
use Koha::ItemTypes; |
27 |
use Koha::Items; |
28 |
use Koha::Libraries; |
25 |
use Koha::AuthorisedValueCategories; |
29 |
use Koha::AuthorisedValueCategories; |
26 |
use Koha::AuthorisedValues; |
30 |
use Koha::AuthorisedValues; |
27 |
use t::lib::Mocks; |
31 |
use t::lib::Mocks; |
Lines 30-36
use Test::MockObject;
Link Here
|
30 |
use Test::MockModule; |
34 |
use Test::MockModule; |
31 |
use Test::Exception; |
35 |
use Test::Exception; |
32 |
|
36 |
|
33 |
use Test::More tests => 11; |
37 |
use Test::More tests => 12; |
34 |
|
38 |
|
35 |
my $schema = Koha::Database->new->schema; |
39 |
my $schema = Koha::Database->new->schema; |
36 |
my $builder = t::lib::TestBuilder->new; |
40 |
my $builder = t::lib::TestBuilder->new; |
Lines 247-253
subtest 'Backend testing (mocks)' => sub {
Link Here
|
247 |
my $patron = $builder->build({ source => 'Borrower' }); |
251 |
my $patron = $builder->build({ source => 'Borrower' }); |
248 |
my $illrq = $builder->build_object({ |
252 |
my $illrq = $builder->build_object({ |
249 |
class => 'Koha::Illrequests', |
253 |
class => 'Koha::Illrequests', |
250 |
value => { borrowernumber => $patron->{borrowernumber} } |
|
|
251 |
}); |
254 |
}); |
252 |
|
255 |
|
253 |
$illrq->_backend($backend); |
256 |
$illrq->_backend($backend); |
Lines 308-314
subtest 'Backend testing (mocks)' => sub {
Link Here
|
308 |
name => 'Completed', |
311 |
name => 'Completed', |
309 |
ui_method_name => 'Mark completed', |
312 |
ui_method_name => 'Mark completed', |
310 |
method => 'mark_completed', |
313 |
method => 'mark_completed', |
311 |
next_actions => [ ], |
314 |
next_actions => [ 'CHK' ], |
312 |
ui_method_icon => 'fa-check', |
315 |
ui_method_icon => 'fa-check', |
313 |
}, |
316 |
}, |
314 |
"Dummy status graph for COMP."); |
317 |
"Dummy status graph for COMP."); |
Lines 673-678
subtest 'Censorship' => sub {
Link Here
|
673 |
$schema->storage->txn_rollback; |
676 |
$schema->storage->txn_rollback; |
674 |
}; |
677 |
}; |
675 |
|
678 |
|
|
|
679 |
subtest 'Checking out' => sub { |
680 |
|
681 |
plan tests => 16; |
682 |
|
683 |
$schema->storage->txn_begin; |
684 |
|
685 |
my $itemtype = $builder->build_object({ class => 'Koha::ItemTypes' }); |
686 |
my $library = $builder->build_object({ class => 'Koha::Libraries' }); |
687 |
my $biblio = $builder->build_object({ class => 'Koha::Biblios' }); |
688 |
my $patron = $builder->build_object({ |
689 |
class => 'Koha::Patrons', |
690 |
value => { category_type => 'x' } |
691 |
}); |
692 |
my $request = $builder->build_object({ |
693 |
class => 'Koha::Illrequests', |
694 |
value => { |
695 |
borrowernumber => $patron->borrowernumber, |
696 |
biblio_id => $biblio->biblionumber |
697 |
} |
698 |
}); |
699 |
|
700 |
# First test that calling check_out without a stage param returns |
701 |
# what's required to build the form |
702 |
my $no_stage = $request->check_out(); |
703 |
is($no_stage->{method}, 'check_out'); |
704 |
is($no_stage->{stage}, 'form'); |
705 |
isa_ok($no_stage->{value}, 'HASH'); |
706 |
isa_ok($no_stage->{value}->{itemtypes}, 'Koha::ItemTypes'); |
707 |
isa_ok($no_stage->{value}->{libraries}, 'Koha::Libraries'); |
708 |
isa_ok($no_stage->{value}->{statistical}, 'Koha::Patrons'); |
709 |
isa_ok($no_stage->{value}->{biblio}, 'Koha::Biblio'); |
710 |
|
711 |
# Now test that form validation works when we supply a 'form' stage |
712 |
# |
713 |
# No item_type |
714 |
my $form_stage_missing_params = $request->check_out({ |
715 |
stage => 'form' |
716 |
}); |
717 |
is_deeply($form_stage_missing_params->{value}->{errors}, { |
718 |
item_type => 1 |
719 |
}); |
720 |
# inhouse passed but not a valid patron |
721 |
my $form_stage_bad_patron = $request->check_out({ |
722 |
stage => 'form', |
723 |
item_type => $itemtype->itemtype, |
724 |
inhouse => 'I_DONT_EXIST' |
725 |
}); |
726 |
is_deeply($form_stage_bad_patron->{value}->{errors}, { |
727 |
inhouse => 1 |
728 |
}); |
729 |
# Too many items attached to biblio |
730 |
my $item1 = $builder->build_object({ |
731 |
class => 'Koha::Items', |
732 |
value => { |
733 |
biblionumber => $biblio->biblionumber, |
734 |
biblioitemnumber => 1 |
735 |
} |
736 |
}); |
737 |
my $item2 = $builder->build_object({ |
738 |
class => 'Koha::Items', |
739 |
value => { |
740 |
biblionumber => $biblio->biblionumber, |
741 |
biblioitemnumber => 2 |
742 |
} |
743 |
}); |
744 |
my $form_stage_two_items = $request->check_out({ |
745 |
stage => 'form', |
746 |
item_type => $itemtype->itemtype, |
747 |
}); |
748 |
is_deeply($form_stage_two_items->{value}->{errors}, { |
749 |
itemcount => 1 |
750 |
}); |
751 |
|
752 |
# Passed validation |
753 |
# |
754 |
# Delete the items we created, so we can test that we can create one |
755 |
Koha::Items->find({ itemnumber => $item1->itemnumber })->delete; |
756 |
Koha::Items->find({ itemnumber => $item2->itemnumber })->delete; |
757 |
# Create a biblioitem |
758 |
my $biblioitem = $builder->build_object({ |
759 |
class => 'Koha::Biblioitems', |
760 |
value => { |
761 |
biblionumber => $biblio->biblionumber |
762 |
} |
763 |
}); |
764 |
# First we pass bad parameters to the item creation to test we're |
765 |
# catching the failure of item creation |
766 |
# Note: This will generate a DBD::mysql error when running this test! |
767 |
my $form_stage_bad_branchcode = $request->check_out({ |
768 |
stage => 'form', |
769 |
item_type => $itemtype->itemtype, |
770 |
branchcode => '---' |
771 |
}); |
772 |
is_deeply($form_stage_bad_branchcode->{value}->{errors}, { |
773 |
item_creation => 1 |
774 |
}); |
775 |
# Now create a proper item |
776 |
my $form_stage_good_branchcode = $request->check_out({ |
777 |
stage => 'form', |
778 |
item_type => $itemtype->itemtype, |
779 |
branchcode => $library->branchcode |
780 |
}); |
781 |
# By default, this item should not be loanable, so check that we're |
782 |
# informed of that fact |
783 |
is_deeply( |
784 |
$form_stage_good_branchcode->{value}->{check_out_errors}, |
785 |
{ |
786 |
error => { |
787 |
NOT_FOR_LOAN => 1, |
788 |
itemtype_notforloan => $itemtype->itemtype |
789 |
} |
790 |
} |
791 |
); |
792 |
# Delete the item that was created |
793 |
$biblio->items->delete; |
794 |
# Now create an itemtype that is loanable |
795 |
my $itemtype_loanable = $builder->build_object({ |
796 |
class => 'Koha::ItemTypes', |
797 |
value => { |
798 |
notforloan => 0 |
799 |
} |
800 |
}); |
801 |
# We need to mock the user environment for AddIssue |
802 |
t::lib::Mocks::mock_userenv({ branchcode => $library->{branchcode} }); |
803 |
my $form_stage_loanable = $request->check_out({ |
804 |
stage => 'form', |
805 |
item_type => $itemtype_loanable->itemtype, |
806 |
branchcode => $library->branchcode |
807 |
}); |
808 |
is($form_stage_loanable->{stage}, 'done_check_out'); |
809 |
isa_ok($patron->checkouts, 'Koha::Checkouts'); |
810 |
is($patron->checkouts->count, 1); |
811 |
is($request->status, 'CHK'); |
812 |
|
813 |
$schema->storage->txn_rollback; |
814 |
}; |
815 |
|
676 |
subtest 'Checking Limits' => sub { |
816 |
subtest 'Checking Limits' => sub { |
677 |
|
817 |
|
678 |
plan tests => 30; |
818 |
plan tests => 30; |
679 |
- |
|
|