Enhance iOS device manager tests

Reviewed By: lawrencelomax

Differential Revision: D33915694

fbshipit-source-id: fc4bfd30b8f504f2f242f94e61967ee68cc83100
This commit is contained in:
Andrey Goncharov
2022-02-02 03:05:34 -08:00
committed by Facebook GitHub Bot
parent 7bf89a840a
commit b9aeaa9339

View File

@@ -7,34 +7,56 @@
* @format * @format
*/ */
import {checkXcodeVersionMismatch} from '../iOSDeviceManager'; import {checkXcodeVersionMismatch, IOSDeviceManager} from '../iOSDeviceManager';
import {getLogger} from 'flipper-common';
import {FlipperServerImpl} from '../../../FlipperServerImpl';
// eslint-disable-next-line node/no-extraneous-import // eslint-disable-next-line node/no-extraneous-import
import {getRenderHostInstance} from 'flipper-ui-core'; import {getRenderHostInstance} from 'flipper-ui-core';
import { import {
getFlipperServerConfig, getFlipperServerConfig,
setFlipperServerConfig, setFlipperServerConfig,
} from '../../../FlipperServerConfig'; } from '../../../FlipperServerConfig';
import {IOSDeviceParams} from 'flipper-common';
let fakeSimctlBridge: any; let fakeSimctlBridge: any;
let fakeIDBBridge: any; let fakeIDBBridge: any;
let hasCalledSimctlActiveDevices = false; let fakeFlipperServer: any;
let hasCalledIDBActiveDevices = false; const fakeDevices: IOSDeviceParams[] = [
{
udid: 'luke',
type: 'emulator',
name: 'Luke',
},
{
udid: 'yoda',
type: 'emulator',
name: 'Yoda',
},
];
const fakeExistingDevices = [
{
info: {os: 'iOS'},
serial: 'luke',
},
{
info: {os: 'Android'},
serial: 'yoda',
},
{
info: {os: 'iOS'},
serial: 'plapatine',
},
];
beforeEach(() => { beforeEach(() => {
hasCalledSimctlActiveDevices = false;
fakeSimctlBridge = { fakeSimctlBridge = {
getActiveDevices: async (_bootedOnly: boolean) => { getActiveDevices: jest.fn().mockImplementation(async () => fakeDevices),
hasCalledSimctlActiveDevices = true;
return [];
},
}; };
fakeIDBBridge = { fakeIDBBridge = {
getActiveDevices: async (_bootedOnly: boolean) => { getActiveDevices: jest.fn().mockImplementation(async () => fakeDevices),
hasCalledIDBActiveDevices = true; };
return []; fakeFlipperServer = {
}, getDevices: jest.fn().mockImplementation(() => fakeExistingDevices),
registerDevice: jest.fn(),
unregisterDevice: jest.fn(),
}; };
setFlipperServerConfig(getRenderHostInstance().serverConfig); setFlipperServerConfig(getRenderHostInstance().serverConfig);
}); });
@@ -65,26 +87,44 @@ test('test checkXcodeVersionMismatch with an incorrect Simulator.app', () => {
); );
}); });
test('test queryDevices when simctl used', () => { test('test queryDevices when simctl used', async () => {
const flipperServer = new FlipperServerImpl( const ios = new IOSDeviceManager(fakeFlipperServer);
getFlipperServerConfig(), (ios as any).idbConfig = getFlipperServerConfig().settings;
getLogger(), ios.simctlBridge = fakeSimctlBridge;
await ios.queryDevices(fakeSimctlBridge);
expect(fakeSimctlBridge.getActiveDevices).toBeCalledTimes(1);
expect(fakeIDBBridge.getActiveDevices).toBeCalledTimes(0);
expect(fakeFlipperServer.registerDevice).toBeCalledTimes(1);
expect(fakeFlipperServer.registerDevice).toBeCalledWith(
expect.objectContaining({
serial: 'yoda',
}),
); );
(flipperServer.ios as any).idbConfig = getFlipperServerConfig().settings;
flipperServer.ios.simctlBridge = fakeSimctlBridge; expect(fakeFlipperServer.unregisterDevice).toBeCalledTimes(1);
flipperServer.ios.queryDevices(fakeSimctlBridge); expect(fakeFlipperServer.unregisterDevice).toBeCalledWith('plapatine');
expect(hasCalledSimctlActiveDevices).toEqual(true);
expect(hasCalledIDBActiveDevices).toEqual(false);
}); });
test('test queryDevices when idb used', () => { test('test queryDevices when idb used', async () => {
const flipperServer = new FlipperServerImpl( const ios = new IOSDeviceManager(fakeFlipperServer);
getFlipperServerConfig(), (ios as any).idbConfig = getFlipperServerConfig().settings;
getLogger(), ios.simctlBridge = fakeSimctlBridge;
await ios.queryDevices(fakeIDBBridge);
expect(fakeSimctlBridge.getActiveDevices).toBeCalledTimes(0);
expect(fakeIDBBridge.getActiveDevices).toBeCalledTimes(1);
expect(fakeFlipperServer.registerDevice).toBeCalledTimes(1);
expect(fakeFlipperServer.registerDevice).toBeCalledWith(
expect.objectContaining({
serial: 'yoda',
}),
); );
(flipperServer.ios as any).idbConfig = getFlipperServerConfig().settings;
flipperServer.ios.simctlBridge = fakeSimctlBridge; expect(fakeFlipperServer.unregisterDevice).toBeCalledTimes(1);
flipperServer.ios.queryDevices(fakeIDBBridge); expect(fakeFlipperServer.unregisterDevice).toBeCalledWith('plapatine');
expect(hasCalledSimctlActiveDevices).toEqual(false);
expect(hasCalledIDBActiveDevices).toEqual(true);
}); });