From cce902d27cf3c4a23730550b72d10dc76425c974 Mon Sep 17 00:00:00 2001 From: Denis DelGrosso <85250797+ddelgrosso1@users.noreply.github.com> Date: Mon, 6 Feb 2023 09:12:01 -0500 Subject: [PATCH] fix: correctly handle if a user has no permissions when calling iam.testPermissions (#2140) --- src/iam.ts | 4 +++- test/iam.ts | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/iam.ts b/src/iam.ts index acc2b4726..1f27622d7 100644 --- a/src/iam.ts +++ b/src/iam.ts @@ -470,7 +470,9 @@ class Iam { return; } - const availablePermissions = resp.permissions; + const availablePermissions = Array.isArray(resp.permissions) + ? resp.permissions + : []; const permissionsHash = permissionsArray.reduce( (acc: {[index: string]: boolean}, permission) => { diff --git a/test/iam.ts b/test/iam.ts index 9e03ff508..5dd0fc51f 100644 --- a/test/iam.ts +++ b/test/iam.ts @@ -240,6 +240,28 @@ describe('storage/iam', () => { ); }); + it('should return false for supplied permissions if user has no permissions', done => { + const permissions = ['storage.bucket.list', 'storage.bucket.consume']; + const apiResponse = {permissions: undefined}; + + iam.request_ = (reqOpts: DecorateRequestOptions, callback: Function) => { + callback(null, apiResponse); + }; + iam.testPermissions( + permissions, + (err: Error, permissions: Array<{}>, apiResp: {}) => { + assert.ifError(err); + assert.deepStrictEqual(permissions, { + 'storage.bucket.list': false, + 'storage.bucket.consume': false, + }); + assert.strictEqual(apiResp, apiResponse); + + done(); + } + ); + }); + it('should accept an options object', done => { const permissions = ['storage.bucket.list']; const options = {