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 => 43;
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}',
68 my $subscriptionid = NewSubscription(
69 undef, "", undef, undef, $budget_id, $biblionumber,
70 '2013-01-01', $frequency_id, undef, undef, undef,
71 undef, undef, undef, undef, undef, undef,
72 1, "notes",undef, '2013-01-01', undef, $pattern_id,
73 undef, undef, 0, "intnotes", 0,
74 undef, undef, 0, undef, '2013-12-31', 0
77 my $subscriptioninformation = GetSubscription( $subscriptionid );
79 my @subscriptions = GetSubscriptions( $$subscriptioninformation{bibliotitle} );
80 isa_ok( \@subscriptions, 'ARRAY' );
82 @subscriptions = GetSubscriptions( undef, $$subscriptioninformation{issn} );
83 isa_ok( \@subscriptions, 'ARRAY' );
85 @subscriptions = GetSubscriptions( undef, undef, $$subscriptioninformation{ean} );
86 isa_ok( \@subscriptions, 'ARRAY' );
88 @subscriptions = GetSubscriptions( undef, undef, undef, $$subscriptioninformation{bibnum} );
89 isa_ok( \@subscriptions, 'ARRAY' );
91 my $frequency = GetSubscriptionFrequency($subscriptioninformation->{periodicity});
93 if (not $frequency->{unit}) {
94 $old_frequency = $frequency->{id};
95 $frequency->{unit} = "month";
96 $frequency->{unitsperissue} = 1;
97 $frequency->{issuesperunit} = 1;
98 $frequency->{description} = "Frequency created by t/db_dependant/Serials.t";
99 $subscriptioninformation->{periodicity} = AddSubscriptionFrequency($frequency);
101 ModSubscription( @$subscriptioninformation{qw(
102 librarian branchcode aqbooksellerid cost aqbudgetid startdate
103 periodicity firstacquidate irregularity numberpattern locale
104 numberlength weeklength monthlength lastvalue1 innerloop1 lastvalue2
105 innerloop2 lastvalue3 innerloop3 status biblionumber callnumber notes
106 letter manualhistory internalnotes serialsadditems staffdisplaycount
107 opacdisplaycount graceperiod location enddate subscriptionid
111 my $expirationdate = GetExpirationDate($subscriptionid) ;
112 ok( $expirationdate, "expiration date is not NULL" );
114 ok(C4::Serials::GetSubscriptionHistoryFromSubscriptionId($subscriptionid), 'test getting history from sub-scription');
116 my ($serials_count, @serials) = GetSerials($subscriptionid);
117 ok($serials_count > 0, 'Subscription has at least one serial');
118 my $serial = $serials[0];
120 ok(C4::Serials::GetSerialStatusFromSerialId($serial->{serialid}), 'test getting Serial Status From Serial Id');
122 isa_ok(C4::Serials::GetSerialInformation($serial->{serialid}), 'HASH', 'test getting Serial Information');
124 # Delete created frequency
125 if ($old_frequency) {
126 my $freq_to_delete = $subscriptioninformation->{periodicity};
127 $subscriptioninformation->{periodicity} = $old_frequency;
129 ModSubscription( @$subscriptioninformation{qw(
130 librarian branchcode aqbooksellerid cost aqbudgetid startdate
131 periodicity firstacquidate irregularity numberpattern locale
132 numberlength weeklength monthlength lastvalue1 innerloop1 lastvalue2
133 innerloop2 lastvalue3 innerloop3 status biblionumber callnumber notes
134 letter manualhistory internalnotes serialsadditems staffdisplaycount
135 opacdisplaycount graceperiod location enddate subscriptionid
139 DelSubscriptionFrequency($freq_to_delete);
143 # Test calling subs without parameters
144 is(C4::Serials::AddItem2Serial(), undef, 'test adding item to serial');
145 is(C4::Serials::UpdateClaimdateIssues(), undef, 'test updating claim date');
146 is(C4::Serials::GetFullSubscription(), undef, 'test getting full subscription');
147 is(C4::Serials::PrepareSerialsData(), undef, 'test preparing serial data');
148 is(C4::Serials::GetSubscriptionsFromBiblionumber(), undef, 'test getting subscriptions form biblio number');
150 is(C4::Serials::GetSerials(), undef, 'test getting serials when you enter nothing');
151 is(C4::Serials::GetSerials2(), undef, 'test getting serials when you enter nothing');
153 is(C4::Serials::GetLatestSerials(), undef, 'test getting lastest serials');
155 is(C4::Serials::GetDistributedTo(), undef, 'test getting distributed when nothing is entered');
157 is(C4::Serials::GetNextSeq(), undef, 'test getting next seq when you enter nothing');
159 is(C4::Serials::GetSeq(), undef, 'test getting seq when you enter nothing');
161 is(C4::Serials::CountSubscriptionFromBiblionumber(), undef, 'test counting subscription when nothing is entered');
163 is(C4::Serials::ModSubscriptionHistory(), undef, 'test modding subscription history');
165 is(C4::Serials::ModSerialStatus(),undef, 'test modding serials');
167 is(C4::Serials::NewIssue(), undef, 'test getting 0 when nothing is entered');
169 is(C4::Serials::ItemizeSerials(),undef, 'test getting nothing when nothing is entered');
171 is(C4::Serials::HasSubscriptionStrictlyExpired(), undef, 'test if the subscriptions has expired');
172 is(C4::Serials::HasSubscriptionExpired(), undef, 'test if the subscriptions has expired');
174 is(C4::Serials::GetLateOrMissingIssues(), undef, 'test getting last or missing issues');
176 is(C4::Serials::removeMissingIssue(), undef, 'test removing a missing issue');
178 is(C4::Serials::updateClaim(),undef, 'test updating claim');
180 is(C4::Serials::getsupplierbyserialid(),undef, 'test getting supplier idea');
182 is(C4::Serials::check_routing(), undef, 'test checking route');
184 is(C4::Serials::addroutingmember(),undef, 'test adding route member');
187 # Unit tests for statuses management (Bug 11689)
188 $subscriptionid = NewSubscription(
189 undef, "", undef, undef, $budget_id, $biblionumber,
190 '2013-01-01', $frequency_id, undef, undef, undef,
191 undef, undef, undef, undef, undef, undef,
192 1, "notes",undef, '2013-01-01', undef, $pattern_id,
193 undef, undef, 0, "intnotes", 0,
194 undef, undef, 0, undef, '2013-12-31', 0
197 ( $total_issues, @serials ) = C4::Serials::GetSerials( $subscriptionid );
198 is( $total_issues, 1, "NewSubscription created a first serial" );
199 is( @serials, 1, "GetSerials returns the serial" );
200 my $subscription = C4::Serials::GetSubscription($subscriptionid);
201 my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subscription->{numberpattern});
202 ( $total_issues, @serials ) = C4::Serials::GetSerials( $subscriptionid );
203 my $publisheddate = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
204 ( $total_issues, @serials ) = C4::Serials::GetSerials( $subscriptionid );
205 my $nextpublisheddate = C4::Serials::GetNextDate($subscription, $publisheddate, 1);
206 my @statuses = qw( 2 2 3 3 3 3 3 4 4 41 42 43 44 5 );
209 for my $status ( @statuses ) {
210 my $serialseq = "No.".$counter;
211 my ( $expected_serial ) = GetSerials2( $subscriptionid, 1 );
212 C4::Serials::ModSerialStatus( $expected_serial->{serialid}, $serialseq, $publisheddate, $publisheddate, $statuses[$counter], 'an useless note' );
215 # 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
216 ( $total_issues, @serials ) = C4::Serials::GetSerials( $subscriptionid );
217 is( $total_issues, @statuses + 1, "GetSerials returns total_issues" );
218 my @arrived_missing = map { my $status = $_->{status}; ( grep { /^$status$/ } qw( 2 4 41 42 43 44 5 ) ) ? $_ : () } @serials;
219 my @others = map { my $status = $_->{status}; ( grep { /^$status$/ } qw( 2 4 41 42 43 44 5 ) ) ? () : $_ } @serials;
220 is( @arrived_missing, 5, "GetSerials returns 5 arrived/missing by default" );
221 is( @others, 6, "GetSerials returns all serials not arrived and not missing" );
223 ( $total_issues, @serials ) = C4::Serials::GetSerials( $subscriptionid, 10 );
224 is( $total_issues, @statuses + 1, "GetSerials returns total_issues" );
225 @arrived_missing = map { my $status = $_->{status}; ( grep { /^$status$/ } qw( 2 4 41 42 43 44 5 ) ) ? $_ : () } @serials;
226 @others = map { my $status = $_->{status}; ( grep { /^$status$/ } qw( 2 4 41 42 43 44 5 ) ) ? () : $_ } @serials;
227 is( @arrived_missing, 9, "GetSerials returns all arrived/missing if count given" );
228 is( @others, 6, "GetSerials returns all serials not arrived and not missing if count given" );
230 $subscription = C4::Serials::GetSubscription($subscriptionid); # Retrieve the updated subscription
233 for my $am ( @arrived_missing ) {
234 if ( grep {/^$am->{status}$/} qw( 4 41 42 43 44 ) ) {
235 push @serialseqs, $am->{serialseq}
236 } elsif ( grep {/^$am->{status}$/} qw( 5 ) ) {
237 push @serialseqs, 'not issued ' . $am->{serialseq};
240 is( $subscription->{missinglist}, join('; ', @serialseqs), "subscription missinglist is updated after ModSerialStatus" );