shots: Mac App Store screenshots (mac size, APP_DESKTOP to the macOS version), a landscape layout (Mac window or bare; Mac, Play Chromebook, Play tablets), safe margins in every template checked by shots check from the render's layout boxes, a contact sheet timeout that scales with images, sizes and load; pitfall 80

This commit is contained in:
CRTkafa 2026-10-20 03:29:19 +07:00
parent 30488c512d
commit e59539fec8
26 changed files with 532 additions and 67 deletions

View file

@ -170,6 +170,22 @@ describe('App Store Connect: a second run writes nothing', () => {
expect(count('appScreenshots')).toBe(12);
});
test('apple screenshots --platform macos: the Mac set (APP_DESKTOP) on the macOS version only', async () => {
const files: Record<string, Uint8Array> = {};
for (const l of ['en', 'de']) for (const n of [1, 2]) files[`store/renders/${l}/mac/0${n}.png`] = png(n + (l === 'de' ? 40 : 30));
const p = project({ ...CONFIG, apple: { ...CONFIG.apple!, mac: true } }, files);
const ios = s.asc.put({ type: 'appStoreVersions', id: 'ver-ios', attributes: { versionString: '1.0.0', appVersionState: 'PREPARE_FOR_SUBMISSION', platform: 'IOS' }, rels: { app: APP } });
const mac = s.asc.put({ type: 'appStoreVersions', id: 'ver-mac', attributes: { versionString: '1.0.0', appVersionState: 'PREPARE_FOR_SUBMISSION', platform: 'MAC_OS' }, rels: { app: APP } });
for (const v of [ios, mac]) for (const loc of ['en-US', 'de-DE']) s.asc.put({ type: 'appStoreVersionLocalizations', id: `loc-${v.id}-${loc}`, attributes: { locale: loc }, rels: { appStoreVersion: v.id } });
const r = await twice(() => appleScreenshots(p.ctx(['--platform', 'macos'])));
expect(r.first.filter(x => x === 'POST /v1/appScreenshotSets')).toHaveLength(2);
expect(r.second).toEqual([]);
const sets = s.asc.all('appScreenshotSets');
expect(sets.map(x => x.attributes.screenshotDisplayType)).toEqual(['APP_DESKTOP', 'APP_DESKTOP']);
expect(sets.every(x => JSON.stringify(x).includes('loc-ver-mac-'))).toBe(true);
expect(count('appScreenshots')).toBe(4);
});
test('apple cpp create, events create, testflight groups, review-details, bundle, offer-codes, ppo create', async () => {
const p = project({ ...CONFIG, shots: { variants: { b: {} } } as never }, { '.storebound/credentials.json': JSON.stringify({ reviewContact: { firstName: 'Ex', lastName: 'Ample', phone: '+1 555 0100', email: 'review@example.com' } }) });
s.asc.put({ type: 'appStoreVersions', id: 'ver-1', attributes: { versionString: '1.0.0', appVersionState: 'PREPARE_FOR_SUBMISSION', platform: 'IOS' }, rels: { app: APP } });