3 # This Koha test module is a stub!
4 # Add more tests here!!!
11 use C4
::Serials
::Frequency
;
12 use C4
::Serials
::Numberpattern
;
18 use Test
::More tests
=> 47;
21 use_ok
('C4::Serials');
24 my $dbh = C4
::Context
->dbh;
27 $dbh->{AutoCommit
} = 0;
28 $dbh->{RaiseError
} = 1;
30 my $booksellerid = C4
::Bookseller
::AddBookseller
(
33 address1
=> "bookseller's address",
39 my ($biblionumber, $biblioitemnumber) = AddBiblio
(MARC
::Record
->new, '');
42 my $bpid = AddBudgetPeriod
({
43 budget_period_startdate
=> '01-01-2015',
44 budget_period_enddate
=> '31-12-2015',
45 budget_period_description
=> "budget desc"
48 my $budget_id = AddBudget
({
49 budget_code
=> "ABCD",
50 budget_amount
=> "123.132",
51 budget_name
=> "Périodiques",
52 budget_notes
=> "This is a note",
53 budget_period_id
=> $bpid
56 my $frequency_id = AddSubscriptionFrequency
({ description
=> "Test frequency 1" });
57 my $pattern_id = AddSubscriptionNumberpattern
({
58 label
=> 'Test numberpattern 1',
59 numberingmethod
=> '{X}',
69 my $internalnotes = 'intnotes';
70 my $subscriptionid = NewSubscription
(
71 undef, "", undef, undef, $budget_id, $biblionumber,
72 '2013-01-01', $frequency_id, undef, undef, undef,
73 undef, undef, undef, undef, undef, undef,
74 1, $notes,undef, '2013-01-01', undef, $pattern_id,
75 undef, undef, 0, $internalnotes, 0,
76 undef, undef, 0, undef, '2013-12-31', 0
79 my $subscriptioninformation = GetSubscription
( $subscriptionid );
81 is
( $subscriptioninformation->{notes
}, $notes, 'NewSubscription should set notes' );
82 is
( $subscriptioninformation->{internalnotes
}, $internalnotes, 'NewSubscription should set internalnotes' );
84 my $subscription_history = C4
::Serials
::GetSubscriptionHistoryFromSubscriptionId
($subscriptionid);
85 is
( $subscription_history->{opacnote
}, '', 'NewSubscription should not set subscriptionhistory opacnotes' );
86 is
( $subscription_history->{librariannote
}, '', 'NewSubscription should not set subscriptionhistory librariannotes' );
88 my @subscriptions = SearchSubscriptions
({string
=> $subscriptioninformation->{bibliotitle
}, orderby
=> 'title' });
89 isa_ok
( \
@subscriptions, 'ARRAY' );
91 @subscriptions = SearchSubscriptions
({ issn
=> $subscriptioninformation->{issn
}, orderby
=> 'title' });
92 isa_ok
( \
@subscriptions, 'ARRAY' );
94 @subscriptions = SearchSubscriptions
({ ean
=> $subscriptioninformation->{ean
}, orderby
=> 'title' });
95 isa_ok
( \
@subscriptions, 'ARRAY' );
97 @subscriptions = SearchSubscriptions
({ biblionumber
=> $subscriptioninformation->{bibnum
}, orderby
=> 'title' });
98 isa_ok
( \
@subscriptions, 'ARRAY' );
100 my $frequency = GetSubscriptionFrequency
($subscriptioninformation->{periodicity
});
102 if (not $frequency->{unit
}) {
103 $old_frequency = $frequency->{id
};
104 $frequency->{unit
} = "month";
105 $frequency->{unitsperissue
} = 1;
106 $frequency->{issuesperunit
} = 1;
107 $frequency->{description
} = "Frequency created by t/db_dependant/Serials.t";
108 $subscriptioninformation->{periodicity
} = AddSubscriptionFrequency
($frequency);
110 ModSubscription
( @
$subscriptioninformation{qw(
111 librarian branchcode aqbooksellerid cost aqbudgetid startdate
112 periodicity firstacquidate irregularity numberpattern locale
113 numberlength weeklength monthlength lastvalue1 innerloop1 lastvalue2
114 innerloop2 lastvalue3 innerloop3 status biblionumber callnumber notes
115 letter manualhistory internalnotes serialsadditems staffdisplaycount
116 opacdisplaycount graceperiod location enddate subscriptionid
120 my $expirationdate = GetExpirationDate
($subscriptionid) ;
121 ok
( $expirationdate, "expiration date is not NULL" );
123 ok
(C4
::Serials
::GetSubscriptionHistoryFromSubscriptionId
($subscriptionid), 'test getting history from sub-scription');
125 my ($serials_count, @serials) = GetSerials
($subscriptionid);
126 ok
($serials_count > 0, 'Subscription has at least one serial');
127 my $serial = $serials[0];
129 ok
(C4
::Serials
::GetSerialStatusFromSerialId
($serial->{serialid
}), 'test getting Serial Status From Serial Id');
131 isa_ok
(C4
::Serials
::GetSerialInformation
($serial->{serialid
}), 'HASH', 'test getting Serial Information');
133 # Delete created frequency
134 if ($old_frequency) {
135 my $freq_to_delete = $subscriptioninformation->{periodicity
};
136 $subscriptioninformation->{periodicity
} = $old_frequency;
138 ModSubscription
( @
$subscriptioninformation{qw(
139 librarian branchcode aqbooksellerid cost aqbudgetid startdate
140 periodicity firstacquidate irregularity numberpattern locale
141 numberlength weeklength monthlength lastvalue1 innerloop1 lastvalue2
142 innerloop2 lastvalue3 innerloop3 status biblionumber callnumber notes
143 letter manualhistory internalnotes serialsadditems staffdisplaycount
144 opacdisplaycount graceperiod location enddate subscriptionid
148 DelSubscriptionFrequency
($freq_to_delete);
152 # Test calling subs without parameters
153 is
(C4
::Serials
::AddItem2Serial
(), undef, 'test adding item to serial');
154 is
(C4
::Serials
::UpdateClaimdateIssues
(), undef, 'test updating claim date');
155 is
(C4
::Serials
::GetFullSubscription
(), undef, 'test getting full subscription');
156 is
(C4
::Serials
::PrepareSerialsData
(), undef, 'test preparing serial data');
157 is
(C4
::Serials
::GetSubscriptionsFromBiblionumber
(), undef, 'test getting subscriptions form biblio number');
159 is
(C4
::Serials
::GetSerials
(), undef, 'test getting serials when you enter nothing');
160 is
(C4
::Serials
::GetSerials2
(), undef, 'test getting serials when you enter nothing');
162 is
(C4
::Serials
::GetLatestSerials
(), undef, 'test getting lastest serials');
164 is
(C4
::Serials
::GetDistributedTo
(), undef, 'test getting distributed when nothing is entered');
166 is
(C4
::Serials
::GetNextSeq
(), undef, 'test getting next seq when you enter nothing');
168 is
(C4
::Serials
::GetSeq
(), undef, 'test getting seq when you enter nothing');
170 is
(C4
::Serials
::CountSubscriptionFromBiblionumber
(), undef, 'test counting subscription when nothing is entered');
172 is
(C4
::Serials
::ModSubscriptionHistory
(), undef, 'test modding subscription history');
174 is
(C4
::Serials
::ModSerialStatus
(),undef, 'test modding serials');
176 is
(C4
::Serials
::NewIssue
(), undef, 'test getting 0 when nothing is entered');
178 is
(C4
::Serials
::ItemizeSerials
(),undef, 'test getting nothing when nothing is entered');
180 is
(C4
::Serials
::HasSubscriptionStrictlyExpired
(), undef, 'test if the subscriptions has expired');
181 is
(C4
::Serials
::HasSubscriptionExpired
(), undef, 'test if the subscriptions has expired');
183 is
(C4
::Serials
::GetLateOrMissingIssues
(), undef, 'test getting last or missing issues');
185 is
(C4
::Serials
::removeMissingIssue
(), undef, 'test removing a missing issue');
187 is
(C4
::Serials
::updateClaim
(),undef, 'test updating claim');
189 is
(C4
::Serials
::getsupplierbyserialid
(),undef, 'test getting supplier idea');
191 is
(C4
::Serials
::check_routing
(), undef, 'test checking route');
193 is
(C4
::Serials
::addroutingmember
(),undef, 'test adding route member');
196 # Unit tests for statuses management (Bug 11689)
197 $subscriptionid = NewSubscription
(
198 undef, "", undef, undef, $budget_id, $biblionumber,
199 '2013-01-01', $frequency_id, undef, undef, undef,
200 undef, undef, undef, undef, undef, undef,
201 1, $notes,undef, '2013-01-01', undef, $pattern_id,
202 undef, undef, 0, $internalnotes, 0,
203 undef, undef, 0, undef, '2013-12-31', 0
206 ( $total_issues, @serials ) = C4
::Serials
::GetSerials
( $subscriptionid );
207 is
( $total_issues, 1, "NewSubscription created a first serial" );
208 is
( @serials, 1, "GetSerials returns the serial" );
209 my $subscription = C4
::Serials
::GetSubscription
($subscriptionid);
210 my $pattern = C4
::Serials
::Numberpattern
::GetSubscriptionNumberpattern
($subscription->{numberpattern
});
211 ( $total_issues, @serials ) = C4
::Serials
::GetSerials
( $subscriptionid );
212 my $publisheddate = output_pref
({ dt
=> dt_from_string
, dateformat
=> 'iso', dateonly
=> 1 });
213 ( $total_issues, @serials ) = C4
::Serials
::GetSerials
( $subscriptionid );
214 my $nextpublisheddate = C4
::Serials
::GetNextDate
($subscription, $publisheddate, 1);
215 my @statuses = qw( 2 2 3 3 3 3 3 4 4 41 42 43 44 5 );
218 for my $status ( @statuses ) {
219 my $serialseq = "No.".$counter;
220 my ( $expected_serial ) = GetSerials2
( $subscriptionid, 1 );
221 C4
::Serials
::ModSerialStatus
( $expected_serial->{serialid
}, $serialseq, $publisheddate, $publisheddate, $statuses[$counter], 'an useless note' );
224 # Here we have 15 serials with statuses : 2*2 + 5*3 + 2*4 + 1*41 + 1*42 + 1*43 + 1*44 + 1*5 + 1*1
225 ( $total_issues, @serials ) = C4
::Serials
::GetSerials
( $subscriptionid );
226 is
( $total_issues, @statuses + 1, "GetSerials returns total_issues" );
227 my @arrived_missing = map { my $status = $_->{status
}; ( grep { /^$status$/ } qw( 2 4 41 42 43 44 5 ) ) ?
$_ : () } @serials;
228 my @others = map { my $status = $_->{status
}; ( grep { /^$status$/ } qw( 2 4 41 42 43 44 5 ) ) ?
() : $_ } @serials;
229 is
( @arrived_missing, 5, "GetSerials returns 5 arrived/missing by default" );
230 is
( @others, 6, "GetSerials returns all serials not arrived and not missing" );
232 ( $total_issues, @serials ) = C4
::Serials
::GetSerials
( $subscriptionid, 10 );
233 is
( $total_issues, @statuses + 1, "GetSerials returns total_issues" );
234 @arrived_missing = map { my $status = $_->{status
}; ( grep { /^$status$/ } qw( 2 4 41 42 43 44 5 ) ) ?
$_ : () } @serials;
235 @others = map { my $status = $_->{status
}; ( grep { /^$status$/ } qw( 2 4 41 42 43 44 5 ) ) ?
() : $_ } @serials;
236 is
( @arrived_missing, 9, "GetSerials returns all arrived/missing if count given" );
237 is
( @others, 6, "GetSerials returns all serials not arrived and not missing if count given" );
239 $subscription = C4
::Serials
::GetSubscription
($subscriptionid); # Retrieve the updated subscription
242 for my $am ( @arrived_missing ) {
243 if ( grep {/^$am->{status}$/} qw( 4 41 42 43 44 ) ) {
244 push @serialseqs, $am->{serialseq
}
245 } elsif ( grep {/^$am->{status}$/} qw( 5 ) ) {
246 push @serialseqs, 'not issued ' . $am->{serialseq
};
249 is
( $subscription->{missinglist
}, join('; ', @serialseqs), "subscription missinglist is updated after ModSerialStatus" );