adding subfield mapper stuffs
[migration-tools.git] / Equinox-Migration / t / 02-SubfieldMapper.t
1 #!perl -T
2
3 #use Test::More tests => 33;
4 use Test::More qw(no_plan);
5 use Equinox::Migration::SubfieldMapper;
6
7 # baseline object creation
8 my $sm = Equinox::Migration::SubfieldMapper->new();
9 is(ref $sm, "Equinox::Migration::SubfieldMapper", "self is self");
10
11 # test validation death routines
12 my $tokens = {};
13 eval { $sm->validate($tokens) };
14 is ($@, "Required field missing (line 1)\n", 'nothing there');
15 $tokens = { field => 'foo' };
16 eval { $sm->validate($tokens) };
17 is ($@, "Required field missing (line 1)\n", 'only 1 field');
18 $tokens = { field => 'foo', tag => 99 };
19 eval { $sm->validate($tokens) };
20 is ($@, "Required field missing (line 1)\n", 'only 2 fields');
21
22 $tokens = { field => 'foo', tag => -1, sub => 'a' };
23 eval { $sm->validate($tokens) };
24 is ($@, "Invalid tag (line 1)\n", 'tag value < 0');
25 $tokens = { field => 'foo', tag => 1042, sub => 'a' };
26 eval { $sm->validate($tokens) };
27 is ($@, "Invalid tag (line 1)\n", 'tag value > 999');
28
29 $tokens = { field => 'foo', tag => 650, sub => '%' };
30 eval { $sm->validate($tokens) };
31 is ($@, "Invalid subfield code (line 1)\n", 'non-alphanum subfield');
32 $tokens = { field => 'foo', tag => 650, sub => '' };
33 eval { $sm->validate($tokens) };
34 is ($@, "Invalid subfield code (line 1)\n", 'zero-length subfield');
35 $tokens = { field => 'foo', tag => 650, sub => 'qq' };
36 eval { $sm->validate($tokens) };
37 is ($@, "Invalid subfield code (line 1)\n", 'over-length subfield');
38
39 $tokens = { field => 'foo', tag => 650, sub => 'a', mod => 'bar' };
40 eval { $sm->validate($tokens) };
41 is ($@, "Unknown chunk (line 1)\n", 'Extra, non-comment content');
42
43 # and some which should have no problems
44 $tokens = { field => 'foo', tag => 650, sub => 'a' };
45 eval { $sm->validate($tokens) };
46 is ($@, '', 'should be fine!');
47 $tokens = { field => 'foo', tag => 650, sub => 'a', mod => '#', 'this', 'is', 'a', 'comment' };
48 eval { $sm->validate($tokens) };
49 is ($@, '', 'should be fine!');
50
51 # two more death: dupes
52 $sm->{fields}{foo} = 1;
53 $tokens = { field => 'foo', tag => 650, sub => 'a', mod => '#', 'this', 'is', 'a', 'comment' };
54 eval { $sm->validate($tokens) };
55 is ($@, "Fieldnames must be unique (line 1)\n", 'dupe fieldname');
56 $sm->{tags}{650}{a} = 1;
57 $tokens = { field => 'bar', tag => 650, sub => 'a', mod => '#', 'this', 'is', 'a', 'comment' };
58 eval { $sm->validate($tokens) };
59 is ($@, "Subfields cannot be multimapped (line 1)\n", 'dupe fieldname');
60
61 # test load from file
62 $sm = Equinox::Migration::SubfieldMapper->new( file => "./t/corpus/sm0.txt" );
63 is(ref $sm, "Equinox::Migration::SubfieldMapper", "self is self");
64 is ($sm->{tags}{949}{a}, 'call_number');
65 is ($sm->{tags}{999}{a}, 'call_number_alt');
66
67 is ($sm->has(949), 1, 'has tag');
68 is ($sm->has(999, 'a'), 1, 'has tag and subfield');
69 is ($sm->has('call_number'), 1, 'has fieldname');
70 is ($sm->has('call_number', 949), 1, 'has fieldname');
71 is ($sm->has('call_number', 949, 'a'), 1, 'has fieldname');
72
73
74 is ($sm->{fields}{call_number}{tag}, 949);
75 is ($sm->{fields}{call_number}{sub}, 'a');
76 is ($sm->{fields}{type}{mod}, 0);
77 is ($sm->{fields}{note}{mod}, 'multi');