storebound/tests/matrix-bugs.test.ts

38 lines
2.3 KiB
TypeScript

// Bugs the release acceptance matrix (tools/acceptance.ts) found, each pinned: a missing app info on App Store Connect
// is a clear error (it was "undefined is not an object (evaluating 'info.id')"), and asset uploads and review draft
// names take the base name of Windows paths (split('/') left the whole C:\\... path as the file name).
import { afterEach, describe, expect, test } from 'bun:test';
import { readFileSync } from 'node:fs';
import { join } from 'node:path';
import { run as appleAppinfo } from '../cli/apple/appinfo';
import { run as appleListing } from '../cli/apple/listing';
import { CRASH } from '../tools/acceptance';
import { ascEnv, BASE, capture, mockFetch, project, restore } from './helpers/store-mock';
const ROOT = join(import.meta.dir, '..');
afterEach(restore);
describe('bugs the matrix found', () => {
test('no app info on App Store Connect: a clear error, not "undefined is not an object"', async () => {
ascEnv();
const cfg = { ...BASE, apple: { ...BASE.apple!, info: { free: true } } };
for (const [name, runIt, argv] of [['appinfo', appleAppinfo, ['--dry']], ['listing', appleListing, ['--version', '1.0.0', '--dry']]] as const) {
const p = project(cfg, { 'store/appstore.md': readFileSync(join(ROOT, 'templates/appstore.md'), 'utf8') });
mockFetch([
{ match: /^\/v1\/apps\/6400000101\/appInfos/, answer: { data: [] } },
{ match: /^\/v1\/apps\/6400000101\/appStoreVersions/, answer: { data: [{ type: 'appStoreVersions', id: 'v1', attributes: { versionString: '1.0.0', platform: 'IOS', appVersionState: 'PREPARE_FOR_SUBMISSION' } }] } },
{ match: /./, answer: { data: [] } },
]);
let msg = '';
try { await capture(() => runIt(p.ctx([...argv]))); } catch (e) { msg = (e as Error).message; }
expect(msg, name).toMatch(/App Store Connect returned no app info for app 6400000101/);
expect(msg, name).not.toMatch(CRASH);
}
});
test('asset uploads and review draft names take the base name of Windows paths too', () => {
const asc = readFileSync(join(ROOT, 'cli/apple/asc.ts'), 'utf8');
expect(asc).toMatch(/const name = basename\(file\);/);
for (const f of ['cli/reviews.ts', 'cli/apple/previews.ts']) expect(readFileSync(join(ROOT, f), 'utf8'), f).not.toMatch(/\.split\('\/'\)\.pop\(\)/);
});
});