Convert-Pheno

 view release on metacpan or  search on metacpan

t/19-cli-regression.t  view on Meta::CPAN

}

sub run_cli {
    my (@cmd) = @_;
    my ( $fh, $log_file ) = tempfile( DIR => $tmpdir, SUFFIX => '.cli.log', UNLINK => 1 );
    my $pid = fork();
    die 'fork failed' unless defined $pid;

    if ( $pid == 0 ) {
        open STDOUT, '>&', $fh or die "dup STDOUT failed: $!";
        open STDERR, '>&', $fh or die "dup STDERR failed: $!";
        exec @cmd or die "exec failed: $!";
    }

    waitpid( $pid, 0 );
    seek $fh, 0, 0;
    local $/;
    my $output = <$fh>;
    close $fh;

    return ( $? >> 8, $output );
}

for my $case (@cases) {
  SKIP: {
        skip 'CLI file comparisons are unreliable on Windows', 2 if IS_WINDOWS;
        skip q{share/db/ohdsi.db is required for this CLI OMOP test}, 2
          if $case->{requires_db} && !has_ohdsi_db();

        my $tmp_file = temp_output_file( suffix => $case->{suffix}, dir => $tmpdir );
        my @cmd      = map { $_ eq '__OUT__' ? $tmp_file : $_ } @{ $case->{cmd} };
        unshift @cmd, $^X, $cli;
        push @cmd, '-O', '--test';

        my $actual_file = $case->{entity_output}
          ? File::Spec->catfile( $tmpdir, $case->{entity_output} )
          : $tmp_file;

        my ( $status, $output ) = run_cli(@cmd);
        diag($output) if $status != 0 && defined $output && length $output;
        is( $status, 0, "CLI $case->{name} exits successfully" );
        ok(
            compare_case_output( $case->{compare}, $case->{expected}, $actual_file ),
            "CLI $case->{name} matches reference output",
        );
    }
}

SKIP: {
    skip 'CLI file comparisons are unreliable on Windows', 2 if IS_WINDOWS;

    my $tmp_file  = temp_output_file( suffix => '.json', dir => $tmpdir );
    my $input_file = temp_output_file( suffix => '.json', dir => $tmpdir );

    my $payload = {
        patient      => { id => 'openehr-patient-2' },
        compositions => [
            load_json_file('t/openehr2bff/in/gecco_personendaten.json'),
            load_json_file('t/openehr2bff/in/ips_canonical.json'),
            load_json_file('t/openehr2bff/in/laboratory_report.json'),
            load_json_file('t/openehr2bff/in/compo_corona.json'),
        ],
    };
    write_json_file( $input_file, $payload );

    my @cmd = ( $^X, $cli, '-iopenehr', $input_file, '-opxf', $tmp_file, '-O', '--test' );
    my ( $exit, $output ) = run_cli(@cmd);

    is( $exit, 0, 'CLI openehr2pxf exits successfully' )
      or diag $output;
    ok(
        structured_files_match( 't/openehr2pxf/out/pxf.json', $tmp_file ),
        'CLI openehr2pxf matches reference output'
    );
}

SKIP: {
    skip 'CLI file comparisons are unreliable on Windows', 2 if IS_WINDOWS;

    my $tmp_file = temp_output_file( suffix => '.json', dir => $tmpdir );
    my @cmd = (
        $^X, $cli,
        '-ibff', 't/bff2pxf/in/individuals.json',
        '-opxf', $tmp_file,
        '--default-vital-status', 'UNKNOWN_STATUS',
        '-O',
        '--test',
    );

    my ( $status, $output ) = run_cli(@cmd);
    diag($output) if $status != 0 && defined $output && length $output;
    is( $status, 0, 'CLI bff2pxf accepts --default-vital-status' );

    my $pxf = load_json_file($tmp_file);
    is(
        $pxf->[0]{subject}{vitalStatus}{status},
        'UNKNOWN_STATUS',
        'CLI bff2pxf applies the configured default vitalStatus when no source value is available',
    );
}

done_testing();



( run in 0.536 second using v1.01-cache-2.11-cpan-39bf76dae61 )