Apple-AppStoreConnect

 view release on metacpan or  search on metacpan

t/simple.t  view on Meta::CPAN

    );

    my $url = $ua->{calls}->[0]->[0];
    like($url, qr#^\Q${base}apps/1/betaFeedbackScreenshotSubmissions\E\?#, 'Screenshot request URL');
    like($url, qr/(?:^|[?&])filter\[appPlatform\]=IOS(?:&|$)/, 'Screenshot request uses app platform filter');
    like($url, qr/(?:^|[?&])limit=50(?:&|$)/, 'Screenshot request defaults limit');
    like($url, qr/(?:^|[?&])sort=-createdDate(?:&|$)/, 'Screenshot request defaults newest first');
    like(
        $url,
        qr/(?:^|[?&])fields\[betaFeedbackScreenshotSubmissions\]=createdDate,comment,appPlatform,screenshots(?:&|$)/,
        'Screenshot request passes fields'
    );
};

subtest 'get_beta_feedback_crash_submissions' => sub {
    my $ua = TestUA->new(
        '{"data":[{"type":"betaFeedbackCrashSubmissions","id":"c1","attributes":{"createdDate":"2026-06-24T11:00:00Z","comment":"Crashed","deviceModel":"iPhone16,2"}}]}',
        '{"data":{"type":"betaCrashLogs","id":"cl1","attributes":{"logText":"stack trace"}}}'
    );
    my $asc3 = Apple::AppStoreConnect->new(%params, key => $key, ua => $ua);

    my %request_params = (
        'fields[betaFeedbackCrashSubmissions]' => 'createdDate,comment,deviceModel',
        'fields[betaCrashLogs]'                => 'logText',
    );
    my $out = $asc3->get_beta_feedback_crash_submissions(
        id        => 1,
        limit     => 25,
        crash_log => 1,
        params    => \%request_params,
    );

    is(
        $out,
        [
            {
                id          => 'c1',
                type        => 'betaFeedbackCrashSubmissions',
                createdDate => '2026-06-24T11:00:00Z',
                comment     => 'Crashed',
                deviceModel => 'iPhone16,2',
                crashLog    => {
                    id      => 'cl1',
                    type    => 'betaCrashLogs',
                    logText => 'stack trace',
                },
            },
        ],
        'Crash feedback with crash log returned'
    );

    my $list_url = $ua->{calls}->[0]->[0];
    like($list_url, qr#^\Q${base}apps/1/betaFeedbackCrashSubmissions\E\?#, 'Crash request URL');
    like($list_url, qr/(?:^|[?&])limit=25(?:&|$)/, 'Crash request uses limit');
    like($list_url, qr/(?:^|[?&])sort=-createdDate(?:&|$)/, 'Crash request defaults newest first');
    like(
        $list_url,
        qr/(?:^|[?&])fields\[betaFeedbackCrashSubmissions\]=createdDate,comment,deviceModel(?:&|$)/,
        'Crash request passes fields'
    );
    unlike($list_url, qr/fields\[betaCrashLogs\]/, 'Crash log fields not passed to list endpoint');
    is(
        $ua->{calls}->[1]->[0],
        "${base}betaFeedbackCrashSubmissions/c1/crashLog?fields[betaCrashLogs]=logText",
        'Crash log request passes crash log fields'
    );
    is(
        \%request_params,
        {
            'fields[betaFeedbackCrashSubmissions]' => 'createdDate,comment,deviceModel',
            'fields[betaCrashLogs]'                => 'logText',
        },
        'Caller params are not modified'
    );
};

subtest 'Test cover' => sub {
    is(Apple::AppStoreConnect::_build_url(url => $base, params=>{}), $base, "Blank params");

    if ($] >= 5.012) {
        my $asc2 = Apple::AppStoreConnect->new(%params, key => $key, curl => 1);
        my $out  = $asc2->get_apps();
        is($out, $ref2, 'Received curl response');

        $json = '"test"';
        $out  = $asc->get_apps();
        is($out, "test", 'No ref response');
    }
};

done_testing;



( run in 1.324 second using v1.01-cache-2.11-cpan-2e0ccfb7a10 )