From 08a05d36a1677cd26d594e6d3ee45f6f498d36be Mon Sep 17 00:00:00 2001 From: Igor Randjelovic Date: Wed, 10 Aug 2022 12:32:22 +0200 Subject: [PATCH] feat: ensure App_Resources exists before running --- lib/controllers/prepare-controller.ts | 5 ++++- lib/definitions/project.d.ts | 7 +++++++ lib/services/project-service.ts | 2 +- test/controllers/prepare-controller.ts | 10 ++++++++++ test/project-commands.ts | 4 ++++ 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/controllers/prepare-controller.ts b/lib/controllers/prepare-controller.ts index 8a4fc1e85e..2ec49f5d87 100644 --- a/lib/controllers/prepare-controller.ts +++ b/lib/controllers/prepare-controller.ts @@ -18,6 +18,7 @@ import { IProjectConfigService, IProjectData, IProjectDataService, + IProjectService, } from "../definitions/project"; import { INodeModulesDependenciesBuilder, @@ -64,7 +65,8 @@ export class PrepareController extends EventEmitter { private $watchIgnoreListService: IWatchIgnoreListService, private $analyticsService: IAnalyticsService, private $markingModeService: IMarkingModeService, - private $projectConfigService: IProjectConfigService + private $projectConfigService: IProjectConfigService, + private $projectService: IProjectService ) { super(); } @@ -127,6 +129,7 @@ export class PrepareController extends EventEmitter { prepareData: IPrepareData, projectData: IProjectData ): Promise { + await this.$projectService.ensureAppResourcesExist(projectData.projectDir); await this.$platformController.addPlatformIfNeeded( prepareData, projectData diff --git a/lib/definitions/project.d.ts b/lib/definitions/project.d.ts index fba5f9d988..1885afbe44 100644 --- a/lib/definitions/project.d.ts +++ b/lib/definitions/project.d.ts @@ -88,6 +88,13 @@ interface IProjectService { * @returns {boolean} returns true if the project is valid NativeScript project. */ isValidNativeScriptProject(pathToProject?: string): boolean; + + /** + * Checks if App_Resources exists, or pulls down a fresh set + * from the default template otherwise. + * @param {string} projectDir + */ + ensureAppResourcesExist(projectDir: string): Promise; } interface INsConfigPlaform { diff --git a/lib/services/project-service.ts b/lib/services/project-service.ts index b0fc74c86d..91bc4bce84 100644 --- a/lib/services/project-service.ts +++ b/lib/services/project-service.ts @@ -224,7 +224,7 @@ export class ProjectService implements IProjectService { } @performanceLog() - private async ensureAppResourcesExist(projectDir: string): Promise { + public async ensureAppResourcesExist(projectDir: string): Promise { const projectData = this.$projectDataService.getProjectData(projectDir); const appResourcesDestinationPath = projectData.getAppResourcesDirectoryPath( projectDir diff --git a/test/controllers/prepare-controller.ts b/test/controllers/prepare-controller.ts index c84335c394..017a1edafa 100644 --- a/test/controllers/prepare-controller.ts +++ b/test/controllers/prepare-controller.ts @@ -19,6 +19,7 @@ const prepareData = { let isCompileWithWatchCalled = false; let isCompileWithoutWatchCalled = false; let isNativePrepareCalled = false; +let isEnsuringAppResourcesExist = false; let emittedEventNames: string[] = []; let emittedEventData: any[] = []; @@ -64,6 +65,12 @@ function createTestInjector(data: { hasNativeChanges: boolean }): IInjector { }); injector.register("tempService", TempServiceStub); + injector.register("projectService", { + ensureAppResourcesExist(projectDir: string): Promise { + isEnsuringAppResourcesExist = true; + return; + }, + }); const prepareController: PrepareController = injector.resolve( "prepareController" @@ -84,6 +91,7 @@ describe("prepareController", () => { isNativePrepareCalled = false; isCompileWithWatchCalled = false; isCompileWithoutWatchCalled = false; + isEnsuringAppResourcesExist = false; emittedEventNames = []; emittedEventData = []; @@ -102,6 +110,7 @@ describe("prepareController", () => { assert.isTrue(isCompileWithWatchCalled); assert.isTrue(isNativePrepareCalled); + assert.isTrue(isEnsuringAppResourcesExist); }); }); it(`should respect native changes that are made before the initial preparation of the project had been done for ${platform}`, async () => { @@ -161,6 +170,7 @@ describe("prepareController", () => { assert.isTrue(isNativePrepareCalled); assert.isTrue(isCompileWithoutWatchCalled); assert.isFalse(isCompileWithWatchCalled); + assert.isTrue(isEnsuringAppResourcesExist); }); }); }); diff --git a/test/project-commands.ts b/test/project-commands.ts index e0db35ff89..1d3461a120 100644 --- a/test/project-commands.ts +++ b/test/project-commands.ts @@ -96,6 +96,10 @@ class ProjectServiceMock implements IProjectService { isValidNativeScriptProject(pathToProject?: string): boolean { return true; } + + ensureAppResourcesExist(projectDir: string): Promise { + return; + } } class ProjectNameValidatorMock implements IProjectNameValidator {