Skip to content

Commit 2410493

Browse files
committed
fix: fix mainController tests, delete test/livesync-service and move all appropriate tests from test/livesync-service to main-controller
1 parent 4a9c967 commit 2410493

File tree

4 files changed

+95
-227
lines changed

4 files changed

+95
-227
lines changed

lib/controllers/main-controller.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export class MainController extends EventEmitter {
7676

7777
// TODO: Consider to handle correctly the descriptors when livesync is executed for second time for the same projectDir
7878

79-
this.$runOnDevicesDataService.persistData(projectDir, liveSyncInfo, deviceDescriptors);
79+
this.$runOnDevicesDataService.persistData(projectDir, deviceDescriptors);
8080

8181
const shouldStartWatcher = !liveSyncInfo.skipWatcher && (liveSyncInfo.syncToPreviewApp || this.$runOnDevicesDataService.hasDeviceDescriptors(projectDir));
8282
if (shouldStartWatcher) {

lib/services/run-on-devices-data-service.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,11 @@ export class RunOnDevicesDataService {
1919
return this.liveSyncProcessesInfo[projectDir].deviceDescriptors.length;
2020
}
2121

22-
public persistData(projectDir: string, liveSyncInfo: ILiveSyncInfo, deviceDescriptors: ILiveSyncDeviceInfo[]): void {
22+
public persistData(projectDir: string, deviceDescriptors: ILiveSyncDeviceInfo[]): void {
2323
this.liveSyncProcessesInfo[projectDir] = this.liveSyncProcessesInfo[projectDir] || Object.create(null);
2424
this.liveSyncProcessesInfo[projectDir].actionsChain = this.liveSyncProcessesInfo[projectDir].actionsChain || Promise.resolve();
2525
this.liveSyncProcessesInfo[projectDir].currentSyncAction = this.liveSyncProcessesInfo[projectDir].actionsChain;
2626
this.liveSyncProcessesInfo[projectDir].isStopped = false;
27-
this.liveSyncProcessesInfo[projectDir].syncToPreviewApp = liveSyncInfo.syncToPreviewApp;
2827

2928
const currentDeviceDescriptors = this.getDeviceDescriptors(projectDir);
3029
this.liveSyncProcessesInfo[projectDir].deviceDescriptors = _.uniqBy(currentDeviceDescriptors.concat(deviceDescriptors), "identifier");

test/controllers/main-controller.ts

Lines changed: 93 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ import { Yok } from "../../lib/common/yok";
22
import { assert } from "chai";
33
import { AddPlatformService } from "../../lib/services/platform/add-platform-service";
44
import { MainController } from "../../lib/controllers/main-controller";
5+
import { RunOnDeviceEvents } from "../../lib/constants";
6+
import { RunOnDevicesEmitter } from "../../lib/run-on-devices-emitter";
7+
import { WorkflowDataService } from "../../lib/services/workflow/workflow-data-service";
8+
import { RunOnDevicesDataService } from "../../lib/services/run-on-devices-data-service";
9+
import { PlatformWatcherService } from "../../lib/services/platform/platform-watcher-service";
510

611
const deviceMap: IDictionary<any> = {
712
myiOSDevice: {
@@ -22,7 +27,15 @@ function createTestInjector(): IInjector {
2227
const injector = new Yok();
2328

2429
injector.register("devicesService", ({
25-
getDeviceByIdentifier: (identifier: string) => { return deviceMap[identifier]; }
30+
on: () => ({}),
31+
getDeviceByIdentifier: (identifier: string) => { return deviceMap[identifier]; },
32+
getPlatformsFromDeviceDescriptors: (deviceDescriptors: ILiveSyncDeviceInfo[]) => {
33+
return _(deviceDescriptors)
34+
.map(device => deviceMap[device.identifier])
35+
.map(device => device.deviceInfo.platform)
36+
.uniq()
37+
.value();
38+
}
2639
}));
2740
injector.register("deviceWorkflowService", ({}));
2841
injector.register("errors", ({
@@ -40,7 +53,7 @@ function createTestInjector(): IInjector {
4053
injector.register("platformWatcherService", ({
4154
on: () => ({}),
4255
emit: () => ({}),
43-
startWatcher: () => ({})
56+
startWatchers: () => ({})
4457
}));
4558
injector.register("mainController", MainController);
4659
injector.register("pluginsService", ({}));
@@ -50,11 +63,23 @@ function createTestInjector(): IInjector {
5063
})
5164
}));
5265
injector.register("buildArtefactsService", ({}));
66+
injector.register("addPlatformService", {});
5367
injector.register("buildPlatformService", ({}));
54-
injector.register("platformAddService", ({}));
55-
injector.register("platformService", ({}));
56-
injector.register("projectChangesService", ({}));
68+
injector.register("preparePlatformService", ({}));
69+
injector.register("deviceInstallAppService", {});
70+
injector.register("deviceRefreshAppService", {});
71+
injector.register("deviceDebugAppService", {});
5772
injector.register("fs", ({}));
73+
injector.register("hooksService", {
74+
executeAfterHooks: () => ({})
75+
});
76+
injector.register("projectChangesService", ({}));
77+
injector.register("runOnDevicesController", {
78+
on: () => ({})
79+
});
80+
injector.register("runOnDevicesDataService", RunOnDevicesDataService);
81+
injector.register("runOnDevicesEmitter", RunOnDevicesEmitter);
82+
injector.register("workflowDataService", WorkflowDataService);
5883

5984
return injector;
6085
}
@@ -73,7 +98,7 @@ const liveSyncInfo = {
7398
};
7499

75100
describe("MainController", () => {
76-
describe("start", () => {
101+
describe("runOnDevices", () => {
77102
describe("when the run on device is called for second time for the same projectDir", () => {
78103
it("should run only for new devies (for which the initial sync is still not executed)", async () => {
79104
return;
@@ -87,15 +112,14 @@ describe("MainController", () => {
87112
const injector = createTestInjector();
88113

89114
let isAddPlatformIfNeededCalled = false;
90-
const platformAddService: AddPlatformService = injector.resolve("platformAddService");
91-
platformAddService.addPlatformIfNeeded = async () => { isAddPlatformIfNeededCalled = true; };
115+
const addPlatformService: AddPlatformService = injector.resolve("addPlatformService");
116+
addPlatformService.addPlatformIfNeeded = async () => { isAddPlatformIfNeededCalled = true; };
92117

93118
let isStartWatcherCalled = false;
94-
const platformWatcherService: IPlatformWatcherService = injector.resolve("platformWatcherService");
95-
(<any>platformWatcherService).startWatcher = async () => {
119+
const platformWatcherService: PlatformWatcherService = injector.resolve("platformWatcherService");
120+
platformWatcherService.startWatchers = async () => {
96121
assert.isTrue(isAddPlatformIfNeededCalled);
97122
isStartWatcherCalled = true;
98-
return true;
99123
};
100124

101125
const mainController: MainController = injector.resolve("mainController");
@@ -127,13 +151,13 @@ describe("MainController", () => {
127151
const injector = createTestInjector();
128152

129153
const actualAddedPlatforms: IPlatformData[] = [];
130-
const platformAddService: AddPlatformService = injector.resolve("platformAddService");
131-
platformAddService.addPlatformIfNeeded = async (platformData: IPlatformData) => {
154+
const addPlatformService: AddPlatformService = injector.resolve("addPlatformService");
155+
addPlatformService.addPlatformIfNeeded = async (platformData: IPlatformData) => {
132156
actualAddedPlatforms.push(platformData);
133157
};
134158

135-
const mainController = injector.resolve("mainController");
136-
await mainController.runPlatform(projectDir, testCase.connectedDevices, liveSyncInfo);
159+
const mainController: MainController = injector.resolve("mainController");
160+
await mainController.runOnDevices(projectDir, testCase.connectedDevices, liveSyncInfo);
137161

138162
assert.deepEqual(actualAddedPlatforms.map(pData => pData.platformNameLowerCase), testCase.expectedAddedPlatforms);
139163
});
@@ -198,4 +222,58 @@ describe("MainController", () => {
198222
});
199223
});
200224
});
225+
describe("stopRunOnDevices", () => {
226+
const testCases = [
227+
{
228+
name: "stops LiveSync operation for all devices and emits liveSyncStopped for all of them when stopLiveSync is called without deviceIdentifiers",
229+
currentDeviceIdentifiers: ["device1", "device2", "device3"],
230+
expectedDeviceIdentifiers: ["device1", "device2", "device3"]
231+
},
232+
{
233+
name: "stops LiveSync operation for all devices and emits liveSyncStopped for all of them when stopLiveSync is called without deviceIdentifiers (when a single device is attached)",
234+
currentDeviceIdentifiers: ["device1"],
235+
expectedDeviceIdentifiers: ["device1"]
236+
},
237+
{
238+
name: "stops LiveSync operation for specified devices and emits liveSyncStopped for each of them (when a single device is attached)",
239+
currentDeviceIdentifiers: ["device1"],
240+
expectedDeviceIdentifiers: ["device1"],
241+
deviceIdentifiersToBeStopped: ["device1"]
242+
},
243+
{
244+
name: "stops LiveSync operation for specified devices and emits liveSyncStopped for each of them",
245+
currentDeviceIdentifiers: ["device1", "device2", "device3"],
246+
expectedDeviceIdentifiers: ["device1", "device3"],
247+
deviceIdentifiersToBeStopped: ["device1", "device3"]
248+
},
249+
{
250+
name: "does not raise liveSyncStopped event for device, which is not currently being liveSynced",
251+
currentDeviceIdentifiers: ["device1", "device2", "device3"],
252+
expectedDeviceIdentifiers: ["device1"],
253+
deviceIdentifiersToBeStopped: ["device1", "device4"]
254+
}
255+
];
256+
257+
for (const testCase of testCases) {
258+
it(testCase.name, async () => {
259+
const testInjector = createTestInjector();
260+
const mainController = testInjector.resolve("mainController");
261+
262+
const runOnDevicesDataService: RunOnDevicesDataService = testInjector.resolve("runOnDevicesDataService");
263+
runOnDevicesDataService.persistData(projectDir, testCase.currentDeviceIdentifiers.map(identifier => (<any>{ identifier })));
264+
265+
const emittedDeviceIdentifiersForLiveSyncStoppedEvent: string[] = [];
266+
267+
const runOnDevicesEmitter = testInjector.resolve("runOnDevicesEmitter");
268+
runOnDevicesEmitter.on(RunOnDeviceEvents.runOnDeviceStopped, (data: any) => {
269+
assert.equal(data.projectDir, projectDir);
270+
emittedDeviceIdentifiersForLiveSyncStoppedEvent.push(data.deviceIdentifier);
271+
});
272+
273+
await mainController.stopRunOnDevices(projectDir, testCase.deviceIdentifiersToBeStopped);
274+
275+
assert.deepEqual(emittedDeviceIdentifiersForLiveSyncStoppedEvent, testCase.expectedDeviceIdentifiers);
276+
});
277+
}
278+
});
201279
});

0 commit comments

Comments
 (0)