Skip to content

Commit 33cf15b

Browse files
Fatme Havaluovarosen-vladimirov
Fatme Havaluova
authored andcommitted
Unit tests
1 parent 32d168a commit 33cf15b

File tree

2 files changed

+78
-44
lines changed

2 files changed

+78
-44
lines changed

lib/tools/broccoli/node-modules-dest-copy.ts

+35-33
Original file line numberDiff line numberDiff line change
@@ -17,50 +17,49 @@ export class DestCopy implements IBroccoliPlugin {
1717
private dependencies: IDictionary<any> = null;
1818
private devDependencies: IDictionary<any> = null;
1919

20-
constructor(private inputPath: string, private cachePath: string, private outputRoot: string, private projectDir: string) {
20+
constructor(private inputPath: string, private cachePath: string, private outputRoot: string, private projectDir: string,
21+
private $fs: IFileSystem) {
2122
this.dependencies = Object.create(null);
2223
this.devDependencies = this.getDevDependencies(projectDir);
2324
}
2425

2526
public rebuildChangedDirectories(changedDirectories: string[]): void {
2627
_.each(changedDirectories, changedDirectoryAbsolutePath => {
2728
let pathToPackageJson = path.join(changedDirectoryAbsolutePath, "package.json");
28-
if(fs.existsSync(pathToPackageJson)) {
29-
let packageJsonFiles = [pathToPackageJson];
30-
let nodeModulesFolderPath = path.join(changedDirectoryAbsolutePath, "node_modules");
31-
packageJsonFiles = packageJsonFiles.concat(this.enumeratePackageJsonFilesSync(nodeModulesFolderPath));
29+
let packageJsonFiles = fs.existsSync(pathToPackageJson) ? [pathToPackageJson] : [];
30+
let nodeModulesFolderPath = path.join(changedDirectoryAbsolutePath, "node_modules");
31+
packageJsonFiles = packageJsonFiles.concat(this.enumeratePackageJsonFilesSync(nodeModulesFolderPath));
32+
33+
_.each(packageJsonFiles, packageJsonFilePath => {
34+
let fileContent = require(packageJsonFilePath);
35+
let isPlugin = fileContent.nativescript;
36+
37+
if(!this.devDependencies[fileContent.name]) { // Don't flatten dev dependencies
38+
39+
let currentDependency = {
40+
name: fileContent.name,
41+
version: fileContent.version,
42+
directory: path.dirname(packageJsonFilePath),
43+
isPlugin: isPlugin
44+
};
3245

33-
_.each(packageJsonFiles, packageJsonFilePath => {
34-
let fileContent = require(packageJsonFilePath);
35-
let isPlugin = fileContent.nativescript;
46+
let addedDependency = this.dependencies[currentDependency.name];
47+
if (addedDependency) {
48+
if (semver.gt(currentDependency.version, addedDependency.version)) {
49+
let currentDependencyMajorVersion = semver.major(currentDependency.version);
50+
let addedDependencyMajorVersion = semver.major(addedDependency.version);
51+
52+
let message = `The depedency located at ${addedDependency.directory} with version ${addedDependency.version} will be replaced with dependency located at ${currentDependency.directory} with version ${currentDependency.version}`;
53+
let logger = $injector.resolve("$logger");
54+
currentDependencyMajorVersion === addedDependencyMajorVersion ? logger.out(message) : logger.warn(message);
3655

37-
if(!this.devDependencies[fileContent.name]) { // Don't flatten dev dependencies
38-
39-
let currentDependency = {
40-
name: fileContent.name,
41-
version: fileContent.version,
42-
directory: path.dirname(packageJsonFilePath),
43-
isPlugin: isPlugin
44-
};
45-
46-
let addedDependency = this.dependencies[currentDependency.name];
47-
if (addedDependency) {
48-
if (semver.gt(currentDependency.version, addedDependency.version)) {
49-
let currentDependencyMajorVersion = semver.major(currentDependency.version);
50-
let addedDependencyMajorVersion = semver.major(addedDependency.version);
51-
52-
let message = `The depedency located at ${addedDependency.directory} with version ${addedDependency.version} will be replaced with dependency located at ${currentDependency.directory} with version ${currentDependency.version}`;
53-
let logger = $injector.resolve("$logger");
54-
currentDependencyMajorVersion === addedDependencyMajorVersion ? logger.out(message) : logger.warn(message);
55-
56-
this.dependencies[currentDependency.name] = currentDependency;
57-
}
58-
} else {
5956
this.dependencies[currentDependency.name] = currentDependency;
6057
}
58+
} else {
59+
this.dependencies[currentDependency.name] = currentDependency;
6160
}
62-
});
63-
}
61+
}
62+
});
6463
});
6564

6665
_.each(this.dependencies, dependency => {
@@ -93,7 +92,10 @@ export class DestCopy implements IBroccoliPlugin {
9392
if(fs.existsSync(nodeModulesDirectoryPath)) {
9493
let contents = fs.readdirSync(nodeModulesDirectoryPath);
9594
for (let i = 0; i < contents.length; ++i) {
96-
foundFiles.push(path.join(nodeModulesDirectoryPath, contents[i], "package.json"));
95+
let packageJsonFilePath = path.join(nodeModulesDirectoryPath, contents[i], "package.json");
96+
if (fs.existsSync(packageJsonFilePath)) {
97+
foundFiles.push(packageJsonFilePath);
98+
}
9799

98100
var directoryPath = path.join(nodeModulesDirectoryPath, contents[i], "node_modules");
99101
if (fs.existsSync(directoryPath)) {

test/npm-support.ts

+43-11
Original file line numberDiff line numberDiff line change
@@ -88,15 +88,10 @@ function createProject(testInjector: IInjector, dependencies?: any): string {
8888
return tempFolder;
8989
}
9090

91-
describe("Npm support tests", () => {
92-
it("Ensures that the installed dependencies are prepared correctly", () => {
93-
let dependencies = {
94-
"bplist": "0.0.4",
95-
"lodash": "3.9.3"
96-
};
97-
91+
function setupProject(): IFuture<any> {
92+
return (() => {
9893
let testInjector = createTestInjector();
99-
let projectFolder = createProject(testInjector, dependencies);
94+
let projectFolder = createProject(testInjector);
10095

10196
let fs = testInjector.resolve("fs");
10297

@@ -112,7 +107,6 @@ describe("Npm support tests", () => {
112107
let androidFolderPath = path.join(projectFolder, "platforms", "android");
113108
fs.ensureDirectoryExists(androidFolderPath).wait();
114109

115-
116110
// Mock platform data
117111
let appDestinationFolderPath = path.join(androidFolderPath, "assets");
118112
let platformsData = testInjector.resolve("platformsData");
@@ -129,8 +123,45 @@ describe("Npm support tests", () => {
129123
}
130124
};
131125

132-
let platformService = testInjector.resolve("platformService");
133-
platformService.preparePlatform("android").wait();
126+
return {
127+
testInjector: testInjector,
128+
projectFolder: projectFolder,
129+
appDestinationFolderPath: appDestinationFolderPath,
130+
};
131+
}).future<any>()();
132+
}
133+
134+
function addDependencies(testInjector: IInjector, projectFolder: string, dependencies: any): IFuture<void> {
135+
return (() => {
136+
let fs = testInjector.resolve("fs");
137+
let packageJsonPath = path.join(projectFolder, "package.json");
138+
let packageJsonData = fs.readJson(packageJsonPath).wait();
139+
140+
let currentDependencies = packageJsonData.dependencies;
141+
_.extend(currentDependencies, dependencies);
142+
fs.writeJson(packageJsonPath, packageJsonData).wait();
143+
}).future<void>()();
144+
}
145+
146+
function preparePlatform(testInjector: IInjector): IFuture<void> {
147+
let platformService = testInjector.resolve("platformService");
148+
return platformService.preparePlatform("android");
149+
}
150+
151+
describe("Npm support tests", () => {
152+
let testInjector: IInjector, projectFolder: string, appDestinationFolderPath: string;
153+
before(() => {
154+
let projectSetup = setupProject().wait();
155+
testInjector = projectSetup.testInjector;
156+
projectFolder = projectSetup.projectFolder;
157+
appDestinationFolderPath = projectSetup.appDestinationFolderPath;
158+
});
159+
it("Ensures that the installed dependencies are prepared correctly", () => {
160+
// Setup
161+
addDependencies(testInjector, projectFolder, {"bplist": "0.0.4"}).wait();
162+
163+
// Act
164+
preparePlatform(testInjector).wait();
134165

135166
// Assert
136167
let tnsModulesFolderPath = path.join(appDestinationFolderPath, "app", "tns_modules");
@@ -139,6 +170,7 @@ describe("Npm support tests", () => {
139170
let bplistCreatorFolderPath = path.join(tnsModulesFolderPath, "bplist-creator");
140171
let bplistParserFolderPath = path.join(tnsModulesFolderPath, "bplist-parser");
141172

173+
let fs = testInjector.resolve("fs");
142174
assert.isTrue(fs.exists(lodashFolderPath).wait());
143175
assert.isTrue(fs.exists(bplistFolderPath).wait());
144176
assert.isTrue(fs.exists(bplistCreatorFolderPath).wait());

0 commit comments

Comments
 (0)