Skip to content

Commit 934e767

Browse files
committed
fix: relevant existing update tests and help
1 parent f16d29b commit 934e767

File tree

3 files changed

+131
-216
lines changed

3 files changed

+131
-216
lines changed

docs/man_pages/project/configuration/update.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<% if (isJekyll) { %>---
2-
title: tns platform update
2+
title: tns update
33
position: 8
44
---<% } %>
55

6-
# tns platform update
6+
# tns update
77

88
### Description
99

10-
Updates a NativeScript project to the latest (or specified) version.
10+
Updates a NativeScript to the latest compatible combination of NativeScript dependencies. The combination of dependencies is taken from the latest(or specified) version of the template for the type of the target project (Angular, Vue.js and etc.).
1111

1212
### Commands
1313

test/controllers/update-controller.ts

+118
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
import * as stubs from "./../stubs";
2+
import * as yok from "../../lib/common/yok";
3+
import { UpdateController } from "../../lib/controllers/update-controller";
4+
import { assert } from "chai";
5+
import * as sinon from 'sinon';
6+
import * as path from "path";
7+
import { Options } from "../../lib/options";
8+
import { StaticConfig } from "../../lib/config";
9+
import { SettingsService } from "../../lib/common/test/unit-tests/stubs";
10+
import { DevicePlatformsConstants } from "../../lib/common/mobile/device-platforms-constants";
11+
const projectFolder = "test";
12+
13+
function createTestInjector(
14+
projectDir: string = projectFolder
15+
): IInjector {
16+
const testInjector: IInjector = new yok.Yok();
17+
testInjector.register("logger", stubs.LoggerStub);
18+
testInjector.register("options", Options);
19+
testInjector.register("analyticsService", {
20+
trackException: async (): Promise<void> => undefined,
21+
checkConsent: async (): Promise<void> => undefined,
22+
trackFeature: async (): Promise<void> => undefined
23+
});
24+
testInjector.register('errors', stubs.ErrorsStub);
25+
testInjector.register("staticConfig", StaticConfig);
26+
testInjector.register("projectData", {
27+
projectDir,
28+
initializeProjectData: () => { /* empty */ },
29+
dependencies: {}
30+
});
31+
testInjector.register("settingsService", SettingsService);
32+
testInjector.register("migrateController", {
33+
shouldMigrate: () => { return false; },
34+
});
35+
testInjector.register('fs', stubs.FileSystemStub);
36+
testInjector.register('platformCommandHelper', {
37+
getCurrentPlatformVersion: () => {
38+
return "5.2.0";
39+
}
40+
});
41+
42+
testInjector.register('packageManager', {
43+
getTagVersion: () => {
44+
return "2.3.0";
45+
}
46+
});
47+
testInjector.register("addPlatformService", {
48+
setPlatformVersion: () => {/**/}
49+
});
50+
testInjector.register("pluginsService", {
51+
addToPackageJson: () => {/**/}
52+
});
53+
testInjector.register('devicePlatformsConstants', DevicePlatformsConstants);
54+
testInjector.register('packageInstallationManager', stubs.PackageInstallationManagerStub);
55+
testInjector.register('platformsDataService', stubs.NativeProjectDataStub);
56+
testInjector.register("pacoteService", stubs.PacoteServiceStub);
57+
testInjector.register('projectDataService', stubs.ProjectDataService);
58+
testInjector.register("updateController", UpdateController);
59+
60+
return testInjector;
61+
}
62+
63+
describe("update controller method tests", () => {
64+
let sandbox: sinon.SinonSandbox;
65+
66+
beforeEach(() => {
67+
sandbox = sinon.sandbox.create();
68+
});
69+
70+
afterEach(() => {
71+
sandbox.restore();
72+
});
73+
74+
it("if backup fails, platforms not deleted, temp removed", async () => {
75+
const testInjector = createTestInjector();
76+
const fs = testInjector.resolve("fs");
77+
const deleteDirectory: sinon.SinonStub = sandbox.stub(fs, "deleteDirectory");
78+
sandbox.stub(fs, "copyFile").throws();
79+
const updateController = testInjector.resolve("updateController");
80+
81+
await updateController.update(projectFolder, ["3.3.0"]);
82+
83+
assert.isTrue(deleteDirectory.calledWith(path.join(projectFolder, UpdateController.tempFolder)));
84+
assert.isFalse(deleteDirectory.calledWith(path.join(projectFolder, "platforms")));
85+
});
86+
87+
it("calls copy to temp for package.json and folders(backup)", async () => {
88+
const testInjector = createTestInjector();
89+
const fs = testInjector.resolve("fs");
90+
const copyFileStub = sandbox.stub(fs, "copyFile");
91+
const updateController = testInjector.resolve("updateController");
92+
93+
await updateController.update(projectFolder, ["3.3.0"]);
94+
95+
assert.isTrue(copyFileStub.calledWith(path.join(projectFolder, "package.json")));
96+
for (const folder of UpdateController.folders) {
97+
assert.isTrue(copyFileStub.calledWith(path.join(projectFolder, folder)));
98+
}
99+
});
100+
101+
it("calls copy from temp for package.json and folders to project folder(restore)", async () => {
102+
const testInjector = createTestInjector();
103+
testInjector.resolve("platformCommandHelper").removePlatforms = () => {
104+
throw new Error();
105+
};
106+
const fs = testInjector.resolve("fs");
107+
const copyFileStub = sandbox.stub(fs, "copyFile");
108+
const updateController = testInjector.resolve("updateController");
109+
const tempDir = path.join(projectFolder, UpdateController.tempFolder);
110+
111+
await updateController.update(projectFolder, ["3.3.0"]);
112+
113+
assert.isTrue(copyFileStub.calledWith(path.join(tempDir, "package.json"), projectFolder));
114+
for (const folder of UpdateController.folders) {
115+
assert.isTrue(copyFileStub.calledWith(path.join(tempDir, folder), projectFolder));
116+
}
117+
});
118+
});

0 commit comments

Comments
 (0)