blob: 95b212e3b645029fc363e8be89bd43e7b87e608b [file] [log] [blame]
Akron340a9cb2020-05-20 12:55:22 +02001#!/usr/bin/env perl
2use strict;
3use warnings;
4use Test::More;
5use File::Basename;
6use File::Spec::Functions;
Akron1c070452020-05-25 11:28:30 +02007use Data::Dumper;
Akron340a9cb2020-05-20 12:55:22 +02008
9use Test::Output;
10use Mojo::JSON 'decode_json';
11
Akrondd0aa3a2024-04-10 11:03:38 +020012my $script = catfile(dirname(__FILE__), '..', 'script', 'cosmasvc2koralquery');
Akron340a9cb2020-05-20 12:55:22 +020013my $list1 = catfile(dirname(__FILE__), 'data', 'list2.def');
14
15# Check STDOUT
16stdout_like(
17 sub {
Akrona3f74f52024-07-17 17:18:17 +020018 system($script, 'def', $list1);
Akron340a9cb2020-05-20 12:55:22 +020019 },
20 qr!^\{\"\@context\".+?\}$!,
21 "check stdout"
22);
23
24# Check JSON
Akrona3f74f52024-07-17 17:18:17 +020025my $json = decode_json(join('', `$script def $list1`));
Akron340a9cb2020-05-20 12:55:22 +020026
27is($json->{'collection'}->{'@type'}, 'koral:docGroup', 'type');
28is($json->{'collection'}->{'operation'}, 'operation:or', 'operation');
29
30my $op1 = $json->{'collection'}->{'operands'}->[0];
31is($op1->{'@type'}, 'koral:doc', 'type');
32is($op1->{'key'}, 'docSigle', 'key');
33is($op1->{'match'}, 'match:eq', 'match');
34is($op1->{'value'}->[0], "BRZ05/SEP", 'value');
35is($op1->{'value'}->[1], ,"BRZ05/OKT", 'value');
36is($op1->{'value'}->[-1], ,"BRZ08/FEB", 'value');
Akron68746a12020-05-20 15:19:55 +020037
38my $op2 = $json->{'collection'}->{'operands'}->[1];
39is($op2->{'@type'}, 'koral:doc', 'type');
40is($op2->{'key'}, 'textSigle', 'key');
41is($op2->{'match'}, 'match:eq', 'match');
42is($op2->{'value'}->[0], "B19/AUG/01665", 'value');
43is($op2->{'value'}->[1], ,"B19/AUG/01666", 'value');
44
Akron1c070452020-05-25 11:28:30 +020045my $list3 = catfile(dirname(__FILE__), 'data', 'list3.def');
Akron323881c2020-05-20 17:15:42 +020046
Akron34a4f582020-05-27 12:18:57 +020047
Akron323881c2020-05-20 17:15:42 +020048# Check JSON
49# Only return extended area
Akrona3f74f52024-07-17 17:18:17 +020050$json = decode_json(join('', `$script def $list3`));
Akron323881c2020-05-20 17:15:42 +020051
Akron34a4f582020-05-27 12:18:57 +020052is($json->{'collection'}->{'@type'}, 'koral:doc', 'type');
53
54
Akron286b46e2020-05-25 17:07:48 +020055is($json->{'collection'}->{'comment'}, 'name:"VAS-N91 (Stand \"2013\", korr. 2017)"', 'type');
Akron323881c2020-05-20 17:15:42 +020056
Akron34a4f582020-05-27 12:18:57 +020057$op1 = $json->{'collection'};
Akron323881c2020-05-20 17:15:42 +020058is($op1->{'@type'}, 'koral:doc', 'type');
59is($op1->{'key'}, 'textSigle', 'key');
60is($op1->{'match'}, 'match:eq', 'match');
61is($op1->{'value'}->[0], "A00/APR/23232", 'value');
Akron286b46e2020-05-25 17:07:48 +020062is($op1->{'value'}->[1], "A00/APR/23233", 'value');
Akron323881c2020-05-20 17:15:42 +020063
Akron1c070452020-05-25 11:28:30 +020064my $list4 = catfile(dirname(__FILE__), 'data', 'list4.def');
65
66# Only contains intended area
Akrona3f74f52024-07-17 17:18:17 +020067$json = decode_json(join('', `$script def $list4`));
Akron1c070452020-05-25 11:28:30 +020068
69is($json->{'collection'}->{'@type'}, 'koral:docGroup', 'type');
Akron34a4f582020-05-27 12:18:57 +020070is($json->{'collection'}->{'comment'}, 'name:"VAS N91"', 'name');
Akron286b46e2020-05-25 17:07:48 +020071like($json->{'collection'}->{'comment'}, qr!^name:"VAS N91"!, 'name');
Akron1c070452020-05-25 11:28:30 +020072
Akron34a4f582020-05-27 12:18:57 +020073
74my $bz = $json->{'collection'}->{operands}->[0]->{operands}->[0];
75is($bz->{operation}, 'operation:and', 'Intersection');
76is(scalar @{$bz->{operands}}, 3, 'Flatten operands');
77
78my $faz = $json->{'collection'}->{operands}->[0]->{operands}->[1];
79is($faz->{'@type'}, 'koral:doc', 'DocVec');
80is($faz->{value}->[0], 'F97', 'Value');
81is($faz->{value}->[1], 'F99', 'Value');
Akron1c070452020-05-25 11:28:30 +020082
Akron431d9572024-07-18 13:21:02 +020083my $list_long = catfile(dirname(__FILE__), 'data', 'corp-w-short.def');
84$json = decode_json(join('', `$script def $list_long`))->{collection};
85is($json->{'@type'}, 'koral:doc', 'DocVec');
86is($json->{key}, 'textSigle', 'Key');
87is($json->{value}->[0], 'A97/APR/00001', 'Value');
88is($json->{value}->[1], 'A97/APR/00002', 'Value');
89is($json->{value}->[-1], 'A97/APR/01001', 'Value');
90
Akron340a9cb2020-05-20 12:55:22 +020091done_testing;
Akron34a4f582020-05-27 12:18:57 +020092__END__