Skip to content

Commit

Permalink
Unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Fatme Havaluova authored and Fatme Havaluova committed May 19, 2015
1 parent 7a84faa commit 9cf6f55
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 35 deletions.
17 changes: 9 additions & 8 deletions lib/project-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import constants = require("./constants");
import path = require("path");
import os = require("os");
import options = require("./options");
import options = require("./common/options");

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

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

private tryToUpgradeProject(): IFuture<void> {
return (() => {
var projectDir = this.projectDir || path.resolve(options.path || ".");
var oldProjectFilePath = path.join(projectDir, ProjectData.OLD_PROJECT_FILE_NAME);
let projectDir = this.projectDir || path.resolve(options.path || ".");
let oldProjectFilePath = path.join(projectDir, ProjectData.OLD_PROJECT_FILE_NAME);
if(this.$fs.exists(oldProjectFilePath).wait()) {
this.upgrade(projectDir, oldProjectFilePath).wait();
} else {
Expand All @@ -73,10 +74,10 @@ export class ProjectData implements IProjectData {
private upgrade(projectDir: string, oldProjectFilePath: string): IFuture<void> {
return (() => {
try {
var oldProjectData = this.$fs.readJson(oldProjectFilePath).wait();
let oldProjectData = this.$fs.readJson(oldProjectFilePath).wait();

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

Expand Down
133 changes: 106 additions & 27 deletions test/project-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import StaticConfigLib = require("../lib/config");
import NpmLib = require("../lib/node-package-manager");
import HttpClientLib = require("../lib/common/http-client");
import fsLib = require("../lib/common/file-system");
import platformServiceLib = require("../lib/services/platform-service");

import path = require("path");
import temp = require("temp");
Expand Down Expand Up @@ -65,7 +66,7 @@ class ProjectIntegrationTest {
var projectDir = path.join(tempFolder, projectName);
var appDirectoryPath = path.join(projectDir, "app");
var platformsDirectoryPath = path.join(projectDir, "platforms");
var tnsProjectFilePath = path.join(projectDir, "package.json");
let tnsProjectFilePath = path.join(projectDir, "package.json");

assert.isTrue(fs.exists(appDirectoryPath).wait());
assert.isTrue(fs.exists(platformsDirectoryPath).wait());
Expand Down Expand Up @@ -142,55 +143,133 @@ describe("Project Service Tests", () => {
});
});


function createOldProjectFile(testInjector: IInjector, tempFolder: string, projectData: any): void {
testInjector.resolve("fs").writeJson(path.join(tempFolder, ".tnsproject"), projectData).wait();
}

function createTestInjector() {
var testInjector = new yok.Yok();

this.testInjector.register("errors", stubs.ErrorsStub);
this.testInjector.register('logger', stubs.LoggerStub);
this.testInjector.register("projectService", ProjectServiceLib.ProjectService);
this.testInjector.register("projectHelper", ProjectHelperLib.ProjectHelper);
this.testInjector.register("projectTemplatesService", stubs.ProjectTemplatesService);
this.testInjector.register("projectNameValidator", mockProjectNameValidator);

this.testInjector.register("fs", fsLib.FileSystem);
this.testInjector.register("projectDataService", ProjectDataServiceLib.ProjectDataService); this.testInjector.register()
testInjector.register("errors", stubs.ErrorsStub);
testInjector.register('logger', stubs.LoggerStub);
testInjector.register("projectService", ProjectServiceLib.ProjectService);
testInjector.register("projectHelper", ProjectHelperLib.ProjectHelper);
testInjector.register("projectTemplatesService", stubs.ProjectTemplatesService);
testInjector.register("projectNameValidator", mockProjectNameValidator);

testInjector.register("fs", fsLib.FileSystem);
testInjector.register("projectDataService", ProjectDataServiceLib.ProjectDataService);

this.testInjector.register("staticConfig", StaticConfigLib.StaticConfig);
testInjector.register("staticConfig", StaticConfigLib.StaticConfig);

this.testInjector.register("npm", NpmLib.NodePackageManager);
this.testInjector.register("httpClient", HttpClientLib.HttpClient);
this.testInjector.register("config", {});
this.testInjector.register("lockfile", stubs.LockFile);
testInjector.register("npm", NpmLib.NodePackageManager);
testInjector.register("httpClient", HttpClientLib.HttpClient);
testInjector.register("config", {});
testInjector.register("lockfile", stubs.LockFile);

testInjector.register('projectData', ProjectDataLib.ProjectData);

return testInjector;
}

describe("project upgrade procedure tests", () => {
it("should throw error when no nativescript project folder specified", () => {
var testInjector = createTestInjector();
var tempFolder = temp.mkdirSync("project upgrade");
options.path = tempFolder;
var isErrorThrown = false;

try {
testInjector.resolve("projectData"); // This should trigger upgrade procedure
} catch(err) {
isErrorThrown = true;
var expectedErrorMessage = "No project found at or above '%s' and neither was a --path specified.," + tempFolder;
assert.equal(expectedErrorMessage, err.toString());
}

assert.isTrue(isErrorThrown);
});
it("should upgrade project when .tnsproject file exists and package.json doesn't exist", () => {
it("should upgrade project when .tnsproject file exists but package.json file doesn't exist", () => {
var testInjector = createTestInjector();
var fs: IFileSystem = testInjector.resolve("fs");

var tempFolder = temp.mkdirSync("projectUpgradeTest2");
options.path = tempFolder;
var tnsProjectData = {
"id": "org.nativescript.Test",
"tns-ios": {
"version": "1.0.0"
}
};
var projectData = testInjector.resolve(projectDataLib.ProjectData)
createOldProjectFile(testInjector, tempFolder, tnsProjectData);
options.path = tempFolder;
});
it("should upgrade project when .tnsproject and package.json exist and nativescript key is not presented in package.json file", () => {
var tnsProjectFilePath = path.join(tempFolder, ".tnsproject");
fs.writeJson(tnsProjectFilePath, tnsProjectData).wait();

testInjector.resolve("projectData"); // This should trigger upgrade procedure

var packageJsonFilePath = path.join(tempFolder, "package.json");
var packageJsonFileContent = require(packageJsonFilePath);
assert.isTrue(fs.exists(packageJsonFilePath).wait());
assert.isFalse(fs.exists(tnsProjectFilePath).wait());
assert.deepEqual(tnsProjectData, packageJsonFileContent["nativescript"]);
});
it("should upgrade project when .tnsproject and package.json exist but nativescript key is not presented in package.json file", () => {
var testInjector = createTestInjector();
var fs: IFileSystem = testInjector.resolve("fs");

var tempFolder = temp.mkdirSync("projectUpgradeTest3");
options.path = tempFolder;
var tnsProjectData = {
"id": "org.nativescript.Test",
"tns-ios": {
"version": "1.0.1"
}
};
var packageJsonData = {
"name": "testModuleName",
"version": "0.0.0",
"dependencies": {
"myFirstDep": "0.0.1"
}
}
let tnsProjectFilePath = path.join(tempFolder, ".tnsproject");
fs.writeJson(tnsProjectFilePath, tnsProjectData).wait();

var packageJsonFilePath = path.join(tempFolder, "package.json");
fs.writeJson(packageJsonFilePath, packageJsonData).wait();

testInjector.resolve("projectData"); // This should trigger upgrade procedure

var packageJsonFileContent = require(packageJsonFilePath);
var expectedPackageJsonContent: any = packageJsonData;
expectedPackageJsonContent["nativescript"] = tnsProjectData;
assert.deepEqual(expectedPackageJsonContent, packageJsonFileContent);
});
it("shouldn't upgrade project when .tnsproject and package.json exist and nativescript key is presented in package.json file", () => {
var testInjector = createTestInjector();
var fs: IFileSystem = testInjector.resolve("fs");

var tempFolder = temp.mkdirSync("projectUpgradeTest4");
options.path = tempFolder;
var tnsProjectData = {

};
var packageJsonData = {
"name": "testModuleName",
"version": "0.0.0",
"dependencies": {
"myFirstDep": "0.0.2"
},
"nativescript": {
"id": "org.nativescript.Test",
"tns-ios": {
"version": "1.0.2"
}
}
}

fs.writeJson(path.join(tempFolder, ".tnsproject"), tnsProjectData).wait();
fs.writeJson(path.join(tempFolder, "package.json"), packageJsonData).wait();
testInjector.resolve("projectData"); // This should trigger upgrade procedure

var packageJsonFilePath = path.join(tempFolder, "package.json");
var packageJsonFileContent = require(packageJsonFilePath);

assert.deepEqual(packageJsonData, packageJsonFileContent);
});
});
});

0 comments on commit 9cf6f55

Please sign in to comment.