1*c4ef02aeSEvan Baconimport { vol } from 'memfs';
2*c4ef02aeSEvan Bacon
3*c4ef02aeSEvan Baconimport rnFixture from '../../../prebuild/__tests__/fixtures/react-native-project';
4*c4ef02aeSEvan Baconimport { SimulatorLogStreamer } from '../../../start/platforms/ios/simctlLogging';
5*c4ef02aeSEvan Baconimport { DevServerManager } from '../../../start/server/DevServerManager';
6*c4ef02aeSEvan Baconimport { getAppDeltaDirectory, installOnDeviceAsync } from '../appleDevice/installOnDeviceAsync';
7*c4ef02aeSEvan Baconimport { launchAppAsync } from '../launchApp';
8*c4ef02aeSEvan Bacon
9*c4ef02aeSEvan Baconjest.mock('../../../log');
10*c4ef02aeSEvan Bacon
11*c4ef02aeSEvan Baconjest.mock('../../../utils/env', () => ({
12*c4ef02aeSEvan Bacon  env: {
13*c4ef02aeSEvan Bacon    CI: false,
14*c4ef02aeSEvan Bacon  },
15*c4ef02aeSEvan Bacon}));
16*c4ef02aeSEvan Bacon
17*c4ef02aeSEvan Baconjest.mock('../../../start/platforms/ios/AppleDeviceManager', () => ({
18*c4ef02aeSEvan Bacon  AppleDeviceManager: {
19*c4ef02aeSEvan Bacon    resolveAsync: async () => ({
20*c4ef02aeSEvan Bacon      installAppAsync: jest.fn(),
21*c4ef02aeSEvan Bacon      device: {},
22*c4ef02aeSEvan Bacon    }),
23*c4ef02aeSEvan Bacon  },
24*c4ef02aeSEvan Bacon}));
25*c4ef02aeSEvan Bacon
26*c4ef02aeSEvan Baconjest.mock('../../../start/platforms/ios/simctlLogging', () => ({
27*c4ef02aeSEvan Bacon  SimulatorLogStreamer: {
28*c4ef02aeSEvan Bacon    getStreamer: jest.fn(() => ({ attachAsync: jest.fn() })),
29*c4ef02aeSEvan Bacon  },
30*c4ef02aeSEvan Bacon}));
31*c4ef02aeSEvan Bacon
32*c4ef02aeSEvan Baconjest.mock('../appleDevice/installOnDeviceAsync', () => ({
33*c4ef02aeSEvan Bacon  getAppDeltaDirectory: jest.fn(() => '/mock_delta'),
34*c4ef02aeSEvan Bacon  installOnDeviceAsync: jest.fn(async () => ''),
35*c4ef02aeSEvan Bacon}));
36*c4ef02aeSEvan Bacon
37*c4ef02aeSEvan Baconconst mockPlist = `<?xml version="1.0" encoding="UTF-8"?>
38*c4ef02aeSEvan Bacon<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
39*c4ef02aeSEvan Bacon<plist version="1.0">
40*c4ef02aeSEvan Bacon  <dict>
41*c4ef02aeSEvan Bacon  <key>CFBundleIdentifier</key>
42*c4ef02aeSEvan Bacon  <string>dev.bacon.myapp</string>
43*c4ef02aeSEvan Bacon  </dict>
44*c4ef02aeSEvan Bacon</plist>`;
45*c4ef02aeSEvan Bacon
46*c4ef02aeSEvan Baconfunction getMockDevServerManager() {
47*c4ef02aeSEvan Bacon  return {
48*c4ef02aeSEvan Bacon    startAsync: jest.fn(),
49*c4ef02aeSEvan Bacon    getDefaultDevServer: jest.fn(() => ({
50*c4ef02aeSEvan Bacon      openCustomRuntimeAsync: jest.fn(),
51*c4ef02aeSEvan Bacon    })),
52*c4ef02aeSEvan Bacon  } as unknown as DevServerManager;
53*c4ef02aeSEvan Bacon}
54*c4ef02aeSEvan Bacon
55*c4ef02aeSEvan Bacondescribe(launchAppAsync, () => {
56*c4ef02aeSEvan Bacon  afterEach(() => vol.reset());
57*c4ef02aeSEvan Bacon
58*c4ef02aeSEvan Bacon  it(`runs ios on simulator`, async () => {
59*c4ef02aeSEvan Bacon    vol.fromJSON({ ...rnFixture, '/path/to/app.ipa/Info.plist': mockPlist }, '/');
60*c4ef02aeSEvan Bacon
61*c4ef02aeSEvan Bacon    await launchAppAsync('/path/to/app.ipa', getMockDevServerManager(), {
62*c4ef02aeSEvan Bacon      device: {
63*c4ef02aeSEvan Bacon        name: 'simulator',
64*c4ef02aeSEvan Bacon        udid: '123',
65*c4ef02aeSEvan Bacon      },
66*c4ef02aeSEvan Bacon      isSimulator: true,
67*c4ef02aeSEvan Bacon      shouldStartBundler: true,
68*c4ef02aeSEvan Bacon    });
69*c4ef02aeSEvan Bacon
70*c4ef02aeSEvan Bacon    expect(SimulatorLogStreamer.getStreamer).toBeCalled();
71*c4ef02aeSEvan Bacon
72*c4ef02aeSEvan Bacon    expect(installOnDeviceAsync).not.toBeCalled();
73*c4ef02aeSEvan Bacon    expect(getAppDeltaDirectory).not.toBeCalled();
74*c4ef02aeSEvan Bacon  });
75*c4ef02aeSEvan Bacon  it(`does not streams logs on simulator if the dev server is skipped`, async () => {
76*c4ef02aeSEvan Bacon    vol.fromJSON({ ...rnFixture, '/path/to/app.ipa/Info.plist': mockPlist }, '/');
77*c4ef02aeSEvan Bacon    await launchAppAsync('/path/to/app.ipa', getMockDevServerManager(), {
78*c4ef02aeSEvan Bacon      device: {
79*c4ef02aeSEvan Bacon        name: 'simulator',
80*c4ef02aeSEvan Bacon        udid: '123',
81*c4ef02aeSEvan Bacon      },
82*c4ef02aeSEvan Bacon      isSimulator: true,
83*c4ef02aeSEvan Bacon      shouldStartBundler: false,
84*c4ef02aeSEvan Bacon    });
85*c4ef02aeSEvan Bacon
86*c4ef02aeSEvan Bacon    expect(SimulatorLogStreamer.getStreamer).not.toBeCalled();
87*c4ef02aeSEvan Bacon    expect(installOnDeviceAsync).not.toBeCalled();
88*c4ef02aeSEvan Bacon    expect(getAppDeltaDirectory).not.toBeCalled();
89*c4ef02aeSEvan Bacon  });
90*c4ef02aeSEvan Bacon
91*c4ef02aeSEvan Bacon  it(`runs ios on device`, async () => {
92*c4ef02aeSEvan Bacon    vol.fromJSON({ ...rnFixture, '/path/to/app.ipa/Info.plist': mockPlist }, '/');
93*c4ef02aeSEvan Bacon
94*c4ef02aeSEvan Bacon    await launchAppAsync('/path/to/app.ipa', getMockDevServerManager(), {
95*c4ef02aeSEvan Bacon      device: {
96*c4ef02aeSEvan Bacon        name: "Evan's phone",
97*c4ef02aeSEvan Bacon        udid: '00008101-001964A22629003A',
98*c4ef02aeSEvan Bacon      },
99*c4ef02aeSEvan Bacon      isSimulator: false,
100*c4ef02aeSEvan Bacon      shouldStartBundler: true,
101*c4ef02aeSEvan Bacon    });
102*c4ef02aeSEvan Bacon
103*c4ef02aeSEvan Bacon    expect(SimulatorLogStreamer.getStreamer).not.toBeCalled();
104*c4ef02aeSEvan Bacon
105*c4ef02aeSEvan Bacon    expect(installOnDeviceAsync).toBeCalled();
106*c4ef02aeSEvan Bacon    expect(getAppDeltaDirectory).toBeCalled();
107*c4ef02aeSEvan Bacon  });
108*c4ef02aeSEvan Bacon});
109