Lines 19-31
Link Here
|
19 |
|
19 |
|
20 |
use Modern::Perl; |
20 |
use Modern::Perl; |
21 |
|
21 |
|
22 |
use Test::More tests => 11; |
22 |
use Test::More tests => 12; |
|
|
23 |
use Test::Exception; |
23 |
|
24 |
|
24 |
use t::lib::TestBuilder; |
25 |
use t::lib::TestBuilder; |
25 |
use t::lib::Mocks; |
26 |
use t::lib::Mocks; |
26 |
|
27 |
|
|
|
28 |
use C4::Circulation; |
29 |
|
30 |
use Koha::Biblios; |
27 |
use Koha::Database; |
31 |
use Koha::Database; |
28 |
use Koha::DateUtils qw(dt_from_string); |
32 |
use Koha::DateUtils qw(dt_from_string); |
|
|
33 |
use Koha::Items; |
29 |
|
34 |
|
30 |
my $schema = Koha::Database->schema; |
35 |
my $schema = Koha::Database->schema; |
31 |
my $builder = t::lib::TestBuilder->new; |
36 |
my $builder = t::lib::TestBuilder->new; |
Lines 582-586
subtest 'filter_by_current & filter_by_cancelled' => sub {
Link Here
|
582 |
is( $orders->filter_by_cancelled->count, 1); |
587 |
is( $orders->filter_by_cancelled->count, 1); |
583 |
|
588 |
|
584 |
|
589 |
|
|
|
590 |
$schema->storage->txn_rollback; |
591 |
}; |
592 |
|
593 |
subtest 'cancel() tests' => sub { |
594 |
|
595 |
plan tests => 32; |
596 |
|
597 |
$schema->storage->txn_begin; |
598 |
|
599 |
# Scenario: |
600 |
# * order with one item attached |
601 |
# * the item is on loan |
602 |
# * delete_biblio is passed |
603 |
# => order is not cancelled |
604 |
# => item in order is not removed |
605 |
# => biblio in order is not removed |
606 |
# => message about not being able to delete |
607 |
|
608 |
my $item = $builder->build_sample_item; |
609 |
my $biblio_id = $item->biblio->id; |
610 |
my $order = $builder->build_object( |
611 |
{ |
612 |
class => 'Koha::Acquisition::Orders', |
613 |
value => { |
614 |
orderstatus => 'new', |
615 |
biblionumber => $item->biblio->id, |
616 |
datecancellationprinted => undef, |
617 |
cancellationreason => undef, |
618 |
} |
619 |
} |
620 |
)->reset_messages; # reset them as TestBuilder doesn't call new |
621 |
$order->add_item( $item->id ); |
622 |
|
623 |
my $patron = $builder->build_object({ class => 'Koha::Patrons' }); |
624 |
t::lib::Mocks::mock_userenv( |
625 |
{ patron => $patron, branchcode => $patron->branchcode } ); |
626 |
|
627 |
# Add a checkout so cancelling fails because od 'book_on_loan' |
628 |
C4::Circulation::AddIssue( $patron->unblessed, $item->barcode ); |
629 |
|
630 |
my $result = $order->cancel({ reason => 'Some reason' }); |
631 |
# refresh the order object |
632 |
$order->discard_changes; |
633 |
|
634 |
is( $result, $order, 'self is returned' ); |
635 |
is( $order->orderstatus, 'cancelled', 'Order is not marked as cancelled' ); |
636 |
isnt( $order->datecancellationprinted, undef, 'datecancellationprinted is not undef' ); |
637 |
is( $order->cancellationreason, 'Some reason', 'cancellationreason is set' ); |
638 |
is( ref(Koha::Items->find($item->id)), 'Koha::Item', 'The item is present' ); |
639 |
is( ref(Koha::Biblios->find($biblio_id)), 'Koha::Biblio', 'The biblio is present' ); |
640 |
my @messages = @{ $order->messages }; |
641 |
is( $messages[0]->message, 'error_delitem', 'An error message is attached to the order' ); |
642 |
|
643 |
# Scenario: |
644 |
# * order with one item attached |
645 |
# * the item is no longer on loan |
646 |
# * delete_biblio not passed |
647 |
# => order is cancelled |
648 |
# => item in order is removed |
649 |
# => biblio remains untouched |
650 |
|
651 |
C4::Circulation::AddReturn( $item->barcode ); |
652 |
|
653 |
$order->reset_messages; |
654 |
$order->cancel({ reason => 'Some reason' }) |
655 |
->discard_changes; |
656 |
|
657 |
is( $order->orderstatus, 'cancelled', 'Order is marked as cancelled' ); |
658 |
isnt( $order->datecancellationprinted, undef, 'datecancellationprinted is set' ); |
659 |
is( $order->cancellationreason, 'Some reason', 'cancellationreason is undef' ); |
660 |
is( Koha::Items->find($item->id), undef, 'The item is no longer present' ); |
661 |
is( ref(Koha::Biblios->find($biblio_id)), 'Koha::Biblio', 'The biblio is present' ); |
662 |
@messages = @{ $order->messages }; |
663 |
is( scalar @messages, 0, 'No messages' ); |
664 |
|
665 |
# Scenario: |
666 |
# * order with one item attached |
667 |
# * biblio has another item |
668 |
# => order is cancelled |
669 |
# => item in order is removed |
670 |
# => the extra item remains untouched |
671 |
# => biblio remains untouched |
672 |
|
673 |
my $item_1 = $builder->build_sample_item; |
674 |
$biblio_id = $item_1->biblio->id; |
675 |
my $item_2 = $builder->build_sample_item({ biblionumber => $biblio_id }); |
676 |
$order = $builder->build_object( |
677 |
{ |
678 |
class => 'Koha::Acquisition::Orders', |
679 |
value => { |
680 |
orderstatus => 'new', |
681 |
biblionumber => $biblio_id, |
682 |
datecancellationprinted => undef, |
683 |
cancellationreason => undef, |
684 |
} |
685 |
} |
686 |
)->reset_messages; |
687 |
$order->add_item( $item_1->id ); |
688 |
|
689 |
$order->cancel({ reason => 'Some reason', delete_biblio => 1 }) |
690 |
->discard_changes; |
691 |
|
692 |
is( $order->orderstatus, 'cancelled', 'Order is marked as cancelled' ); |
693 |
isnt( $order->datecancellationprinted, undef, 'datecancellationprinted is set' ); |
694 |
is( $order->cancellationreason, 'Some reason', 'cancellationreason is undef' ); |
695 |
is( Koha::Items->find($item_1->id), undef, 'The item is no longer present' ); |
696 |
is( ref(Koha::Items->find($item_2->id)), 'Koha::Item', 'The item is still present' ); |
697 |
is( ref(Koha::Biblios->find($biblio_id)), 'Koha::Biblio', 'The biblio is still present' ); |
698 |
@messages = @{ $order->messages }; |
699 |
is( $messages[0]->message, 'error_delbiblio', 'Cannot delete biblio and it gets notified' ); |
700 |
|
701 |
# Scenario: |
702 |
# * order with one item attached |
703 |
# * there's another order pointing to the biblio |
704 |
# => order is cancelled |
705 |
# => item in order is removed |
706 |
# => biblio remains untouched |
707 |
# => biblio delete error notified |
708 |
|
709 |
$item = $builder->build_sample_item; |
710 |
$biblio_id = $item->biblio->id; |
711 |
$order = $builder->build_object( |
712 |
{ |
713 |
class => 'Koha::Acquisition::Orders', |
714 |
value => { |
715 |
orderstatus => 'new', |
716 |
biblionumber => $biblio_id, |
717 |
datecancellationprinted => undef, |
718 |
cancellationreason => undef, |
719 |
} |
720 |
} |
721 |
)->reset_messages; |
722 |
$order->add_item( $item->id ); |
723 |
|
724 |
# Add another order |
725 |
$builder->build_object( |
726 |
{ |
727 |
class => 'Koha::Acquisition::Orders', |
728 |
value => { |
729 |
orderstatus => 'new', |
730 |
biblionumber => $biblio_id, |
731 |
datecancellationprinted => undef, |
732 |
cancellationreason => undef, |
733 |
} |
734 |
} |
735 |
); |
736 |
|
737 |
$order->cancel({ reason => 'Some reason', delete_biblio => 1 }) |
738 |
->discard_changes; |
739 |
|
740 |
is( $order->orderstatus, 'cancelled', 'Order is marked as cancelled' ); |
741 |
isnt( $order->datecancellationprinted, undef, 'datecancellationprinted is set' ); |
742 |
is( $order->cancellationreason, 'Some reason', 'cancellationreason is undef' ); |
743 |
is( Koha::Items->find($item->id), undef, 'The item is no longer present' ); |
744 |
is( ref(Koha::Biblios->find($biblio_id)), 'Koha::Biblio', 'The biblio is still present' ); |
745 |
@messages = @{ $order->messages }; |
746 |
is( $messages[0]->message, 'error_delbiblio', 'Cannot delete biblio and it gets notified' ); |
747 |
|
748 |
# Scenario: |
749 |
# * order with one item attached |
750 |
# * there's a subscription on the biblio |
751 |
# => order is cancelled |
752 |
# => item in order is removed |
753 |
# => biblio remains untouched |
754 |
# => biblio delete error notified |
755 |
|
756 |
$item = $builder->build_sample_item; |
757 |
$biblio_id = $item->biblio->id; |
758 |
$order = $builder->build_object( |
759 |
{ |
760 |
class => 'Koha::Acquisition::Orders', |
761 |
value => { |
762 |
orderstatus => 'new', |
763 |
biblionumber => $biblio_id, |
764 |
datecancellationprinted => undef, |
765 |
cancellationreason => undef, |
766 |
} |
767 |
} |
768 |
)->reset_messages; |
769 |
$order->add_item( $item->id ); |
770 |
|
771 |
# Add a subscription |
772 |
$builder->build_object( |
773 |
{ |
774 |
class => 'Koha::Subscriptions', |
775 |
value => { |
776 |
biblionumber => $biblio_id, |
777 |
} |
778 |
} |
779 |
); |
780 |
|
781 |
$order->cancel({ reason => 'Some reason', delete_biblio => 1 }) |
782 |
->discard_changes; |
783 |
|
784 |
is( $order->orderstatus, 'cancelled', 'Order is marked as cancelled' ); |
785 |
isnt( $order->datecancellationprinted, undef, 'datecancellationprinted is set' ); |
786 |
is( $order->cancellationreason, 'Some reason', 'cancellationreason is undef' ); |
787 |
is( Koha::Items->find($item->id), undef, 'The item is no longer present' ); |
788 |
is( ref(Koha::Biblios->find($biblio_id)), 'Koha::Biblio', 'The biblio is still present' ); |
789 |
@messages = @{ $order->messages }; |
790 |
is( $messages[0]->message, 'error_delbiblio', 'Cannot delete biblio and it gets notified' ); |
791 |
|
585 |
$schema->storage->txn_rollback; |
792 |
$schema->storage->txn_rollback; |
586 |
}; |
793 |
}; |
587 |
- |
|
|