From f8504c7b5b96c9089c21e4d9a0c2d3e23031570a Mon Sep 17 00:00:00 2001 From: nontangent Date: Fri, 4 Nov 2022 14:53:47 +0900 Subject: [PATCH] fix(schematics): rewrite `projectFromRc` and add spec file --- src/schematics/utils.jasmine.ts | 69 +++++++++++++++++++++++++++++++++ src/schematics/utils.ts | 18 +++++---- 2 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 src/schematics/utils.jasmine.ts diff --git a/src/schematics/utils.jasmine.ts b/src/schematics/utils.jasmine.ts new file mode 100644 index 000000000..0f69fcaea --- /dev/null +++ b/src/schematics/utils.jasmine.ts @@ -0,0 +1,69 @@ +import { projectFromRc } from './utils'; + +describe('projectFromRc()', () => { + it('Given `projects.default`, should return default project', () => { + const FIRE_BASE_RC = `{ + "targets": { + "project_prod": { + "hosting": { + "app_1": [ + "target_1_prod" + ], + "app_2": [ + "target_2_prod" + ] + } + }, + "project_stg": { + "hosting": { + "app_1": [ + "target_1_stg" + ], + "app_2": [ + "target_2_stg" + ] + } + } + }, + "projects": { + "default": "project_stg" + } + }`; + expect(projectFromRc(JSON.parse(FIRE_BASE_RC), 'app_1')).toEqual(['project_stg', 'target_1_stg']); + }); + + it('Given no `projects.default`, should return first matched project', () => { + const FIRE_BASE_RC = `{ + "targets": { + "project_prod": { + "hosting": { + "app_1": [ + "target_1_prod" + ], + "app_2": [ + "target_2_prod" + ] + } + }, + "project_stg": { + "hosting": { + "app_1": [ + "target_1_stg" + ], + "app_2": [ + "target_2_stg" + ] + } + } + } + }`; + expect(projectFromRc(JSON.parse(FIRE_BASE_RC), 'app_1')).toEqual(['project_prod', 'target_1_prod']); + }); + + it('Given empty targets, return [undefined, undefined]', () => { + const FIRE_BASE_RC = `{ + "targets": {} + }`; + expect(projectFromRc(JSON.parse(FIRE_BASE_RC), 'app_1')).toEqual([undefined, undefined]); + }); +}); diff --git a/src/schematics/utils.ts b/src/schematics/utils.ts index a164f5fc9..fa40185f9 100644 --- a/src/schematics/utils.ts +++ b/src/schematics/utils.ts @@ -95,13 +95,17 @@ export function getFirebaseProjectNameFromFs( } } -const projectFromRc = (rc: FirebaseRc, target: string): [string|undefined, string|undefined] => { - const defaultProject = rc.projects?.default; - const project = Object.keys(rc.targets || {}).find( - project => !!rc.targets?.[project]?.hosting?.[target] - ); - const site = project && rc.targets?.[project]?.hosting?.[target]?.[0]; - return [project || defaultProject, site]; +export const projectFromRc = (rc: FirebaseRc, target: string): [string|undefined, string|undefined] => { + if (!rc.targets) { + return [undefined, undefined]; + } + + const project = rc.projects?.default || Object.keys(rc.targets)[0]; + if (!project) { + return [undefined, undefined]; + } + + return [project, rc.targets[project].hosting[target][0]]; }; /**