testing changes
[migration-tools.git] / Equinox-Migration / t / 03-MapDrivenMARCXMLProc.t
index 3c3540c..eeffcce 100644 (file)
@@ -2,9 +2,93 @@
 
 #use Test::More tests => 39;
 use Test::More qw(no_plan);
-use Equinox::Migration::MapDrivenXMLProc;
+use Equinox::Migration::MapDrivenMARCXMLProc;
+
+# fails
+eval { my $mp =
+         Equinox::Migration::MapDrivenMARCXMLProc->new(marcfile => 't/corpus/mdmp-0.txt') };
+is ($@, "Argument 'mapfile' must be specified\n", 'no mapfile');
+
+eval { my $mp =
+         Equinox::Migration::MapDrivenMARCXMLProc->new(mapfile => 't/corpus/mdmpmap-00.txt') };
+is ($@, "Argument 'marcfile' must be specified\n", 'no marcfile');
+
+eval { my $mp = Equinox::Migration::MapDrivenMARCXMLProc->new };
+is ($@, "Argument 'mapfile' must be specified\n", 'no mapfile');
+
 
 # baseline object creation
-my $sm = Equinox::Migration::MapDrivenXMLProc->new();
-is(ref $sm, "Equinox::Migration::MapDrivenXMLProc", "self is self");
+my $mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt',
+                                                        mapfile  => 't/corpus/mdmpmap-00.txt',
+                                                      );
+is(ref $mp, "Equinox::Migration::MapDrivenMARCXMLProc", "self is self");
+# parsing
+#
+# with map-00, only the 999$a should be captured
+# 903$a will *always* be captured, of course
+my $rec = $mp->parse_record;
+is (defined $rec, 1);
+is ($rec->{egid}, 9000000, '903 captured');
+is ($rec->{tags}[0]{tag}, 999, 'first (only) tag should be 999');
+is ($rec->{tags}[0]{uni}{a}, "MYS DEM", 'single-ocurrance subfield "a" should be "MYS DEM"');
+is ($rec->{tags}[0]{uni}{b}, undef, 'only one uni subfield defined');
+is ($rec->{tags}[0]{multi},  undef, 'no multi subfields were defined');
+is ($rec->{tags}[1],         undef, 'Only one tag in map');
+is ($rec->{bib},             undef, 'No bib-level fields in map');
+# let's go ahead and look at the rest of the file
+$rec = $mp->parse_record;
+is ($rec->{egid}, 9000001, '903 #2');
+is ($rec->{tags}[0]{tag}, 999, 'tag id 2');
+is ($rec->{tags}[0]{uni}{a}, "MYS 2", 'subfield value 2');
+$rec = $mp->parse_record;
+is ($rec->{egid}, 9000002, '903 #3');
+is ($rec->{tags}[0]{tag}, 999, 'tag id 3');
+is ($rec->{tags}[0]{uni}{a}, "FOO BAR", 'subfield value 3');
+$rec = $mp->parse_record;
+is ($rec->{egid}, 9000003, '903 #4');
+is ($rec->{tags}[0]{tag}, 999, 'tag id 4');
+is ($rec->{tags}[0]{uni}{a}, "FIC DEV", 'subfield value 4');
+$rec = $mp->parse_record;
+is ($rec, 0, 'no more records');
+
+# with map-01,  999$a and 999$q are captured. q only exists on the second
+# record; the others should the placeholder value of ''
+$mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt',
+                                                     mapfile  => 't/corpus/mdmpmap-01.txt',
+                                                     sample   => [ 999 ]
+                                                   );
+$rec = $mp->parse_record;
+is ($rec->{tags}[0]{uni}{a}, "MYS DEM", '999$a');
+is ($rec->{tags}[0]{uni}{q}, "", '999$q doesnt exist here');
+is ($rec->{tags}[0]{uni}{j}, undef, 'we shouldnt have captured this, even if it does exist');
+$rec = $mp->parse_record;
+is ($rec->{tags}[0]{uni}{a}, "MYS 2", '999$a');
+is ($rec->{tags}[0]{uni}{q}, "TEST", '999$q does exist here');
+# process other two records and check the unmapped data stuffs
+$rec = $mp->parse_record;
+$rec = $mp->parse_record;
+my $unmapped = $mp->{data}{umap};
+is (defined $unmapped->{999}, 1);
+is (defined $unmapped->{999}{x}, 1);
+is ($unmapped->{999}{x}{value}, 'MYSTERY', 'Should be the first seen value');
+is ($unmapped->{999}{x}{count}, 7, 'One real in each record, plus 3 synthetic in last rec');
+is ($unmapped->{999}{x}{rcnt}, 4, 'Occurs in all records');
+is ($unmapped->{999}{s}{rcnt}, 3, 'Was removed from one record');
+
+# map-02 adds 999$x *not* as multi, producing a fatal error on the last record
+$mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt',
+                                                     mapfile  => 't/corpus/mdmpmap-02.txt');
+$rec = $mp->parse_record;
+$rec = $mp->parse_record;
+$rec = $mp->parse_record;
+eval { $rec = $mp->parse_record };
+is ($@, "Multiple occurances of a non-multi field: 999x at rec 4\n", '999$x not declared multi, but is');
+
+# map-03 has 999$s as required, producing a fatal on record X
+$mp = Equinox::Migration::MapDrivenMARCXMLProc->new( marcfile => 't/corpus/mdmp-0.txt',
+                                                     mapfile  => 't/corpus/mdmpmap-03.txt');
+eval { $rec = $mp->parse_record };
+is ($@, "Required mapping 999s not found in rec 1\n", '999$s removed from this record');
+eval { $rec = $mp->parse_record };
+is ($@, "", '999$s exists here tho');