1*0b50ef93SCedric van Puttenimport { AndroidConfig, IOSConfig } from '@expo/config-plugins';
2*0b50ef93SCedric van Puttenimport { getInfoPlistPathFromPbxproj } from '@expo/config-plugins/build/ios/utils/getInfoPlistPath';
3*0b50ef93SCedric van Puttenimport { vol } from 'memfs';
4*0b50ef93SCedric van Puttenimport path from 'path';
5*0b50ef93SCedric van Putten
6*0b50ef93SCedric van Puttenimport { getSchemesForAndroidAsync, getSchemesForIosAsync } from '../scheme';
7*0b50ef93SCedric van Putten
8*0b50ef93SCedric van Puttenjest.mock('fs');
9*0b50ef93SCedric van Puttenjest.mock('@expo/config-plugins');
10*0b50ef93SCedric van Puttenjest.mock('@expo/config-plugins/build/ios/utils/getInfoPlistPath');
11*0b50ef93SCedric van Putten
12*0b50ef93SCedric van Putten// TODO: replace with `jest.mocked`, when updating Jest
13*0b50ef93SCedric van Puttenconst asMock = (fn: any): jest.Mock => fn;
14*0b50ef93SCedric van Putten
15*0b50ef93SCedric van Puttendescribe(getSchemesForAndroidAsync, () => {
16*0b50ef93SCedric van Putten  it('resolves longest scheme without known expo schemes', async () => {
17*0b50ef93SCedric van Putten    asMock(AndroidConfig.Scheme.getSchemesFromManifest).mockResolvedValue([
18*0b50ef93SCedric van Putten      'com.expo.test',
19*0b50ef93SCedric van Putten      'com.expo.longertest',
20*0b50ef93SCedric van Putten      'com.expo.longesttest',
21*0b50ef93SCedric van Putten    ]);
22*0b50ef93SCedric van Putten
23*0b50ef93SCedric van Putten    await expect(getSchemesForAndroidAsync('/fake-project')).resolves.toEqual([
24*0b50ef93SCedric van Putten      'com.expo.longesttest',
25*0b50ef93SCedric van Putten      'com.expo.longertest',
26*0b50ef93SCedric van Putten      'com.expo.test',
27*0b50ef93SCedric van Putten    ]);
28*0b50ef93SCedric van Putten  });
29*0b50ef93SCedric van Putten
30*0b50ef93SCedric van Putten  it('resolves known expo schemes before longest schemes', async () => {
31*0b50ef93SCedric van Putten    asMock(AndroidConfig.Scheme.getSchemesFromManifest).mockResolvedValue([
32*0b50ef93SCedric van Putten      'com.expo.longesttest',
33*0b50ef93SCedric van Putten      'exp+com.expo.test',
34*0b50ef93SCedric van Putten    ]);
35*0b50ef93SCedric van Putten
36*0b50ef93SCedric van Putten    await expect(getSchemesForAndroidAsync('/fake-project')).resolves.toEqual([
37*0b50ef93SCedric van Putten      'exp+com.expo.test',
38*0b50ef93SCedric van Putten    ]);
39*0b50ef93SCedric van Putten  });
40*0b50ef93SCedric van Putten});
41*0b50ef93SCedric van Putten
42*0b50ef93SCedric van Puttendescribe(getSchemesForIosAsync, () => {
43*0b50ef93SCedric van Putten  beforeAll(() => {
44*0b50ef93SCedric van Putten    const fakePlist = `
45*0b50ef93SCedric van Putten      <?xml version="1.0" encoding="UTF-8"?>
46*0b50ef93SCedric van Putten      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
47*0b50ef93SCedric van Putten      <plist version="1.0">
48*0b50ef93SCedric van Putten        <dict>
49*0b50ef93SCedric van Putten          <key>fake</key>
50*0b50ef93SCedric van Putten          <string>plist</string>
51*0b50ef93SCedric van Putten        </dic>
52*0b50ef93SCedric van Putten      </plist>
53*0b50ef93SCedric van Putten    `;
54*0b50ef93SCedric van Putten
55*0b50ef93SCedric van Putten    vol.fromJSON({
56*0b50ef93SCedric van Putten      [path.join('fake-project', 'ios', 'fake-pbxproject')]: fakePlist,
57*0b50ef93SCedric van Putten    });
58*0b50ef93SCedric van Putten  });
59*0b50ef93SCedric van Putten
60*0b50ef93SCedric van Putten  afterAll(() => {
61*0b50ef93SCedric van Putten    vol.reset();
62*0b50ef93SCedric van Putten  });
63*0b50ef93SCedric van Putten
64*0b50ef93SCedric van Putten  it('resolves longest scheme without known expo schemes', async () => {
65*0b50ef93SCedric van Putten    asMock(getInfoPlistPathFromPbxproj).mockReturnValue('fake-pbxproject');
66*0b50ef93SCedric van Putten    asMock(IOSConfig.Scheme.getSchemesFromPlist).mockReturnValue([
67*0b50ef93SCedric van Putten      'com.expo.test',
68*0b50ef93SCedric van Putten      'com.expo.longertest',
69*0b50ef93SCedric van Putten      'com.expo.longesttest',
70*0b50ef93SCedric van Putten    ]);
71*0b50ef93SCedric van Putten
72*0b50ef93SCedric van Putten    await expect(getSchemesForIosAsync('fake-project')).resolves.toEqual([
73*0b50ef93SCedric van Putten      'com.expo.longesttest',
74*0b50ef93SCedric van Putten      'com.expo.longertest',
75*0b50ef93SCedric van Putten      'com.expo.test',
76*0b50ef93SCedric van Putten    ]);
77*0b50ef93SCedric van Putten  });
78*0b50ef93SCedric van Putten
79*0b50ef93SCedric van Putten  it('resolves known expo schemes before longest schemes', async () => {
80*0b50ef93SCedric van Putten    asMock(getInfoPlistPathFromPbxproj).mockReturnValue('fake-pbxproject');
81*0b50ef93SCedric van Putten    asMock(IOSConfig.Scheme.getSchemesFromPlist).mockReturnValue([
82*0b50ef93SCedric van Putten      'com.expo.longesttest',
83*0b50ef93SCedric van Putten      'exp+com.expo.test',
84*0b50ef93SCedric van Putten    ]);
85*0b50ef93SCedric van Putten
86*0b50ef93SCedric van Putten    await expect(getSchemesForIosAsync('fake-project')).resolves.toEqual(['exp+com.expo.test']);
87*0b50ef93SCedric van Putten  });
88*0b50ef93SCedric van Putten});
89