From 5867eebbd2ec7eaad0bbc8da94e38aca1fe7580b Mon Sep 17 00:00:00 2001 From: James Daniels Date: Tue, 28 Jan 2020 18:31:08 -0800 Subject: [PATCH] Updating the schematic for the list depreciation --- src/schematics/deploy/actions.spec.ts | 25 ++++++++----------------- src/schematics/deploy/actions.ts | 10 ++-------- src/schematics/interfaces.ts | 10 +++++++--- src/schematics/utils.ts | 16 +++++++--------- 4 files changed, 24 insertions(+), 37 deletions(-) diff --git a/src/schematics/deploy/actions.spec.ts b/src/schematics/deploy/actions.spec.ts index 24be1aace..d72e64ce3 100644 --- a/src/schematics/deploy/actions.spec.ts +++ b/src/schematics/deploy/actions.spec.ts @@ -1,6 +1,6 @@ import { JsonObject, logging } from '@angular-devkit/core'; -import { BuilderContext, BuilderRun, ScheduleOptions, Target, } from '@angular-devkit/architect/src/index2'; -import { FirebaseTools, FirebaseDeployConfig } from 'schematics/interfaces'; +import { BuilderContext, BuilderRun, ScheduleOptions, Target, } from '@angular-devkit/architect'; +import { FirebaseTools, FirebaseDeployConfig } from '../interfaces'; import deploy from './actions'; @@ -13,21 +13,10 @@ const PROJECT = 'pirojok-project'; describe('Deploy Angular apps', () => { beforeEach(() => initMocks()); - it('should check if the user is authenticated by invoking list', async () => { - const spy = spyOn(firebaseMock, 'list'); - const spyLogin = spyOn(firebaseMock, 'login'); + it('should call login', async () => { + const spy = spyOn(firebaseMock, 'login'); await deploy(firebaseMock, context, 'host', FIREBASE_PROJECT); expect(spy).toHaveBeenCalled(); - expect(spyLogin).not.toHaveBeenCalled(); - }); - - it('should invoke login if list rejects', async () => { - firebaseMock.list = () => Promise.reject(); - const spy = spyOn(firebaseMock, 'list').and.callThrough(); - const spyLogin = spyOn(firebaseMock, 'login'); - await deploy(firebaseMock, context, 'host', FIREBASE_PROJECT); - expect(spy).toHaveBeenCalled(); - expect(spyLogin).toHaveBeenCalled(); }); it('should invoke the builder', async () => { @@ -75,12 +64,14 @@ describe('Deploy Angular apps', () => { const initMocks = () => { firebaseMock = { login: () => Promise.resolve(), - list: () => Promise.resolve([]), + projects: { + list: () => Promise.resolve([]), + }, deploy: (_: FirebaseDeployConfig) => Promise.resolve(), use: () => Promise.resolve() }; - context = { + context = { target: { configuration: 'production', project: PROJECT, diff --git a/src/schematics/deploy/actions.ts b/src/schematics/deploy/actions.ts index 516fbf651..181e7a6d8 100644 --- a/src/schematics/deploy/actions.ts +++ b/src/schematics/deploy/actions.ts @@ -11,14 +11,8 @@ export default async function deploy( throw new Error("Cannot find firebase project for your app in .firebaserc"); } - try { - await firebaseTools.list(); - } catch (e) { - context.logger.warn( - "🚨 You're not logged into Firebase. Logging you in..." - ); - await firebaseTools.login(); - } + await firebaseTools.login(); + if (!context.target) { throw new Error("Cannot execute the build target"); } diff --git a/src/schematics/interfaces.ts b/src/schematics/interfaces.ts index a5d98e038..9ab6f7dba 100644 --- a/src/schematics/interfaces.ts +++ b/src/schematics/interfaces.ts @@ -1,7 +1,9 @@ export interface Project { + projectId: string; + projectNumber: string; + displayName: string; name: string; - id: string; - permission: "edit" | "view" | "own"; + resources: { [key:string]: string } } export interface FirebaseDeployConfig { @@ -12,7 +14,9 @@ export interface FirebaseDeployConfig { export interface FirebaseTools { login(): Promise; - list(): Promise; + projects: { + list(): Promise; + } deploy(config: FirebaseDeployConfig): Promise; diff --git a/src/schematics/utils.ts b/src/schematics/utils.ts index 840dd0d1d..6522e728d 100644 --- a/src/schematics/utils.ts +++ b/src/schematics/utils.ts @@ -2,12 +2,10 @@ import { readFileSync } from "fs"; import { FirebaseRc, Project } from "./interfaces"; import { join } from "path"; -export function listProjects() { +export async function listProjects() { const firebase = require('firebase-tools'); - return firebase.list().catch( - /* If list failed, then login and try again. */ - () => firebase.login().then(() => firebase.list()) - ); + await firebase.login(); + return firebase.projects.list(); } // `fuzzy` passes either the original list of projects or an internal object @@ -22,7 +20,7 @@ const searchProjects = (projects: Project[]) => { require('fuzzy') .filter(input, projects, { extract(el: Project) { - return `${el.id} ${el.name} ${el.permission}`; + return `${el.projectId} ${el.displayName}`; } }) .map((result: Project | { original: Project }) => { @@ -33,9 +31,9 @@ const searchProjects = (projects: Project[]) => { original = result.original; } return { - name: `${original.id} (${original.name})`, - title: original.name, - value: original.id + name: `${original.displayName} (${original.projectId})`, + title: original.displayName, + value: original.projectId }; }) );