Apple-AppStoreConnect
view release on metacpan or search on metacpan
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 )