Modifying Members : Add Mod and GetMember
[koha.git] / t / lib / KohaTest / Overdues / GetOverdues.pm
1 package KohaTest::Overdues::GetOverdues;
2 use base qw( KohaTest::Overdues );
3
4 use strict;
5 use warnings;
6
7 use C4::Overdues;
8 use Test::More;
9
10 =head3 create_overdue_item
11
12 =cut
13
14 sub startup_60_create_overdue_item : Test( startup => 17 ) {
15     my $self = shift;
16     
17     $self->add_biblios( add_items => 1 );
18     
19     my $biblionumber = $self->{'biblios'}[0];
20     ok( $biblionumber, 'biblionumber' );
21     my @biblioitems = C4::Biblio::GetBiblioItemByBiblioNumber( $biblionumber );
22     ok( scalar @biblioitems > 0, 'there is at least one biblioitem' );
23     my $biblioitemnumber = $biblioitems[0]->{'biblioitemnumber'};
24     ok( $biblioitemnumber, 'got a biblioitemnumber' );
25
26     my $items = C4::Items::GetItemsByBiblioitemnumber( $biblioitemnumber);
27                            
28     my $item = $items->[0];
29     ok( $item->{'itemnumber'}, 'item number' );
30     $self->{'overdueitemnumber'} = $item->{'itemnumber'};
31     
32     # let's use the database to do date math for us.
33     # This is a US date, but that's how C4::Dates likes it, apparently.
34     my $dbh = C4::Context->dbh();
35     my $date_list = $dbh->selectcol_arrayref( q( select DATE_FORMAT( FROM_DAYS( TO_DAYS( NOW() ) - 6 ), '%m/%d/%Y' ) ) );
36     my $six_days_ago = shift( @$date_list );
37     
38     my $duedate = C4::Dates->new( $six_days_ago );
39     # diag( Data::Dumper->Dump( [ $duedate ], [ 'duedate' ] ) );
40     
41     ok( $item->{'barcode'}, 'barcode' )
42       or diag( Data::Dumper->Dump( [ $item ], [ 'item' ] ) );
43     # my $item_from_barcode = C4::Items::GetItem( undef, $item->{'barcode'} );
44     # diag( Data::Dumper->Dump( [ $item_from_barcode ], [ 'item_from_barcode' ] ) );
45
46     ok( $self->{'memberid'}, 'memberid' );
47     my $borrower = C4::Members::GetMember( borrowernumber=>$self->{'memberid'} );
48     ok( $borrower->{'borrowernumber'}, 'borrowernumber' );
49     
50     my ( $issuingimpossible, $needsconfirmation ) = C4::Circulation::CanBookBeIssued( $borrower, $item->{'barcode'}, $duedate, 0 );
51     # diag( Data::Dumper->Dump( [ $issuingimpossible, $needsconfirmation ], [ qw( issuingimpossible needsconfirmation ) ] ) );
52     is( keys %$issuingimpossible, 0, 'issuing is not impossible' );
53     is( keys %$needsconfirmation, 0, 'issuing needs no confirmation' );
54
55     C4::Circulation::AddIssue( $borrower, $item->{'barcode'}, $duedate );
56 }
57
58 sub basic_usage : Test( 2 ) {
59     my $self = shift;
60
61     my $overdues = C4::Overdues::Getoverdues();
62     isa_ok( $overdues, 'ARRAY' );
63     is( scalar @$overdues, 1, 'found our one overdue book' );
64 }
65
66 sub limit_minimum_and_maximum : Test( 2 ) {
67     my $self = shift;
68
69     my $overdues = C4::Overdues::Getoverdues( { minimumdays => 1, maximumdays => 100 } );
70     isa_ok( $overdues, 'ARRAY' );
71     is( scalar @$overdues, 1, 'found our one overdue book' );
72 }
73
74 sub limit_and_do_not_find_it : Test( 2 ) {
75     my $self = shift;
76
77     my $overdues = C4::Overdues::Getoverdues( { minimumdays => 1, maximumdays => 2 } );
78     isa_ok( $overdues, 'ARRAY' );
79     is( scalar @$overdues, 0, 'there are no overdue books in that range.' );
80 }
81
82 =pod
83
84 sub run_overduenotices_script : Test( 1 ) {
85     my $self = shift;
86
87     # make sure member wants alerts
88     C4::Members::Attributes::UpdateBorrowerAttribute($self->{'memberid'},
89                                                      { code  => 'PREDEmail',
90                                                        value => '1' } );
91     
92     # we're screwing with C4::Circulation::GetUpcomingIssues by passing in a negative number.
93     C4::Members::Attributes::UpdateBorrowerAttribute($self->{'memberid'},
94                                                      { code  => 'PREDDAYS',
95                                                        value => '-6' } );
96     
97     
98     my $before_count = $self->count_message_queue();
99
100     my $output = qx( ../misc/cronjobs/advance_notices.pl -c );
101     
102     my $after_count = $self->count_message_queue();
103     is( $after_count, $before_count + 1, 'there is one more message in the queue than there used to be.' )
104       or diag $output;
105     
106 }
107
108
109 =cut
110
111 sub count_message_queue {
112     my $self = shift;
113
114     my $dbh = C4::Context->dbh();
115     my $statement = q( select count(0) from message_queue where status = 'pending' );
116     my $countlist = $dbh->selectcol_arrayref( $statement );
117     return $countlist->[0];
118 }
119
120 1;
121
122
123
124
125
126