Bug 17600: Standardize our EXPORT_OK
[srvgit] / t / db_dependent / OAI / Sets.t
index 6bc08da..4dfd80b 100755 (executable)
 
 use Modern::Perl;
 
-use Test::More tests => 147;
+use Test::More tests => 153;
 use Test::MockModule;
 use Test::Warn;
 use MARC::Record;
 
 use Koha::Database;
-use C4::Biblio;
-use C4::OAI::Sets;
+use C4::Biblio qw( GetMarcBiblio );
+use C4::OAI::Sets qw( AddOAISet GetOAISets GetOAISet GetOAISetBySpec ModOAISet ModOAISetMappings GetOAISetsMappings GetOAISetMappings AddOAISetsBiblios GetOAISetsBiblio ModOAISetsBiblios DelOAISet DelOAISetsBiblio UpdateOAISetsBiblio CalcOAISetsBiblio );
 
 use t::lib::TestBuilder;
+use t::lib::Mocks;
 
 my $schema  = Koha::Database->new->schema;
 $schema->storage->txn_begin;
@@ -349,11 +350,13 @@ is ($mappings->{$set2_id}->[0]->{operator}, 'equal', 'operator field is "equal"'
 is ($mappings->{$set2_id}->[0]->{marcvalue}, 'myOtherMarcValue', 'marcvalue field is "myOtherMarcValue"');
 
 
-# ---------- Testing AddOAISetsBiblios ----------
+# ---------- Testing AddOAISetsBiblios with OAI-PMH:AutoUpdateSets disabled ----------
 ok (!defined(AddOAISetsBiblios), 'AddOAISetsBiblios without argument is undef');
 ok (!defined(AddOAISetsBiblios(my $arg=[])), 'AddOAISetsBiblios with a no HASH argument is undef');
 ok (defined(AddOAISetsBiblios($arg={})), 'AddOAISetsBiblios with a HASH argument is def');
 
+t::lib::Mocks::mock_preference( 'OAI-PMH:AutoUpdateSets', 0 );
+
 # Create a biblio instance for testing
 my $biblio_1 = $builder->build_sample_biblio({ author => 'Moffat, Steven' });
 my $biblionumber1 = $biblio_1->biblionumber;
@@ -394,6 +397,29 @@ $sth->execute($set2_id);
 $count = $sth->rows;
 is ($count, '0', '$set_id2 has 0 biblio');
 
+# ---------- Testing AddOAISetsBiblios with OAI-PMH:AutoUpdateSets enabled ----------
+
+t::lib::Mocks::mock_preference( 'OAI-PMH:AutoUpdateSets', 1 );
+
+my $biblio_3 = $builder->build_sample_biblio({ author => 'Moffat, Steven' });
+my $biblionumber3 = $biblio_3->biblionumber;
+isa_ok(\$biblionumber3, 'SCALAR', '$biblionumber3 is a SCALAR');
+
+$sth = $dbh->prepare("SELECT count(*) FROM oai_sets_biblios");
+$sth->execute;
+$bibliosCount = $sth->fetchrow_array;
+is ($bibliosCount, 3, 'There are 3 biblios in oai_sets_biblios');
+
+#testing biblio for set1_id
+$sth = $dbh->prepare("SELECT * FROM oai_sets_biblios WHERE set_id = ?");
+$sth->execute($set1_id);
+$count = $sth->rows;
+is ($count, '3', '$set_id1 has 3 biblio');
+
+$sth->execute($set1_id);
+$line = ${ $sth->fetchall_arrayref( {} ) }[2];
+is($line->{set_id}, $set1_id, "set_id is good");
+is($line->{biblionumber}, $biblionumber3, "biblionumber is good");
 
 # ---------- Testing GetOAISetsBiblio -----------
 $oai_sets = GetOAISetsBiblio($biblionumber1);
@@ -534,6 +560,59 @@ is($oai_setsVH->[0]->{id}, $setVH_id, 'id is ok');
 is($oai_setsVH->[0]->{spec}, $setVH->{spec}, 'id is ok');
 is($oai_setsVH->[0]->{name}, $setVH->{name}, 'id is ok');
 
+subtest 'OAI-PMH:AutoUpdateSetsEmbedItemData' => sub {
+
+    plan tests => 6;
+
+    t::lib::Mocks::mock_preference( 'OAI-PMH:AutoUpdateSetsEmbedItemData', 0 );
+
+    #Create a set
+    my $setFIC = {
+        'spec' => 'Set where collection code is FIC',
+        'name' => 'FIC'
+    };
+    my $setFIC_id = AddOAISet($setFIC);
+
+    #Create mappings : 'ccode' should be 'FIC'
+    my $mappingsFIC;
+    $mappingsFIC = [
+        {
+            marcfield    => '952',
+            marcsubfield => '8',
+            operator     => 'equal',
+            marcvalue    => 'FIC'
+        }
+    ];
+    ModOAISetMappings( $setFIC_id, $mappingsFIC );
+
+    # Create biblio with 'FIC' item
+    my $biblio_FIC = $builder->build_sample_biblio();
+    my $item       = $builder->build_sample_item(
+        {
+            biblionumber => $biblio_FIC->biblionumber,
+            ccode        => 'FIC'
+        }
+    );
+
+    #Update
+    my $recordFIC = GetMarcBiblio( { biblionumber => $biblio_FIC->biblionumber } );
+    UpdateOAISetsBiblio( $biblio_FIC->biblionumber, $recordFIC );
+
+    #is biblio attached to setFIC ?
+    my $oai_setsFIC = GetOAISetsBiblio( $biblio_FIC->biblionumber );
+    is( $oai_setsFIC->[0]->{id},   undef, 'id is ok' );
+    is( $oai_setsFIC->[0]->{spec}, undef, 'id is ok' );
+    is( $oai_setsFIC->[0]->{name}, undef, 'id is ok' );
+
+    t::lib::Mocks::mock_preference( 'OAI-PMH:AutoUpdateSetsEmbedItemData', 1 );
+    UpdateOAISetsBiblio( $biblio_FIC->biblionumber, $recordFIC );
+
+    #is biblio attached to setFIC ?
+    $oai_setsFIC = GetOAISetsBiblio( $biblio_FIC->biblionumber );
+    is( $oai_setsFIC->[0]->{id},   $setFIC_id,      'id is ok' );
+    is( $oai_setsFIC->[0]->{spec}, $setFIC->{spec}, 'id is ok' );
+    is( $oai_setsFIC->[0]->{name}, $setFIC->{name}, 'id is ok' );
+};
 
 # ---------- Testing CalcOAISetsBiblio ----------
 ok (!defined(CalcOAISetsBiblio), 'CalcOAISetsBiblio without argument is undef');