From 0997f9f36d96378a57b0126ff903ec8bbbdec7ae Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Mon, 11 Mar 2024 09:59:53 +0200 Subject: [PATCH 1/3] add tests for getAndroidDeviceToRunOn --- .../sdk-android/src/__tests__/runner.test.ts | 83 ++++++++++++++----- packages/sdk-android/src/runner.ts | 3 +- 2 files changed, 65 insertions(+), 21 deletions(-) diff --git a/packages/sdk-android/src/__tests__/runner.test.ts b/packages/sdk-android/src/__tests__/runner.test.ts index c2aaa35674..42a442e070 100644 --- a/packages/sdk-android/src/__tests__/runner.test.ts +++ b/packages/sdk-android/src/__tests__/runner.test.ts @@ -1,8 +1,11 @@ -import { getAndroidTargets } from '../deviceManager'; +import { getAndroidTargets, composeDevicesArray, connectToWifiDevice, checkForActiveEmulator } from '../deviceManager'; import { getAndroidDeviceToRunOn } from '../runner'; -import { createRnvContext, getContext } from '@rnv/core'; +import { createRnvContext, getContext, inquirerPrompt } from '@rnv/core'; +import net from 'net'; jest.mock('../deviceManager'); +jest.mock('@rnv/core'); +jest.mock('net'); beforeEach(() => { createRnvContext(); @@ -13,6 +16,28 @@ afterEach(() => { }); describe('getAndroidDeviceToRunOn', () => { + it('should connect to WiFi device if targetToConnectWiFi is a string and a valid IP address', async () => { + //GIVEN + const targetToConnectWiFi = '192.168.0.1'; + const ctx = getContext(); + ctx.platform = 'android'; + ctx.program.target = true; + ctx.runtime.target = 'defaultTarget'; + ctx.program.device = targetToConnectWiFi; + net.isIP = jest.fn().mockReturnValue(true); + + jest.mocked(connectToWifiDevice).mockResolvedValue(true); + const mockFoundDevice = { name: '192.168.0.1', isActive: true, udid: '', isDevice: true }; + jest.mocked(getAndroidTargets).mockResolvedValue([mockFoundDevice]); + jest.mocked(checkForActiveEmulator).mockResolvedValue(mockFoundDevice); + + //WHEN + const result = await getAndroidDeviceToRunOn(ctx); + + //THEN + expect(connectToWifiDevice).toHaveBeenCalledWith(ctx, targetToConnectWiFi); + expect(result).toEqual(mockFoundDevice); + }); it('should return found sim if target is provided and found - npx rnv -p android -t ', async () => { //GIVEN const ctx = getContext(); @@ -26,22 +51,40 @@ describe('getAndroidDeviceToRunOn', () => { //THEN expect(result).toEqual(mockFoundDevice); }); - // it('should ask from devices and sims if target is not provided - npx rnv -p android', async () => { - // //GIVEN - // const ctx = getContext(); - // ctx.platform = 'android'; - // ctx.program.target = false; - // ctx.runtime.target = 'defaultTarget'; - // const mockDevicesAndEmulators = [ - // { name: 'simulator1', udid: 'udid1', isActive: true }, - // { name: 'simulator2', udid: 'udid2', isActive: false }, - // // Add more mock targets as needed - // ]; - // const { getAndroidTargets } = require('../deviceManager'); - // getAndroidTargets.mockResolvedValueOnce(mockDevicesAndEmulators); - // //WHEN - - // // const result = await getAndroidDeviceToRunOn(ctx); - // //THEN - // }); + it('should ask devices and sims if no target is specified and the available target list does not include defaultTarget - npx rnv -p android - npx rnv -p android', async () => { + //GIVEN + const ctx = getContext(); + ctx.platform = 'android'; + ctx.program.target = false; + ctx.runtime.target = 'defaultTarget'; + + const mockDevicesAndEmulators = [ + { name: 'simulator1', udid: 'udid1', isActive: true }, + { name: 'simulator2', udid: 'udid2', isActive: false }, + ]; + + jest.mocked(getAndroidTargets).mockResolvedValue(mockDevicesAndEmulators); + jest.mocked(composeDevicesArray) + .mockReturnValueOnce([ + { + key: 'simulator1', + name: 'simulator1', + value: 'simulator1', + icon: 'Phone 📱', + }, + ]) + .mockReturnValueOnce([ + { + key: 'simulator2', + name: 'simulator2', + value: 'simulator2', + icon: 'Phone 📱', + }, + ]); + jest.mocked(inquirerPrompt).mockResolvedValue({ chosenTarget: 'simulator1' }); + //WHEN + const result = await getAndroidDeviceToRunOn(ctx); + //THEN + expect(result).toEqual(mockDevicesAndEmulators[0]); + }); }); diff --git a/packages/sdk-android/src/runner.ts b/packages/sdk-android/src/runner.ts index e22e01faa3..07233bed27 100644 --- a/packages/sdk-android/src/runner.ts +++ b/packages/sdk-android/src/runner.ts @@ -86,12 +86,13 @@ export const getAndroidDeviceToRunOn = async (c: Context) => { } const devicesAndEmulators = await getAndroidTargets(c, false, false, !!device); - + console.log('devicesAndEmulators', devicesAndEmulators); const activeDevices = devicesAndEmulators.filter((d) => d.isActive); const inactiveDevices = devicesAndEmulators.filter((d) => !d.isActive); const foundDevice = devicesAndEmulators.find( (d) => d.udid.includes(target) || d.name.includes(target) || d.udid.includes(device) || d.name.includes(device) ); + console.log('foundDevice', foundDevice); const askWhereToRun = async () => { if (activeDevices.length || inactiveDevices.length) { From 4a74d039de1860646da36a38e25c3ced71b9c4c7 Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Tue, 12 Mar 2024 09:01:36 +0200 Subject: [PATCH 2/3] add tests for getAndroidDeviceToRunOn --- .../sdk-android/src/__tests__/runner.test.ts | 50 +++++++++++++++++++ packages/sdk-android/src/runner.ts | 2 - 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/packages/sdk-android/src/__tests__/runner.test.ts b/packages/sdk-android/src/__tests__/runner.test.ts index 42a442e070..6045f250d0 100644 --- a/packages/sdk-android/src/__tests__/runner.test.ts +++ b/packages/sdk-android/src/__tests__/runner.test.ts @@ -16,6 +16,42 @@ afterEach(() => { }); describe('getAndroidDeviceToRunOn', () => { + it('should fail if a device is provided but no active device exists', async () => { + //GIVEN + const ctx = getContext(); + ctx.platform = 'android'; + ctx.program.target = true; + ctx.program.device = 'device1'; + ctx.runtime.target = 'defaultTarget'; + const mockFoundDevice = { name: 'simulator1', isActive: false, udid: '', isDevice: false }; + + jest.mocked(getAndroidTargets).mockResolvedValue([mockFoundDevice]); + + //WHEN + await expect(getAndroidDeviceToRunOn(ctx)).resolves.toBe(undefined); + + //THEN + }); + it('should fail if targetToConnectWiFi is not a valid IP address - npx rnv -p android -t -d ', async () => { + //GIVEN + const targetToConnectWiFi = 'invalidIPAdress'; + const ctx = getContext(); + ctx.platform = 'android'; + ctx.program.target = true; + ctx.runtime.target = 'defaultTarget'; + ctx.program.device = targetToConnectWiFi; + const mockFoundDevice = { name: 'simulator1', isActive: false, udid: '', isDevice: false }; + + net.isIP = jest.fn().mockReturnValue(false); + + jest.mocked(getAndroidTargets).mockResolvedValue([mockFoundDevice]); + + //WHEN + await expect(getAndroidDeviceToRunOn(ctx)).resolves.toBe(undefined); + + //THEN + expect(connectToWifiDevice).not.toHaveBeenCalled(); + }); it('should connect to WiFi device if targetToConnectWiFi is a string and a valid IP address', async () => { //GIVEN const targetToConnectWiFi = '192.168.0.1'; @@ -38,6 +74,20 @@ describe('getAndroidDeviceToRunOn', () => { expect(connectToWifiDevice).toHaveBeenCalledWith(ctx, targetToConnectWiFi); expect(result).toEqual(mockFoundDevice); }); + it('should return defaultTarget if it exists and -t is not specified', async () => { + //GIVEN + const ctx = getContext(); + ctx.platform = 'android'; + ctx.program.target = undefined; + ctx.runtime.target = 'defaultTarget'; + const mockFoundDevice = { name: 'defaultTarget', isActive: true, udid: '', isDevice: false }; + + jest.mocked(getAndroidTargets).mockResolvedValue([mockFoundDevice]); + + const result = await getAndroidDeviceToRunOn(ctx); + //THEN + expect(result).toEqual(mockFoundDevice); + }); it('should return found sim if target is provided and found - npx rnv -p android -t ', async () => { //GIVEN const ctx = getContext(); diff --git a/packages/sdk-android/src/runner.ts b/packages/sdk-android/src/runner.ts index 07233bed27..729d65a397 100644 --- a/packages/sdk-android/src/runner.ts +++ b/packages/sdk-android/src/runner.ts @@ -86,13 +86,11 @@ export const getAndroidDeviceToRunOn = async (c: Context) => { } const devicesAndEmulators = await getAndroidTargets(c, false, false, !!device); - console.log('devicesAndEmulators', devicesAndEmulators); const activeDevices = devicesAndEmulators.filter((d) => d.isActive); const inactiveDevices = devicesAndEmulators.filter((d) => !d.isActive); const foundDevice = devicesAndEmulators.find( (d) => d.udid.includes(target) || d.name.includes(target) || d.udid.includes(device) || d.name.includes(device) ); - console.log('foundDevice', foundDevice); const askWhereToRun = async () => { if (activeDevices.length || inactiveDevices.length) { From 590e0db3d6d6fb909863f2060577480b3a8f5f0e Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 15 Mar 2024 22:34:17 +0100 Subject: [PATCH 3/3] fix UT due to migration to getContext DI --- packages/sdk-android/src/__tests__/runner.test.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/sdk-android/src/__tests__/runner.test.ts b/packages/sdk-android/src/__tests__/runner.test.ts index 6045f250d0..a8e3766363 100644 --- a/packages/sdk-android/src/__tests__/runner.test.ts +++ b/packages/sdk-android/src/__tests__/runner.test.ts @@ -28,7 +28,7 @@ describe('getAndroidDeviceToRunOn', () => { jest.mocked(getAndroidTargets).mockResolvedValue([mockFoundDevice]); //WHEN - await expect(getAndroidDeviceToRunOn(ctx)).resolves.toBe(undefined); + await expect(getAndroidDeviceToRunOn()).resolves.toBe(undefined); //THEN }); @@ -47,7 +47,7 @@ describe('getAndroidDeviceToRunOn', () => { jest.mocked(getAndroidTargets).mockResolvedValue([mockFoundDevice]); //WHEN - await expect(getAndroidDeviceToRunOn(ctx)).resolves.toBe(undefined); + await expect(getAndroidDeviceToRunOn()).resolves.toBe(undefined); //THEN expect(connectToWifiDevice).not.toHaveBeenCalled(); @@ -68,10 +68,10 @@ describe('getAndroidDeviceToRunOn', () => { jest.mocked(checkForActiveEmulator).mockResolvedValue(mockFoundDevice); //WHEN - const result = await getAndroidDeviceToRunOn(ctx); + const result = await getAndroidDeviceToRunOn(); //THEN - expect(connectToWifiDevice).toHaveBeenCalledWith(ctx, targetToConnectWiFi); + expect(connectToWifiDevice).toHaveBeenCalledWith(targetToConnectWiFi); expect(result).toEqual(mockFoundDevice); }); it('should return defaultTarget if it exists and -t is not specified', async () => { @@ -84,7 +84,7 @@ describe('getAndroidDeviceToRunOn', () => { jest.mocked(getAndroidTargets).mockResolvedValue([mockFoundDevice]); - const result = await getAndroidDeviceToRunOn(ctx); + const result = await getAndroidDeviceToRunOn(); //THEN expect(result).toEqual(mockFoundDevice); }); @@ -97,7 +97,7 @@ describe('getAndroidDeviceToRunOn', () => { const mockFoundDevice = { name: 'existingTarget', isActive: true, udid: '' }; jest.mocked(getAndroidTargets).mockResolvedValueOnce([mockFoundDevice]); //WHEN - const result = await getAndroidDeviceToRunOn(ctx); + const result = await getAndroidDeviceToRunOn(); //THEN expect(result).toEqual(mockFoundDevice); }); @@ -133,7 +133,7 @@ describe('getAndroidDeviceToRunOn', () => { ]); jest.mocked(inquirerPrompt).mockResolvedValue({ chosenTarget: 'simulator1' }); //WHEN - const result = await getAndroidDeviceToRunOn(ctx); + const result = await getAndroidDeviceToRunOn(); //THEN expect(result).toEqual(mockDevicesAndEmulators[0]); });