Skip to content

Commit f4598fe

Browse files
Merge pull request #3580 from NativeScript/vladimirov/fix-isValidNsProject
fix(API): isValidNativeScriptProject returns incorrect result
2 parents a51a706 + 67f41ae commit f4598fe

File tree

2 files changed

+48
-22
lines changed

2 files changed

+48
-22
lines changed

lib/services/project-service.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,9 @@ export class ProjectService implements IProjectService {
8080
@exported("projectService")
8181
public isValidNativeScriptProject(pathToProject?: string): boolean {
8282
try {
83-
this.$projectData.initializeProjectData(pathToProject);
84-
return !!this.$projectData.projectDir && !!this.$projectData.projectId;
83+
const projectData = this.$projectDataService.getProjectData(pathToProject);
84+
85+
return !!projectData && !!projectData.projectDir && !!projectData.projectId;
8586
} catch (e) {
8687
return false;
8788
}

test/project-service.ts

+45-20
Original file line numberDiff line numberDiff line change
@@ -420,13 +420,16 @@ describe("Project Service Tests", () => {
420420
});
421421

422422
describe("isValidNativeScriptProject", () => {
423-
const getTestInjector = (): IInjector => {
423+
const getTestInjector = (projectData?: any): IInjector => {
424424
const testInjector = new yok.Yok();
425425
testInjector.register("npm", {});
426426
testInjector.register("errors", {});
427427
testInjector.register("fs", {});
428428
testInjector.register("logger", {});
429-
testInjector.register("projectDataService", {});
429+
testInjector.register("projectDataService", {
430+
getProjectData: (projectDir?: string): IProjectData => projectData
431+
});
432+
testInjector.register("projectData", {});
430433
testInjector.register("projectNameService", {});
431434
testInjector.register("projectTemplatesService", {});
432435
testInjector.register("staticConfig", {});
@@ -437,44 +440,66 @@ describe("Project Service Tests", () => {
437440
return testInjector;
438441
};
439442

440-
it("returns true when initialize project data does not throw, projectDir and projectId are valid", () => {
441-
const testInjector = getTestInjector();
442-
testInjector.register("projectData", {
443+
it("returns true when getProjectData does not throw, projectDir and projectId are valid", () => {
444+
const testInjector = getTestInjector({
443445
projectDir: "projectDir",
444-
projectId: "projectId",
445-
initializeProjectData: (): void => undefined
446+
projectId: "projectId"
446447
});
447448

448449
const projectService: IProjectService = testInjector.resolve(ProjectServiceLib.ProjectService);
449450
assert.isTrue(projectService.isValidNativeScriptProject("some-dir"));
450451
});
451452

452-
it("returns false when initialize project data throws", () => {
453+
it("returns correct data when multiple calls are executed", () => {
453454
const testInjector = getTestInjector();
454-
testInjector.register("projectData", {
455-
initializeProjectData: (): void => { throw new Error("err"); }
455+
const projectDataService = testInjector.resolve<IProjectDataService>("projectDataService");
456+
const projectData: any = {
457+
projectDir: "projectDir",
458+
projectId: "projectId"
459+
};
460+
461+
let returnedProjectData: any = null;
462+
projectDataService.getProjectData = (projectDir?: string): IProjectData => {
463+
projectData.projectDir = projectDir;
464+
returnedProjectData = projectData;
465+
return returnedProjectData;
466+
};
467+
468+
const projectService: IProjectService = testInjector.resolve(ProjectServiceLib.ProjectService);
469+
assert.isTrue(projectService.isValidNativeScriptProject("some-dir"));
470+
assert.equal(returnedProjectData.projectDir, "some-dir");
471+
assert.isTrue(projectService.isValidNativeScriptProject("some-dir-2"));
472+
assert.equal(returnedProjectData.projectDir, "some-dir-2");
473+
474+
projectDataService.getProjectData = (projectDir?: string): IProjectData => {
475+
throw new Error("Err");
476+
};
477+
478+
assert.isFalse(projectService.isValidNativeScriptProject("some-dir-2"));
479+
});
480+
481+
it("returns false when getProjectData throws", () => {
482+
const testInjector = getTestInjector(null);
483+
testInjector.register("projectDataService", {
484+
getProjectData: (): void => { throw new Error("err"); }
456485
});
457486

458487
const projectService: IProjectService = testInjector.resolve(ProjectServiceLib.ProjectService);
459488
assert.isFalse(projectService.isValidNativeScriptProject("some-dir"));
460489
});
461490

462-
it("returns false when initializeProjectData does not throw, but there's no projectDir set", () => {
463-
const testInjector = getTestInjector();
464-
testInjector.register("projectData", {
465-
projectId: "projectId",
466-
initializeProjectData: (): void => undefined
491+
it("returns false when getProjectData does not throw, but there's no projectDir set", () => {
492+
const testInjector = getTestInjector({
493+
projectId: "projectId"
467494
});
468495

469496
const projectService: IProjectService = testInjector.resolve(ProjectServiceLib.ProjectService);
470497
assert.isFalse(projectService.isValidNativeScriptProject("some-dir"));
471498
});
472499

473-
it("returns false when initializeProjectData does not throw, but there's no projectId set", () => {
474-
const testInjector = getTestInjector();
475-
testInjector.register("projectData", {
476-
projectDir: "projectDir",
477-
initializeProjectData: (): void => undefined
500+
it("returns false when getProjectData does not throw, but there's no projectId set", () => {
501+
const testInjector = getTestInjector({
502+
projectDir: "projectDir"
478503
});
479504

480505
const projectService: IProjectService = testInjector.resolve(ProjectServiceLib.ProjectService);

0 commit comments

Comments
 (0)