1import nock from 'nock';
2import { parse } from 'semver';
3
4import { getExpoApiBaseUrl } from '../endpoint';
5import { getReleasedVersionsAsync, getVersionsAsync } from '../getVersions';
6
7beforeAll(() => {
8  process.env.EXPO_NO_CACHE = 'true';
9});
10
11describe(getVersionsAsync, () => {
12  it('gets versions', async () => {
13    const scope = nock(getExpoApiBaseUrl())
14      .get('/v2/versions/latest')
15      .reply(200, require('./fixtures/versions-latest.json'));
16    const versions = await getVersionsAsync();
17    expect(versions).toEqual(require('./fixtures/versions-latest.json').data);
18    expect(scope.isDone()).toBe(true);
19  });
20  it('fails when the servers are down', async () => {
21    const scope = nock(getExpoApiBaseUrl())
22      .get('/v2/versions/latest')
23      .reply(500, 'something went wrong');
24    await expect(getVersionsAsync()).rejects.toThrowError(/Expo server/);
25    expect(scope.isDone()).toBe(true);
26  });
27});
28
29describe(getReleasedVersionsAsync, () => {
30  it('gets released versions', async () => {
31    const scope = nock(getExpoApiBaseUrl())
32      .get('/v2/versions/latest')
33      .reply(200, require('./fixtures/versions-latest.json'));
34    const versions = await getReleasedVersionsAsync();
35    // A list of SDK versions like `43.0.0`
36    expect(
37      Object.keys(versions).every((value) => {
38        return parse(value) && value.endsWith('.0.0');
39      })
40    );
41    expect(scope.isDone()).toBe(true);
42  });
43});
44