Apple-AppStoreConnect

 view release on metacpan or  search on metacpan

t/simple.t  view on Meta::CPAN

    my $ua = TestUA->new(
        '{"data":[{"type":"appStoreVersions","id":"v1","attributes":{"versionString":"1.0"}}]}',
        '{"data":[{"type":"appStoreVersionLocalizations","id":"l1","attributes":{"locale":"en-US","whatsNew":"One"}}]}'
    );
    my $asc3 = Apple::AppStoreConnect->new(%params, key => $key, ua => $ua);

    my $out = $asc3->get_app_store_versions(id => 1, localizations => 'en-US');

    is(
        $out->[0]->{localizations},
        [
            {
                id       => 'l1',
                type     => 'appStoreVersionLocalizations',
                locale   => 'en-US',
                whatsNew => 'One',
            },
        ],
        'Only requested locale returned'
    );
    like(
        $ua->{calls}->[1]->[0],
        qr#^\Q${base}appStoreVersions/v1/appStoreVersionLocalizations\E\?(limit=200&filter\[locale\]=en-US|filter\[locale\]=en-US&limit=200)$#,
        'Locale filter passed to localizations request'
    );
};

subtest 'get_app_store_versions localization fields' => sub {
    my $ua = TestUA->new(
        '{"data":[{"type":"appStoreVersions","id":"v1","attributes":{"versionString":"1.0"}}]}',
        '{"data":[{"type":"appStoreVersionLocalizations","id":"l1","attributes":{"locale":"en-US","whatsNew":"One"}}]}'
    );
    my $asc3 = Apple::AppStoreConnect->new(%params, key => $key, ua => $ua);

    my $out = $asc3->get_app_store_versions(
        id                  => 1,
        localization_fields => 'locale,whatsNew',
    );

    is(
        $out->[0]->{localizations},
        [
            {
                id       => 'l1',
                type     => 'appStoreVersionLocalizations',
                locale   => 'en-US',
                whatsNew => 'One',
            },
        ],
        'Localization fields imply localizations'
    );
    like(
        $ua->{calls}->[1]->[0],
        qr#^\Q${base}appStoreVersions/v1/appStoreVersionLocalizations\E\?(limit=200&fields\[appStoreVersionLocalizations\]=locale,whatsNew|fields\[appStoreVersionLocalizations\]=locale,whatsNew&limit=200)$#,
        'Localization fields passed to localizations request'
    );
};

subtest 'get_beta_feedback_screenshot_submissions' => sub {
    my $ua = TestUA->new(
        '{"data":[{"type":"betaFeedbackScreenshotSubmissions","id":"s1","attributes":{"createdDate":"2026-06-24T10:00:00Z","comment":"Looks wrong","appPlatform":"IOS","screenshots":[{"url":"https://example.com/shot.png","width":1170,"height":2532}]}}...
    );
    my $asc3 = Apple::AppStoreConnect->new(%params, key => $key, ua => $ua);

    my $out = $asc3->get_beta_feedback_screenshot_submissions(
        id       => 1,
        platform => 'IOS',
        params   => {
            'fields[betaFeedbackScreenshotSubmissions]' => 'createdDate,comment,appPlatform,screenshots',
        },
    );

    is(
        $out,
        [
            {
                id          => 's1',
                type        => 'betaFeedbackScreenshotSubmissions',
                createdDate => '2026-06-24T10:00:00Z',
                comment     => 'Looks wrong',
                appPlatform => 'IOS',
                screenshots => [
                    {
                        url    => 'https://example.com/shot.png',
                        width  => 1170,
                        height => 2532,
                    },
                ],
            },
        ],
        'Screenshot feedback returned'
    );

    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');



( run in 1.705 second using v1.01-cache-2.11-cpan-788537b7465 )