Skip to content

Commit 9cf6f55

Browse files
Fatme HavaluovaFatme Havaluova
Fatme Havaluova
authored and
Fatme Havaluova
committed
Unit tests
1 parent 7a84faa commit 9cf6f55

File tree

2 files changed

+115
-35
lines changed

2 files changed

+115
-35
lines changed

lib/project-data.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import constants = require("./constants");
55
import path = require("path");
66
import os = require("os");
7-
import options = require("./options");
7+
import options = require("./common/options");
88

99
export class ProjectData implements IProjectData {
1010
private static OLD_PROJECT_FILE_NAME = ".tnsproject";
@@ -29,11 +29,12 @@ export class ProjectData implements IProjectData {
2929
// If no project found, projectDir should be null
3030
if(projectDir) {
3131
this.initializeProjectDataCore(projectDir);
32+
let data: any = null;
3233

3334
if (this.$fs.exists(this.projectFilePath).wait()) {
3435
try {
35-
var fileContent = this.$fs.readJson(this.projectFilePath).wait();
36-
var data = fileContent[this.$staticConfig.CLIENT_NAME_KEY_IN_PROJECT_FILE];
36+
let fileContent = this.$fs.readJson(this.projectFilePath).wait();
37+
data = fileContent[this.$staticConfig.CLIENT_NAME_KEY_IN_PROJECT_FILE];
3738
} catch (err) {
3839
this.$errors.fail({formatStr: "The project file %s is corrupted." + os.EOL +
3940
"Consider restoring an earlier version from your source control or backup." + os.EOL +
@@ -60,8 +61,8 @@ export class ProjectData implements IProjectData {
6061

6162
private tryToUpgradeProject(): IFuture<void> {
6263
return (() => {
63-
var projectDir = this.projectDir || path.resolve(options.path || ".");
64-
var oldProjectFilePath = path.join(projectDir, ProjectData.OLD_PROJECT_FILE_NAME);
64+
let projectDir = this.projectDir || path.resolve(options.path || ".");
65+
let oldProjectFilePath = path.join(projectDir, ProjectData.OLD_PROJECT_FILE_NAME);
6566
if(this.$fs.exists(oldProjectFilePath).wait()) {
6667
this.upgrade(projectDir, oldProjectFilePath).wait();
6768
} else {
@@ -73,10 +74,10 @@ export class ProjectData implements IProjectData {
7374
private upgrade(projectDir: string, oldProjectFilePath: string): IFuture<void> {
7475
return (() => {
7576
try {
76-
var oldProjectData = this.$fs.readJson(oldProjectFilePath).wait();
77+
let oldProjectData = this.$fs.readJson(oldProjectFilePath).wait();
7778

78-
var newProjectFilePath = this.projectFilePath || path.join(projectDir, this.$staticConfig.PROJECT_FILE_NAME);
79-
var newProjectData = this.$fs.exists(newProjectFilePath).wait() ? this.$fs.readJson(newProjectFilePath).wait() : {};
79+
let newProjectFilePath = this.projectFilePath || path.join(projectDir, this.$staticConfig.PROJECT_FILE_NAME);
80+
let newProjectData = this.$fs.exists(newProjectFilePath).wait() ? this.$fs.readJson(newProjectFilePath).wait() : {};
8081
newProjectData[this.$staticConfig.CLIENT_NAME_KEY_IN_PROJECT_FILE] = oldProjectData;
8182
this.$fs.writeJson(newProjectFilePath, newProjectData).wait();
8283

test/project-service.ts

Lines changed: 106 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import StaticConfigLib = require("../lib/config");
1212
import NpmLib = require("../lib/node-package-manager");
1313
import HttpClientLib = require("../lib/common/http-client");
1414
import fsLib = require("../lib/common/file-system");
15+
import platformServiceLib = require("../lib/services/platform-service");
1516

1617
import path = require("path");
1718
import temp = require("temp");
@@ -65,7 +66,7 @@ class ProjectIntegrationTest {
6566
var projectDir = path.join(tempFolder, projectName);
6667
var appDirectoryPath = path.join(projectDir, "app");
6768
var platformsDirectoryPath = path.join(projectDir, "platforms");
68-
var tnsProjectFilePath = path.join(projectDir, "package.json");
69+
let tnsProjectFilePath = path.join(projectDir, "package.json");
6970

7071
assert.isTrue(fs.exists(appDirectoryPath).wait());
7172
assert.isTrue(fs.exists(platformsDirectoryPath).wait());
@@ -142,55 +143,133 @@ describe("Project Service Tests", () => {
142143
});
143144
});
144145

145-
146-
function createOldProjectFile(testInjector: IInjector, tempFolder: string, projectData: any): void {
147-
testInjector.resolve("fs").writeJson(path.join(tempFolder, ".tnsproject"), projectData).wait();
148-
}
149-
150146
function createTestInjector() {
151147
var testInjector = new yok.Yok();
152148

153-
this.testInjector.register("errors", stubs.ErrorsStub);
154-
this.testInjector.register('logger', stubs.LoggerStub);
155-
this.testInjector.register("projectService", ProjectServiceLib.ProjectService);
156-
this.testInjector.register("projectHelper", ProjectHelperLib.ProjectHelper);
157-
this.testInjector.register("projectTemplatesService", stubs.ProjectTemplatesService);
158-
this.testInjector.register("projectNameValidator", mockProjectNameValidator);
159-
160-
this.testInjector.register("fs", fsLib.FileSystem);
161-
this.testInjector.register("projectDataService", ProjectDataServiceLib.ProjectDataService); this.testInjector.register()
149+
testInjector.register("errors", stubs.ErrorsStub);
150+
testInjector.register('logger', stubs.LoggerStub);
151+
testInjector.register("projectService", ProjectServiceLib.ProjectService);
152+
testInjector.register("projectHelper", ProjectHelperLib.ProjectHelper);
153+
testInjector.register("projectTemplatesService", stubs.ProjectTemplatesService);
154+
testInjector.register("projectNameValidator", mockProjectNameValidator);
155+
156+
testInjector.register("fs", fsLib.FileSystem);
157+
testInjector.register("projectDataService", ProjectDataServiceLib.ProjectDataService);
162158

163-
this.testInjector.register("staticConfig", StaticConfigLib.StaticConfig);
159+
testInjector.register("staticConfig", StaticConfigLib.StaticConfig);
164160

165-
this.testInjector.register("npm", NpmLib.NodePackageManager);
166-
this.testInjector.register("httpClient", HttpClientLib.HttpClient);
167-
this.testInjector.register("config", {});
168-
this.testInjector.register("lockfile", stubs.LockFile);
161+
testInjector.register("npm", NpmLib.NodePackageManager);
162+
testInjector.register("httpClient", HttpClientLib.HttpClient);
163+
testInjector.register("config", {});
164+
testInjector.register("lockfile", stubs.LockFile);
165+
166+
testInjector.register('projectData', ProjectDataLib.ProjectData);
169167

170168
return testInjector;
171169
}
172170

173171
describe("project upgrade procedure tests", () => {
174172
it("should throw error when no nativescript project folder specified", () => {
173+
var testInjector = createTestInjector();
175174
var tempFolder = temp.mkdirSync("project upgrade");
176175
options.path = tempFolder;
176+
var isErrorThrown = false;
177+
178+
try {
179+
testInjector.resolve("projectData"); // This should trigger upgrade procedure
180+
} catch(err) {
181+
isErrorThrown = true;
182+
var expectedErrorMessage = "No project found at or above '%s' and neither was a --path specified.," + tempFolder;
183+
assert.equal(expectedErrorMessage, err.toString());
184+
}
185+
186+
assert.isTrue(isErrorThrown);
177187
});
178-
it("should upgrade project when .tnsproject file exists and package.json doesn't exist", () => {
188+
it("should upgrade project when .tnsproject file exists but package.json file doesn't exist", () => {
179189
var testInjector = createTestInjector();
190+
var fs: IFileSystem = testInjector.resolve("fs");
191+
192+
var tempFolder = temp.mkdirSync("projectUpgradeTest2");
193+
options.path = tempFolder;
180194
var tnsProjectData = {
181195
"id": "org.nativescript.Test",
182196
"tns-ios": {
183197
"version": "1.0.0"
184198
}
185199
};
186-
var projectData = testInjector.resolve(projectDataLib.ProjectData)
187-
createOldProjectFile(testInjector, tempFolder, tnsProjectData);
188-
options.path = tempFolder;
189-
});
190-
it("should upgrade project when .tnsproject and package.json exist and nativescript key is not presented in package.json file", () => {
200+
var tnsProjectFilePath = path.join(tempFolder, ".tnsproject");
201+
fs.writeJson(tnsProjectFilePath, tnsProjectData).wait();
202+
203+
testInjector.resolve("projectData"); // This should trigger upgrade procedure
204+
205+
var packageJsonFilePath = path.join(tempFolder, "package.json");
206+
var packageJsonFileContent = require(packageJsonFilePath);
207+
assert.isTrue(fs.exists(packageJsonFilePath).wait());
208+
assert.isFalse(fs.exists(tnsProjectFilePath).wait());
209+
assert.deepEqual(tnsProjectData, packageJsonFileContent["nativescript"]);
210+
});
211+
it("should upgrade project when .tnsproject and package.json exist but nativescript key is not presented in package.json file", () => {
212+
var testInjector = createTestInjector();
213+
var fs: IFileSystem = testInjector.resolve("fs");
214+
215+
var tempFolder = temp.mkdirSync("projectUpgradeTest3");
216+
options.path = tempFolder;
217+
var tnsProjectData = {
218+
"id": "org.nativescript.Test",
219+
"tns-ios": {
220+
"version": "1.0.1"
221+
}
222+
};
223+
var packageJsonData = {
224+
"name": "testModuleName",
225+
"version": "0.0.0",
226+
"dependencies": {
227+
"myFirstDep": "0.0.1"
228+
}
229+
}
230+
let tnsProjectFilePath = path.join(tempFolder, ".tnsproject");
231+
fs.writeJson(tnsProjectFilePath, tnsProjectData).wait();
232+
233+
var packageJsonFilePath = path.join(tempFolder, "package.json");
234+
fs.writeJson(packageJsonFilePath, packageJsonData).wait();
235+
236+
testInjector.resolve("projectData"); // This should trigger upgrade procedure
191237

238+
var packageJsonFileContent = require(packageJsonFilePath);
239+
var expectedPackageJsonContent: any = packageJsonData;
240+
expectedPackageJsonContent["nativescript"] = tnsProjectData;
241+
assert.deepEqual(expectedPackageJsonContent, packageJsonFileContent);
192242
});
193243
it("shouldn't upgrade project when .tnsproject and package.json exist and nativescript key is presented in package.json file", () => {
244+
var testInjector = createTestInjector();
245+
var fs: IFileSystem = testInjector.resolve("fs");
246+
247+
var tempFolder = temp.mkdirSync("projectUpgradeTest4");
248+
options.path = tempFolder;
249+
var tnsProjectData = {
250+
251+
};
252+
var packageJsonData = {
253+
"name": "testModuleName",
254+
"version": "0.0.0",
255+
"dependencies": {
256+
"myFirstDep": "0.0.2"
257+
},
258+
"nativescript": {
259+
"id": "org.nativescript.Test",
260+
"tns-ios": {
261+
"version": "1.0.2"
262+
}
263+
}
264+
}
265+
266+
fs.writeJson(path.join(tempFolder, ".tnsproject"), tnsProjectData).wait();
267+
fs.writeJson(path.join(tempFolder, "package.json"), packageJsonData).wait();
268+
testInjector.resolve("projectData"); // This should trigger upgrade procedure
269+
270+
var packageJsonFilePath = path.join(tempFolder, "package.json");
271+
var packageJsonFileContent = require(packageJsonFilePath);
194272

273+
assert.deepEqual(packageJsonData, packageJsonFileContent);
195274
});
196-
});
275+
});

0 commit comments

Comments
 (0)