appstore-cli
Version:
A command-line interface (CLI) to interact with the Apple App Store Connect API.
109 lines (86 loc) • 3 kB
text/typescript
import { AppStoreConnectAPI } from './api-client';
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
// Mock the modules before importing them
jest.mock('./config', () => ({
loadConfig: jest.fn()
}));
jest.mock('./auth', () => ({
generateJwt: jest.fn()
}));
import { generateJwt } from './auth';
import { loadConfig } from './config';
describe('AppStoreConnectAPI', () => {
let mock: MockAdapter;
beforeEach(() => {
mock = new MockAdapter(axios);
(loadConfig as jest.Mock).mockReturnValue({
keyId: 'test-key-id',
issuerId: 'test-issuer-id'
});
(generateJwt as jest.Mock).mockResolvedValue('test-jwt');
});
afterEach(() => {
mock.restore();
});
it('should make a successful GET request', async () => {
const api = new AppStoreConnectAPI();
await api.initialize();
const data = { users: ['John Doe'] };
mock.onGet('https://api.appstoreconnect.apple.com/v1/users').reply(200, data);
const response = await api.get('/users');
expect(response).toEqual(data);
});
it('should handle API errors gracefully', async () => {
const api = new AppStoreConnectAPI();
await api.initialize();
mock.onGet('https://api.appstoreconnect.apple.com/v1/users').reply(404, { error: 'Not Found' });
await expect(api.get('/users')).rejects.toThrow('API request failed with status 404');
});
it('should create an app successfully', async () => {
const api = new AppStoreConnectAPI();
await api.initialize();
const appData = {
data: {
id: '12345',
attributes: {
name: 'Test App',
bundleId: 'com.test.app',
sku: 'TESTAPP123',
primaryLocale: 'en-US',
}
}
};
mock.onPost('https://api.appstoreconnect.apple.com/v1/apps').reply(200, appData);
const response = await api.createApp('Test App', 'com.test.app', 'TESTAPP123', 'en-US', '1.0.0');
expect(response).toEqual(appData);
});
it('should create a beta group successfully', async () => {
const api = new AppStoreConnectAPI();
await api.initialize();
const betaGroupData = {
data: [{
id: '67890',
attributes: {
name: 'Test Group',
isInternalGroup: true,
}
}]
};
mock.onPost('https://api.appstoreconnect.apple.com/v1/betaGroups').reply(200, betaGroupData);
const response = await api.createBetaGroup('Test Group', '12345', true);
expect(response).toEqual(betaGroupData);
});
it('should submit a build for review successfully', async () => {
const api = new AppStoreConnectAPI();
await api.initialize();
const submissionData = {
data: {
id: 'abcde',
}
};
mock.onPost('https://api.appstoreconnect.apple.com/v1/appStoreReviewDetails').reply(200, submissionData);
const response = await api.submitBuildForReview('build123', 'app456');
expect(response).toEqual(submissionData);
});
});