X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=t%2Fdb_dependent%2FSerials.t;h=de623fe73112b473e6fe02a64a84296d6f7642f8;hb=eb68ca2af2c9ebf32091f98380dbbd07cd7ff2e6;hp=e848280525374119ec535b7557e95ad470387faa;hpb=44062c07b7703190b46701a3fa31665d998eadfb;p=koha.git diff --git a/t/db_dependent/Serials.t b/t/db_dependent/Serials.t index e848280525..de623fe731 100755 --- a/t/db_dependent/Serials.t +++ b/t/db_dependent/Serials.t @@ -11,10 +11,13 @@ use C4::Serials; use C4::Serials::Frequency; use C4::Serials::Numberpattern; use C4::Debug; -use C4::Bookseller; use C4::Biblio; use C4::Budgets; +use C4::Items; use Koha::DateUtils; +use Koha::Acquisition::Booksellers; +use t::lib::Mocks; +use t::lib::TestBuilder; use Test::More tests => 48; BEGIN { @@ -27,7 +30,15 @@ my $dbh = C4::Context->dbh; $dbh->{AutoCommit} = 0; $dbh->{RaiseError} = 1; -my $booksellerid = C4::Bookseller::AddBookseller( +my $builder = t::lib::TestBuilder->new(); + +# This could/should be used for all untested methods +my @methods = ('updateClaim'); +can_ok('C4::Serials', @methods); + +$dbh->do(q|UPDATE marc_subfield_structure SET value_builder="callnumber.pl" where kohafield="items.itemcallnumber" and frameworkcode=''|); + +my $bookseller = Koha::Acquisition::Bookseller->new( { name => "my vendor", address1 => "bookseller's address", @@ -106,6 +117,7 @@ if (not $frequency->{unit}) { $frequency->{issuesperunit} = 1; $frequency->{description} = "Frequency created by t/db_dependant/Serials.t"; $subscriptioninformation->{periodicity} = AddSubscriptionFrequency($frequency); + $subscriptioninformation->{serialsadditems} = 1; ModSubscription( @$subscriptioninformation{qw( librarian branchcode aqbooksellerid cost aqbudgetid startdate @@ -130,6 +142,37 @@ ok(C4::Serials::GetSerialStatusFromSerialId($serial->{serialid}), 'test getting isa_ok(C4::Serials::GetSerialInformation($serial->{serialid}), 'HASH', 'test getting Serial Information'); +subtest 'Values should not be erased on editing' => sub { + + plan tests => 1; + + ( $biblionumber, $biblioitemnumber ) = get_biblio(); + my ( $icn_tag, $icn_sf ) = GetMarcFromKohaField( 'items.itemcallnumber', '' ); + my ( $it_tag, $it_sf ) = GetMarcFromKohaField( 'items.itype', '' ); + + my $itemtype = $builder->build( { source => 'Itemtype' } )->{itemtype}; + my $itemcallnumber = 'XXXmy itemcallnumberXXX'; + + my $item_record = new MARC::Record; + + $item_record->append_fields( + MARC::Field->new( '080', '', '', "a" => "default" ), + MARC::Field->new( + $icn_tag, '', '', + $icn_sf => $itemcallnumber, + $it_sf => $itemtype + ) + ); + my ( undef, undef, $itemnumber ) = C4::Items::AddItemFromMarc( $item_record, $biblionumber ); + my $serialid = C4::Serials::NewIssue( "serialseq", $subscriptionid, $biblionumber, + 1, undef, undef, "publisheddatetext", "notes" ); + C4::Serials::AddItem2Serial( $serialid, $itemnumber ); + my $serial_info = C4::Serials::GetSerialInformation($serialid); + my ($itemcallnumber_info) = grep { $_->{kohafield} eq 'items.itemcallnumber' } + @{ $serial_info->{items}[0]->{iteminformation} }; + like( $itemcallnumber_info->{marc_value}, qr|value="$itemcallnumber"| ); +}; + # Delete created frequency if ($old_frequency) { my $freq_to_delete = $subscriptioninformation->{periodicity}; @@ -148,10 +191,8 @@ if ($old_frequency) { DelSubscriptionFrequency($freq_to_delete); } - # Test calling subs without parameters is(C4::Serials::AddItem2Serial(), undef, 'test adding item to serial'); -is(C4::Serials::UpdateClaimdateIssues(), undef, 'test updating claim date'); is(C4::Serials::GetFullSubscription(), undef, 'test getting full subscription'); is(C4::Serials::PrepareSerialsData(), undef, 'test preparing serial data'); is(C4::Serials::GetSubscriptionsFromBiblionumber(), undef, 'test getting subscriptions form biblio number'); @@ -182,9 +223,47 @@ is(C4::Serials::HasSubscriptionExpired(), undef, 'test if the subscriptions has is(C4::Serials::GetLateOrMissingIssues(), undef, 'test getting last or missing issues'); -is(C4::Serials::updateClaim(),undef, 'test updating claim'); - -is(C4::Serials::getsupplierbyserialid(),undef, 'test getting supplier idea'); +subtest 'test_updateClaim' => sub { + plan tests => 11; + + my $today = output_pref({ dt => dt_from_string, dateonly => 1 }); + # Given ... nothing much + # When ... Then ... + my $result_0 = C4::Serials::updateClaim(undef); + is($result_0, undef, 'Got the expected undef from update claim with nothin'); + + # Given ... 3 serial. 2 of them updated. + my $serialids_1 = [90980, 90981]; + my $claimdate_1 = dt_from_string('2001-01-13'); # arbitrary date some time in the past. + my $claim_count_1 = 5; + Koha::Serial->new( { serialid => $serialids_1->[0], serialseq => 'serialseq', subscriptionid => $subscriptionid, status => 3, + biblionumber => 12345, claimdate => $claimdate_1, claims_count => $claim_count_1, } )->store(); + Koha::Serial->new( { serialid => $serialids_1->[1], serialseq => 'serialseq', subscriptionid => $subscriptionid, status => 3, + biblionumber => 12345, claimdate => $claimdate_1, claims_count => $claim_count_1, } )->store(); + Koha::Serial->new( { serialid => 90982, serialseq => 'serialseq', subscriptionid => $subscriptionid, status => 3, + biblionumber => 12345, claimdate => $claimdate_1, claims_count => $claim_count_1, } )->store(); + + # When ... + my $result_1 = C4::Serials::updateClaim($serialids_1); + + # Then ... + is($result_1, 2, 'Got the expected 2 from update claim with 2 serial ids'); + + my @late_or_missing_issues_1_0 = C4::Serials::GetLateOrMissingIssues(undef, $serialids_1->[0]); + is($late_or_missing_issues_1_0[0]->{claimdate}, $today, 'Got the expected first different claim date from update claim'); + is($late_or_missing_issues_1_0[0]->{claims_count}, $claim_count_1+1, 'Got the expected first claim count from update claim'); + is($late_or_missing_issues_1_0[0]->{status}, 7, 'Got the expected first claim status from update claim'); + + my @late_or_missing_issues_1_1 = C4::Serials::GetLateOrMissingIssues(undef, $serialids_1->[1]); + is($late_or_missing_issues_1_1[0]->{claimdate}, $today, 'Got the expected second different claim date from update claim'); + is($late_or_missing_issues_1_1[0]->{claims_count}, $claim_count_1+1, 'Got the expected second claim count from update claim'); + is($late_or_missing_issues_1_1[0]->{status}, 7, 'Got the expected second claim status from update claim'); + + my @late_or_missing_issues_1_2 = C4::Serials::GetLateOrMissingIssues(undef, 90982); + is($late_or_missing_issues_1_2[0]->{claimdate}, output_pref({ dt => $claimdate_1, dateonly => 1}), 'Got the expected unchanged claim date from update claim'); + is($late_or_missing_issues_1_2[0]->{claims_count}, $claim_count_1, 'Got the expected unchanged claim count from update claim'); + is($late_or_missing_issues_1_2[0]->{status}, 3, 'Got the expected unchanged claim status from update claim'); +}; is(C4::Serials::check_routing(), undef, 'test checking route'); @@ -221,7 +300,7 @@ for my $status ( @statuses ) { } # 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 my @serialsByStatus = C4::Serials::findSerialsByStatus(2,$subscriptionid); -is(@serialsByStatus,2,"findSerialByStatus returns all serials with chosen status"); +is(@serialsByStatus,2,"findSerialsByStatus returns all serials with chosen status"); ( $total_issues, @serials ) = C4::Serials::GetSerials( $subscriptionid ); is( $total_issues, @statuses + 1, "GetSerials returns total_issues" ); my @arrived_missing = map { my $status = $_->{status}; ( grep { /^$status$/ } qw( 2 4 41 42 43 44 5 ) ) ? $_ : () } @serials; @@ -273,3 +352,13 @@ subtest "Do not generate an expected if one already exists" => sub { }; $dbh->rollback; + +sub get_biblio { + my $bib = MARC::Record->new(); + $bib->append_fields( + MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'), + MARC::Field->new('245', ' ', ' ', a => 'Silence in the library'), + ); + my ($bibnum, $bibitemnum) = AddBiblio($bib, ''); + return ($bibnum, $bibitemnum); +}