Bug 8523: Display auth hierarchies w/all marcflavours
[koha.git] / t / AuthoritiesMarc.t
index d59b43b..9c8c1fd 100755 (executable)
@@ -6,9 +6,93 @@
 use strict;
 use warnings;
 
-use Test::More tests => 1;
+use Test::More tests => 5;
+use Test::MockModule;
+use MARC::Record;
 
 BEGIN {
         use_ok('C4::AuthoritiesMarc');
 }
 
+# We are now going to be testing the authorities hierarchy code, and
+# therefore need to pretend that we have consistent data in our database
+my $module = new Test::MockModule('C4::AuthoritiesMarc');
+$module->mock('GetHeaderAuthority', sub {
+    return {'authtrees' => ''};
+});
+$module->mock('AddAuthorityTrees', sub {
+    return;
+});
+$module->mock('GetAuthority', sub {
+    my ($authid) = @_;
+    my $record = MARC::Record->new();
+    if ($authid eq '1') {
+        $record->add_fields(
+            [ '001', '1' ],
+            [ '151', ' ', ' ', a => 'United States' ]
+            );
+    } elsif ($authid eq '2') {
+        $record->add_fields(
+            [ '001', '2' ],
+            [ '151', ' ', ' ', a => 'New York (State)' ],
+            [ '551', ' ', ' ', a => 'United States', w => 'g', 9 => '1' ]
+            );
+    } elsif ($authid eq '3') {
+        $record->add_fields(
+            [ '001', '3' ],
+            [ '151', ' ', ' ', a => 'New York (City)' ],
+            [ '551', ' ', ' ', a => 'New York (State)', w => 'g', 9 => '2' ]
+            );
+    } elsif ($authid eq '4') {
+        $record->add_fields(
+            [ '001', '4' ],
+            [ '151', ' ', ' ', a => 'New York (City)' ],
+            [ '551', ' ', ' ', a => 'New York (State)', w => 'g' ]
+            );
+    } else {
+        undef $record;
+    }
+    return $record;
+});
+
+is(BuildAuthHierarchies(3, 1), '1,2,3', "Built linked authtrees hierarchy string");
+
+my $expectedhierarchy = [ [ {
+        'authid' => '1',
+        'value' => 'United States',
+        'class' => 'child0',
+        'children' => [ {
+            'authid' => '2',
+            'value' => 'New York (State)',
+            'class' => 'child1',
+            'children' => [ {
+                'authid' => '3',
+                'current_value' => 1,
+                'value' => 'New York (City)',
+                'class' => 'child2',
+                'children' => [],
+                'parents' => [ {
+                    'authid' => '2',
+                    'value' => 'New York (State)'
+                } ]
+            } ],
+            'parents' => [ {
+                'authid' => '1',
+                'value' => 'United States'
+            } ]
+        } ],
+        'parents' => []
+} ] ];
+
+is_deeply(GenerateHierarchy(3), $expectedhierarchy, "Generated hierarchy data structure for linked hierarchy");
+
+is(BuildAuthHierarchies(4, 1), '4', "Built unlinked authtrees hierarchy string");
+$expectedhierarchy = [ [ {
+    'authid' => '4',
+    'current_value' => 1,
+    'value' => 'New York (City)',
+    'class' => 'child0',
+    'children' => [],
+    'parents' => []
+} ] ];
+is_deeply(GenerateHierarchy(4), $expectedhierarchy, "Generated hierarchy data structure for unlinked hierarchy");