bug 2503: tests for C4::Circulation
[koha.git] / t / lib / KohaTest / Circulation / MarkIssueReturned.pm
1 package KohaTest::Circulation::MarkIssueReturned;
2 use base qw(KohaTest::Circulation);
3
4 use strict;
5 use warnings;
6
7 use Test::More;
8
9 =head2 basic_usage
10
11 basic usage of C4::Circulation::MarkIssueReturned
12
13 =cut
14
15 sub basic_usage : Test( 4 ) {
16     my $self = shift;
17
18     my $before_issues = C4::Circulation::GetItemIssue( $self->{'items'}[0]{'itemnumber'} );
19     ok( ! defined $before_issues->{'borrowernumber'}, 'our item is not checked out' )
20       or diag( Data::Dumper->Dump( [ $before_issues ], [ 'before_issues' ] ) );
21
22     my $datedue = $self->checkout_first_item();
23     ok( $datedue, "Now it is checked out and due on $datedue" );
24
25     my $after_issues = C4::Circulation::GetItemIssue( $self->{'items'}[0]{'itemnumber'} );
26     is( $after_issues->{'borrowernumber'}, $self->{'memberid'}, 'Our item is checked out to our borrower' )
27       or diag( Data::Dumper->Dump( [ $after_issues ], [ 'after_issues' ] ) );
28
29     C4::Circulation::MarkIssueReturned( $self->{'memberid'}, $self->{'items'}[0]{'itemnumber'} );
30
31     my $after_return = C4::Circulation::GetItemIssue( $self->{'items'}[0]{'itemnumber'} );
32     ok( ! defined $after_return->{'borrowernumber'}, 'The item is no longer checked out' )
33       or diag( Data::Dumper->Dump( [ $after_return ], [ 'after_return' ] ) );
34
35 }
36
37 =head2 set_returndate
38
39 check an item out, then, check it back in, specifying the returndate.
40
41 verify that it's checked back in and the returndate is correct.
42
43 =cut
44
45 sub set_retundate : Test( 7 ) {
46     my $self = shift;
47
48     # It's not checked out to start with
49     my $before_issues = C4::Circulation::GetItemIssue( $self->{'items'}[0]{'itemnumber'} );
50     ok( ! defined $before_issues->{'borrowernumber'}, 'our item is not checked out' )
51       or diag( Data::Dumper->Dump( [ $before_issues ], [ 'before_issues' ] ) );
52
53     # check it out
54     my $datedue = $self->checkout_first_item();
55     ok( $datedue, "Now it is checked out and due on $datedue" );
56
57     # verify that it has been checked out
58     my $after_issues = C4::Circulation::GetItemIssue( $self->{'items'}[0]{'itemnumber'} );
59     is( $after_issues->{'borrowernumber'}, $self->{'memberid'}, 'Our item is checked out to our borrower' )
60       or diag( Data::Dumper->Dump( [ $after_issues ], [ 'after_issues' ] ) );
61
62     # mark it as returned on some date
63     my $returndate = $self->random_date();
64     ok( $returndate, "return this item on $returndate" );
65
66     C4::Circulation::MarkIssueReturned( $self->{'memberid'},
67                                         $self->{'items'}[0]{'itemnumber'},
68                                         undef,
69                                         $returndate );
70
71     # validate that it is no longer checked out.
72     my $after_return = C4::Circulation::GetItemIssue( $self->{'items'}[0]{'itemnumber'} );
73     ok( ! defined $after_return->{'borrowernumber'}, 'The item is no longer checked out' )
74       or diag( Data::Dumper->Dump( [ $after_return ], [ 'after_return' ] ) );
75
76     # grab the history for this item and make sure it looks right
77     my $history = C4::Circulation::GetItemIssues( $self->{'items'}[0]{'itemnumber'}, 1 );
78     is( scalar @$history, 1, 'this item has been checked out one time.' )
79       or diag( Data::Dumper->Dump( [ $history ], [ 'history' ] ) );
80     is( $history->[0]{'returndate'}, $returndate, "...and it was returned on $returndate" );
81     
82 }
83
84
85 1;