Convert-Pheno
view release on metacpan or search on metacpan
t/21-term-audit.t view on Meta::CPAN
cmp_ok( scalar @lines, '>', 1, 'gzipped terminology audit TSV contains at least one mapped row' );
}
{
my $audit_file = temp_output_file( suffix => '.xlsx', dir => $tmpdir );
my $convert = build_convert(
in_file => 't/csv2bff/in/csv_data.csv',
mapping_file => 't/csv2bff/in/csv_mapping.yaml',
sep => ',',
out_file => temp_output_file(),
method => 'csv2bff',
term_audit_file => $audit_file,
);
my $data = $convert->csv2bff;
ok( ref $data eq 'ARRAY' && @{$data}, 'csv2bff still returns data when XLSX terminology audit is enabled' );
ok( -f $audit_file, 'XLSX terminology audit is written when requested' );
my $workbook_xml = slurp_zip_member( $audit_file, 'xl/workbook.xml' );
like( $workbook_xml, qr/name="Summary"/, 'XLSX audit contains a Summary sheet' );
like( $workbook_xml, qr/name="Terminology Audit"/, 'XLSX audit contains a Terminology Audit sheet' );
my $shared_strings = slurp_zip_member( $audit_file, 'xl/sharedStrings.xml' );
like( $shared_strings, qr/decision_reason/, 'XLSX audit contains decision provenance columns' );
like( $shared_strings, qr/review_action/, 'XLSX audit contains an explicit review recommendation' );
like( $shared_strings, qr/Colors prioritize review/, 'XLSX summary explains how to interpret colors' );
like( $shared_strings, qr/Technical audit columns are present but hidden/, 'XLSX summary explains its focused default view' );
my $audit_sheet = slurp_zip_member( $audit_file, 'xl/worksheets/sheet2.xml' );
like( $audit_sheet, qr/<pane\b/, 'XLSX audit freezes its header and source columns' );
like( $audit_sheet, qr/<autoFilter\b/, 'XLSX audit enables filtering' );
like( $audit_sheet, qr/<conditionalFormatting\b/, 'XLSX audit color-codes rows by review category' );
like( $audit_sheet, qr/hidden="1"/, 'XLSX audit hides technical columns by default' );
}
{
my $audit_file = temp_output_file( suffix => '.xlsx', dir => $tmpdir );
my $writer = Convert::Pheno::Audit::Terminology->new(
path => $audit_file,
config => {
search => 'exact',
text_similarity_method => 'cosine',
min_text_similarity_score => 0.8,
levenshtein_weight => 0.1,
},
);
$writer->write_row(
{
row => 1,
source_value => '=1+1',
match_status => 'matched',
decision_reason => 'exact_match',
lookup_resolution => 'exact',
retrieval_path => 'exact_lookup',
best_candidate_score => 1,
}
);
$writer->close;
my $shared_strings = slurp_zip_member( $audit_file, 'xl/sharedStrings.xml' );
like( $shared_strings, qr/=1\+1/, 'XLSX audit preserves formula-like source text as a string' );
my $audit_sheet = slurp_zip_member( $audit_file, 'xl/worksheets/sheet2.xml' );
unlike( $audit_sheet, qr/<f>/, 'XLSX audit does not create formulas from source values' );
}
throws_ok(
sub {
local *STDERR;
open STDERR, '>', \my $stderr
or die "Could not capture STDERR: $!";
build_cli_request(
argv => [
'-icsv', 't/csv2bff/in/csv_data.csv',
'--mapping-file', 't/csv2bff/in/csv_mapping.yaml',
'-obff', 'individuals.json',
'--search-audit-tsv', 'legacy.tsv',
],
usage_error => sub { die @_ },
schema_file => 'share/schema/mapping-v2.json',
out_dir => $tmpdir,
color => 1,
);
},
qr/Invalid command-line arguments/,
'the replaced --search-audit-tsv option is rejected'
);
throws_ok(
sub {
local *STDERR;
open STDERR, '>', \my $stderr
or die "Could not capture STDERR: $!";
build_cli_request(
argv => [
'-icsv', 't/csv2bff/in/csv_data.csv',
'--mapping-file', 't/csv2bff/in/csv_mapping.yaml',
'-obff', 'individuals.json',
'--term-audit-tsv', 'legacy.tsv',
],
usage_error => sub { die @_ },
schema_file => 'share/schema/mapping-v2.json',
out_dir => $tmpdir,
color => 1,
);
},
qr/Invalid command-line arguments/,
'the superseded --term-audit-tsv option is rejected'
);
{
my $audit_file = temp_output_file( suffix => '.tsv', dir => $tmpdir );
my $self = bless(
{
current_row => 4,
term_audit_file => $audit_file,
search => 'fuzzy',
text_similarity_method => 'cosine',
min_text_similarity_score => 0.8,
levenshtein_weight => 0.1,
},
'Convert::Pheno'
);
record_term_audit(
( run in 1.297 second using v1.01-cache-2.11-cpan-364913b4093 )