diff --git a/src/m365/spo/commands/roledefinition/roledefinition-add.spec.ts b/src/m365/spo/commands/roledefinition/roledefinition-add.spec.ts index ccd168c886c..ffc8ff92c7a 100644 --- a/src/m365/spo/commands/roledefinition/roledefinition-add.spec.ts +++ b/src/m365/spo/commands/roledefinition/roledefinition-add.spec.ts @@ -19,10 +19,10 @@ describe(commands.ROLEDEFINITION_ADD, () => { let commandInfo: CommandInfo; before(() => { - sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); - sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); - sinon.stub(pid, 'getProcessName').callsFake(() => ''); - sinon.stub(session, 'getId').callsFake(() => ''); + sinon.stub(auth, 'restoreAuth').resolves(); + sinon.stub(telemetry, 'trackEvent').returns(); + sinon.stub(pid, 'getProcessName').returns(''); + sinon.stub(session, 'getId').returns(''); auth.service.connected = true; commandInfo = Cli.getCommandInfo(command); }); @@ -54,7 +54,7 @@ describe(commands.ROLEDEFINITION_ADD, () => { }); it('has correct name', () => { - assert.strictEqual(command.name.startsWith(commands.ROLEDEFINITION_ADD), true); + assert.strictEqual(command.name, commands.ROLEDEFINITION_ADD); }); it('has a description', () => { @@ -93,11 +93,11 @@ describe(commands.ROLEDEFINITION_ADD, () => { }); it('adds role definition to web with name, description and right', async () => { - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if (opts.url === 'https://contoso.sharepoint.com/_api/web/roledefinitions') { - return Promise.resolve(); + return ''; } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { @@ -112,11 +112,11 @@ describe(commands.ROLEDEFINITION_ADD, () => { }); it('adds role definition to web with name', async () => { - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if (opts.url === 'https://contoso.sharepoint.com/_api/web/roledefinitions') { - return Promise.resolve(); + return ''; } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { @@ -130,12 +130,12 @@ describe(commands.ROLEDEFINITION_ADD, () => { it('handles reject request correctly', async () => { const err = 'request rejected'; - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_api/web/roledefinitions') > -1) { - return Promise.reject(err); + throw err; } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await assert.rejects(command.action(logger, { diff --git a/src/m365/spo/commands/roledefinition/roledefinition-get.spec.ts b/src/m365/spo/commands/roledefinition/roledefinition-get.spec.ts index f2dc29b19b6..cd57019187f 100644 --- a/src/m365/spo/commands/roledefinition/roledefinition-get.spec.ts +++ b/src/m365/spo/commands/roledefinition/roledefinition-get.spec.ts @@ -20,10 +20,10 @@ describe(commands.ROLEDEFINITION_GET, () => { let commandInfo: CommandInfo; before(() => { - sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); - sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); - sinon.stub(pid, 'getProcessName').callsFake(() => ''); - sinon.stub(session, 'getId').callsFake(() => ''); + sinon.stub(auth, 'restoreAuth').resolves(); + sinon.stub(telemetry, 'trackEvent').returns(); + sinon.stub(pid, 'getProcessName').returns(''); + sinon.stub(session, 'getId').returns(''); auth.service.connected = true; commandInfo = Cli.getCommandInfo(command); }); @@ -56,7 +56,7 @@ describe(commands.ROLEDEFINITION_GET, () => { }); it('has correct name', () => { - assert.strictEqual(command.name.startsWith(commands.ROLEDEFINITION_GET), true); + assert.strictEqual(command.name, commands.ROLEDEFINITION_GET); }); it('has a description', () => { @@ -87,10 +87,10 @@ describe(commands.ROLEDEFINITION_GET, () => { const err = 'request rejected'; sinon.stub(request, 'get').callsFake((opts) => { if ((opts.url as string).indexOf('/_api/web/roledefinitions(1)') > -1) { - return Promise.reject(err); + throw err; } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await assert.rejects(command.action(logger, { @@ -103,23 +103,23 @@ describe(commands.ROLEDEFINITION_GET, () => { }); it('gets role definition from web by id', async () => { - sinon.stub(request, 'get').callsFake((opts) => { + sinon.stub(request, 'get').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_api/web/roledefinitions(1)') > -1) { - return Promise.resolve( - { - "BasePermissions": { - "High": "432", - "Low": "1012866047" - }, - "Description": "Can view, add, update, delete, approve, and customize.", - "Hidden": false, - "Id": 1073741828, - "Name": "Design", - "Order": 32, - "RoleTypeKind": 4 - }); + return { + "BasePermissions": { + "High": "432", + "Low": "1012866047" + }, + "Description": "Can view, add, update, delete, approve, and customize.", + "Hidden": false, + "Id": 1073741828, + "Name": "Design", + "Order": 32, + "RoleTypeKind": 4 + }; } - return Promise.reject('Invalid request'); + + throw 'Invalid request'; }); await command.action(logger, { diff --git a/src/m365/spo/commands/roledefinition/roledefinition-list.spec.ts b/src/m365/spo/commands/roledefinition/roledefinition-list.spec.ts index 703150f90bf..0fc8b31fa37 100644 --- a/src/m365/spo/commands/roledefinition/roledefinition-list.spec.ts +++ b/src/m365/spo/commands/roledefinition/roledefinition-list.spec.ts @@ -20,10 +20,10 @@ describe(commands.ROLEDEFINITION_LIST, () => { let commandInfo: CommandInfo; before(() => { - sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); - sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); - sinon.stub(pid, 'getProcessName').callsFake(() => ''); - sinon.stub(session, 'getId').callsFake(() => ''); + sinon.stub(auth, 'restoreAuth').resolves(); + sinon.stub(telemetry, 'trackEvent').returns(); + sinon.stub(pid, 'getProcessName').returns(''); + sinon.stub(session, 'getId').returns(''); auth.service.connected = true; commandInfo = Cli.getCommandInfo(command); }); @@ -56,7 +56,7 @@ describe(commands.ROLEDEFINITION_LIST, () => { }); it('has correct name', () => { - assert.strictEqual(command.name.startsWith(commands.ROLEDEFINITION_LIST), true); + assert.strictEqual(command.name, commands.ROLEDEFINITION_LIST); }); it('has a description', () => { diff --git a/src/m365/spo/commands/roledefinition/roledefinition-remove.spec.ts b/src/m365/spo/commands/roledefinition/roledefinition-remove.spec.ts index 06d7a0660ca..38a44bbf31e 100644 --- a/src/m365/spo/commands/roledefinition/roledefinition-remove.spec.ts +++ b/src/m365/spo/commands/roledefinition/roledefinition-remove.spec.ts @@ -21,10 +21,10 @@ describe(commands.ROLEDEFINITION_REMOVE, () => { let promptOptions: any; before(() => { - sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); - sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); - sinon.stub(pid, 'getProcessName').callsFake(() => ''); - sinon.stub(session, 'getId').callsFake(() => ''); + sinon.stub(auth, 'restoreAuth').resolves(); + sinon.stub(telemetry, 'trackEvent').returns(); + sinon.stub(pid, 'getProcessName').returns(''); + sinon.stub(session, 'getId').returns(''); auth.service.connected = true; commandInfo = Cli.getCommandInfo(command); }); @@ -62,7 +62,7 @@ describe(commands.ROLEDEFINITION_REMOVE, () => { }); it('has correct name', () => { - assert.strictEqual(command.name.startsWith(commands.ROLEDEFINITION_REMOVE), true); + assert.strictEqual(command.name, commands.ROLEDEFINITION_REMOVE); }); it('has a description', () => { @@ -91,12 +91,12 @@ describe(commands.ROLEDEFINITION_REMOVE, () => { it('remove role definitions handles reject request correctly', async () => { const err = 'request rejected'; - sinon.stub(request, 'delete').callsFake((opts) => { + sinon.stub(request, 'delete').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_api/web/roledefinitions') > -1) { - return Promise.reject(err); + throw err; } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await assert.rejects(command.action(logger, { @@ -130,18 +130,18 @@ describe(commands.ROLEDEFINITION_REMOVE, () => { }); it('removes the role definition when prompt confirmed', async () => { - sinon.stub(request, 'delete').callsFake((opts) => { + sinon.stub(request, 'delete').callsFake(async (opts) => { requests.push(opts); if ((opts.url as string).indexOf(`/_api/web/roledefinitions(1)`) > -1) { if (opts.headers && opts.headers.accept && (opts.headers.accept as string).indexOf('application/json') === 0) { - return Promise.resolve(); + return ''; } } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); sinonUtil.restore(Cli.prompt); @@ -161,18 +161,18 @@ describe(commands.ROLEDEFINITION_REMOVE, () => { }); it('removes the role definition without confirm prompt', async () => { - sinon.stub(request, 'delete').callsFake((opts) => { + sinon.stub(request, 'delete').callsFake(async (opts) => { requests.push(opts); if ((opts.url as string).indexOf(`/_api/web/roledefinitions(1)`) > -1) { if (opts.headers && opts.headers.accept && (opts.headers.accept as string).indexOf('application/json') === 0) { - return Promise.resolve(); + return ''; } } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: { debug: true, webUrl: 'https://contoso.sharepoint.com', id: 1, confirm: true } }); diff --git a/src/m365/spo/commands/roledefinition/roledefinition-remove.ts b/src/m365/spo/commands/roledefinition/roledefinition-remove.ts index 36f5207590b..f581b00a66e 100644 --- a/src/m365/spo/commands/roledefinition/roledefinition-remove.ts +++ b/src/m365/spo/commands/roledefinition/roledefinition-remove.ts @@ -1,7 +1,7 @@ import { Cli } from '../../../../cli/Cli'; import { Logger } from '../../../../cli/Logger'; import GlobalOptions from '../../../../GlobalOptions'; -import request from '../../../../request'; +import request, { CliRequestOptions } from '../../../../request'; import { validation } from '../../../../utils/validation'; import SpoCommand from '../../../base/SpoCommand'; import commands from '../../commands'; @@ -69,32 +69,8 @@ class SpoRoleDefinitionRemoveCommand extends SpoCommand { } public async commandAction(logger: Logger, args: CommandArgs): Promise { - const removeRoleDefinition: () => Promise = async (): Promise => { - if (this.verbose) { - logger.logToStderr(`Removing role definition from site ${args.options.webUrl}...`); - } - - const requestOptions: any = { - url: `${args.options.webUrl}/_api/web/roledefinitions(${args.options.id})`, - method: 'delete', - headers: { - 'X-HTTP-Method': 'DELETE', - 'If-Match': '*', - 'accept': 'application/json;odata=nometadata' - }, - responseType: 'json' - }; - - try { - await request.delete(requestOptions); - } - catch (err: any) { - this.handleRejectedODataJsonPromise(err); - } - }; - if (args.options.confirm) { - await removeRoleDefinition(); + await this.removeRoleDefinition(logger, args); } else { const result = await Cli.prompt<{ continue: boolean }>({ @@ -105,10 +81,34 @@ class SpoRoleDefinitionRemoveCommand extends SpoCommand { }); if (result.continue) { - await removeRoleDefinition(); + await this.removeRoleDefinition(logger, args); } } } + + private async removeRoleDefinition(logger: Logger, args: CommandArgs): Promise { + if (this.verbose) { + logger.logToStderr(`Removing role definition from site ${args.options.webUrl}...`); + } + + const requestOptions: CliRequestOptions = { + url: `${args.options.webUrl}/_api/web/roledefinitions(${args.options.id})`, + method: 'delete', + headers: { + 'X-HTTP-Method': 'DELETE', + 'If-Match': '*', + 'accept': 'application/json;odata=nometadata' + }, + responseType: 'json' + }; + + try { + await request.delete(requestOptions); + } + catch (err: any) { + this.handleRejectedODataJsonPromise(err); + } + } } module.exports = new SpoRoleDefinitionRemoveCommand(); \ No newline at end of file diff --git a/src/m365/spo/commands/serviceprincipal/serviceprincipal-grant-add.spec.ts b/src/m365/spo/commands/serviceprincipal/serviceprincipal-grant-add.spec.ts index 55c291f8d69..c8426bac792 100644 --- a/src/m365/spo/commands/serviceprincipal/serviceprincipal-grant-add.spec.ts +++ b/src/m365/spo/commands/serviceprincipal/serviceprincipal-grant-add.spec.ts @@ -19,16 +19,16 @@ describe(commands.SERVICEPRINCIPAL_GRANT_ADD, () => { let loggerLogSpy: sinon.SinonSpy; before(() => { - sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); - sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); - sinon.stub(pid, 'getProcessName').callsFake(() => ''); - sinon.stub(session, 'getId').callsFake(() => ''); - sinon.stub(spo, 'getRequestDigest').callsFake(() => Promise.resolve({ + sinon.stub(auth, 'restoreAuth').resolves(); + sinon.stub(telemetry, 'trackEvent').returns(); + sinon.stub(pid, 'getProcessName').returns(''); + sinon.stub(session, 'getId').returns(''); + sinon.stub(spo, 'getRequestDigest').resolves({ FormDigestValue: 'ABC', FormDigestTimeoutSeconds: 1800, FormDigestExpiresAt: new Date(), WebFullUrl: 'https://contoso.sharepoint.com' - })); + }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; }); @@ -62,7 +62,7 @@ describe(commands.SERVICEPRINCIPAL_GRANT_ADD, () => { }); it('has correct name', () => { - assert.strictEqual(command.name.startsWith(commands.SERVICEPRINCIPAL_GRANT_ADD), true); + assert.strictEqual(command.name, commands.SERVICEPRINCIPAL_GRANT_ADD); }); it('has a description', () => { @@ -70,12 +70,12 @@ describe(commands.SERVICEPRINCIPAL_GRANT_ADD, () => { }); it('grants the specified API permission (debug)', async () => { - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === `Microsoft GraphMail.Read`) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.8224.1210", "ErrorInfo": null, "TraceCorrelationId": "53df9d9e-50fd-0000-37ae-14a315385835" }, 18, { @@ -87,10 +87,10 @@ describe(commands.SERVICEPRINCIPAL_GRANT_ADD, () => { }, 23, { "_ObjectType_": "Microsoft.Online.SharePoint.TenantAdministration.Internal.SPOWebAppServicePrincipalPermissionGrant", "ClientId": "868668f8-583a-4c66-b3ce-d4e14bc9ceb3", "ConsentType": "AllPrincipals", "IsDomainIsolated": false, "ObjectId": "-GiGhjpYZkyzztThS8nOs8VG6EHn4S1OjgiedYOfUrQ", "PackageName": null, "Resource": "Microsoft Graph", "ResourceId": "41e846c5-e1e7-4e2d-8e08-9e75839f52b4", "Scope": "Mail.Read" } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: { debug: true, resource: 'Microsoft Graph', scope: 'Mail.Read' } }); assert(loggerLogSpy.calledWith({ @@ -99,12 +99,12 @@ describe(commands.SERVICEPRINCIPAL_GRANT_ADD, () => { }); it('grants the specified API permission', async () => { - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === `Microsoft GraphMail.Read`) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.8224.1210", "ErrorInfo": null, "TraceCorrelationId": "53df9d9e-50fd-0000-37ae-14a315385835" }, 18, { @@ -116,10 +116,10 @@ describe(commands.SERVICEPRINCIPAL_GRANT_ADD, () => { }, 23, { "_ObjectType_": "Microsoft.Online.SharePoint.TenantAdministration.Internal.SPOWebAppServicePrincipalPermissionGrant", "ClientId": "868668f8-583a-4c66-b3ce-d4e14bc9ceb3", "ConsentType": "AllPrincipals", "IsDomainIsolated": false, "ObjectId": "-GiGhjpYZkyzztThS8nOs8VG6EHn4S1OjgiedYOfUrQ", "PackageName": null, "Resource": "Microsoft Graph", "ResourceId": "41e846c5-e1e7-4e2d-8e08-9e75839f52b4", "Scope": "Mail.Read" } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: { resource: 'Microsoft Graph', scope: 'Mail.Read' } }); assert(loggerLogSpy.calledWith({ @@ -128,49 +128,49 @@ describe(commands.SERVICEPRINCIPAL_GRANT_ADD, () => { }); it('correctly handles error when the specified resource doesn\'t exist', async () => { - sinon.stub(request, 'post').callsFake(() => { - return Promise.resolve(JSON.stringify([ + sinon.stub(request, 'post').callsFake(async () => { + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.8224.1210", "ErrorInfo": { "ErrorMessage": "A service principal with the name Microsoft Graph1 could not be found.\r\nParameter name: resourceName", "ErrorValue": null, "TraceCorrelationId": "5fdf9d9e-00e9-0000-37ae-14e6d75290f3", "ErrorCode": -2147024809, "ErrorTypeName": "System.ArgumentException" }, "TraceCorrelationId": "5fdf9d9e-00e9-0000-37ae-14e6d75290f3" } - ])); + ]); }); await assert.rejects(command.action(logger, { options: { resource: 'Microsoft Graph1', scope: 'Mail.Read' } } as any), new CommandError('A service principal with the name Microsoft Graph1 could not be found.\r\nParameter name: resourceName')); }); it('correctly handles error when the specified scope doesn\'t exist', async () => { - sinon.stub(request, 'post').callsFake(() => { - return Promise.resolve(JSON.stringify([ + sinon.stub(request, 'post').callsFake(async () => { + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.8224.1210", "ErrorInfo": { "ErrorMessage": "An OAuth permission with the scope Calendar.Read could not be found.\r\nParameter name: permissionRequest", "ErrorValue": null, "TraceCorrelationId": "51df9d9e-d075-0000-37ae-1d4e6902cc2e", "ErrorCode": -2147024809, "ErrorTypeName": "System.ArgumentException" }, "TraceCorrelationId": "51df9d9e-d075-0000-37ae-1d4e6902cc2e" } - ])); + ]); }); await assert.rejects(command.action(logger, { options: { resource: 'Microsoft Graph', scope: 'Calendar.Read' } } as any), new CommandError('An OAuth permission with the scope Calendar.Read could not be found.\r\nParameter name: permissionRequest')); }); it('correctly handles error when the specified permission has already been granted', async () => { - sinon.stub(request, 'post').callsFake(() => { - return Promise.resolve(JSON.stringify([ + sinon.stub(request, 'post').callsFake(async () => { + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.8224.1210", "ErrorInfo": { "ErrorMessage": "An OAuth permission with the resource Microsoft Graph and scope Mail.Read already exists.\r\nParameter name: permissionRequest", "ErrorValue": null, "TraceCorrelationId": "1bdf9d9e-1088-0000-38d6-3b6395428c90", "ErrorCode": -2147024809, "ErrorTypeName": "System.ArgumentException" }, "TraceCorrelationId": "1bdf9d9e-1088-0000-38d6-3b6395428c90" } - ])); + ]); }); await assert.rejects(command.action(logger, { options: { resource: 'Microsoft Graph', scope: 'Mail.Read' } } as any), new CommandError('An OAuth permission with the resource Microsoft Graph and scope Mail.Read already exists.\r\nParameter name: permissionRequest')); }); it('correctly handles random API error', async () => { - sinon.stub(request, 'post').callsFake(() => Promise.reject('An error has occurred')); + sinon.stub(request, 'post').callsFake(() => { throw 'An error has occurred'; }); await assert.rejects(command.action(logger, { options: { resource: 'Microsoft Graph', scope: 'Mail.Read' } } as any), new CommandError('An error has occurred')); }); diff --git a/src/m365/spo/commands/serviceprincipal/serviceprincipal-grant-list.spec.ts b/src/m365/spo/commands/serviceprincipal/serviceprincipal-grant-list.spec.ts index 370f0929fd1..fba8d0cae80 100644 --- a/src/m365/spo/commands/serviceprincipal/serviceprincipal-grant-list.spec.ts +++ b/src/m365/spo/commands/serviceprincipal/serviceprincipal-grant-list.spec.ts @@ -19,16 +19,16 @@ describe(commands.SERVICEPRINCIPAL_GRANT_LIST, () => { let loggerLogSpy: sinon.SinonSpy; before(() => { - sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); - sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); - sinon.stub(pid, 'getProcessName').callsFake(() => ''); - sinon.stub(session, 'getId').callsFake(() => ''); - sinon.stub(spo, 'getRequestDigest').callsFake(() => Promise.resolve({ + sinon.stub(auth, 'restoreAuth').resolves(); + sinon.stub(telemetry, 'trackEvent').returns(); + sinon.stub(pid, 'getProcessName').returns(''); + sinon.stub(session, 'getId').returns(''); + sinon.stub(spo, 'getRequestDigest').resolves({ FormDigestValue: 'ABC', FormDigestTimeoutSeconds: 1800, FormDigestExpiresAt: new Date(), WebFullUrl: 'https://contoso.sharepoint.com' - })); + }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; }); @@ -62,7 +62,7 @@ describe(commands.SERVICEPRINCIPAL_GRANT_LIST, () => { }); it('has correct name', () => { - assert.strictEqual(command.name.startsWith(commands.SERVICEPRINCIPAL_GRANT_LIST), true); + assert.strictEqual(command.name, commands.SERVICEPRINCIPAL_GRANT_LIST); }); it('has a description', () => { @@ -70,12 +70,12 @@ describe(commands.SERVICEPRINCIPAL_GRANT_LIST, () => { }); it('lists permissions granted to the service principal (debug)', async () => { - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === ``) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "a2a03a9e-602c-4000-879b-1783ec06ba67" }, 4, { @@ -91,10 +91,10 @@ describe(commands.SERVICEPRINCIPAL_GRANT_LIST, () => { } ] } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: { debug: true } }); assert(loggerLogSpy.calledWith([ @@ -113,12 +113,12 @@ describe(commands.SERVICEPRINCIPAL_GRANT_LIST, () => { }); it('lists permissions granted to the service principal', async () => { - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === ``) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "a2a03a9e-602c-4000-879b-1783ec06ba67" }, 4, { @@ -134,10 +134,10 @@ describe(commands.SERVICEPRINCIPAL_GRANT_LIST, () => { } ] } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: {} }); assert(loggerLogSpy.calledWith([ @@ -156,21 +156,21 @@ describe(commands.SERVICEPRINCIPAL_GRANT_LIST, () => { }); it('correctly handles error when retrieving permissions granted to the service principal', async () => { - sinon.stub(request, 'post').callsFake(() => { - return Promise.resolve(JSON.stringify([ + sinon.stub(request, 'post').callsFake(async () => { + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7018.1204", "ErrorInfo": { "ErrorMessage": "File Not Found.", "ErrorValue": null, "TraceCorrelationId": "9e54299e-208a-4000-8546-cc4139091b26", "ErrorCode": -2147024894, "ErrorTypeName": "System.IO.FileNotFoundException" }, "TraceCorrelationId": "9e54299e-208a-4000-8546-cc4139091b26" } - ])); + ]); }); await assert.rejects(command.action(logger, { options: {} } as any), new CommandError('File Not Found.')); }); it('correctly handles random API error', async () => { - sinon.stub(request, 'post').callsFake(() => Promise.reject('An error has occurred')); + sinon.stub(request, 'post').callsFake(() => { throw 'An error has occurred'; }); await assert.rejects(command.action(logger, { options: {} } as any), new CommandError('An error has occurred')); }); diff --git a/src/m365/spo/commands/serviceprincipal/serviceprincipal-grant-revoke.spec.ts b/src/m365/spo/commands/serviceprincipal/serviceprincipal-grant-revoke.spec.ts index 1dc0d744dc1..e11bb50a375 100644 --- a/src/m365/spo/commands/serviceprincipal/serviceprincipal-grant-revoke.spec.ts +++ b/src/m365/spo/commands/serviceprincipal/serviceprincipal-grant-revoke.spec.ts @@ -20,16 +20,16 @@ describe(commands.SERVICEPRINCIPAL_GRANT_REVOKE, () => { let loggerLogToStderrSpy: sinon.SinonSpy; before(() => { - sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); - sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); - sinon.stub(pid, 'getProcessName').callsFake(() => ''); - sinon.stub(session, 'getId').callsFake(() => ''); - sinon.stub(spo, 'getRequestDigest').callsFake(() => Promise.resolve({ + sinon.stub(auth, 'restoreAuth').resolves(); + sinon.stub(telemetry, 'trackEvent').returns(); + sinon.stub(pid, 'getProcessName').returns(''); + sinon.stub(session, 'getId').returns(''); + sinon.stub(spo, 'getRequestDigest').resolves({ FormDigestValue: 'ABC', FormDigestTimeoutSeconds: 1800, FormDigestExpiresAt: new Date(), WebFullUrl: 'https://contoso.sharepoint.com' - })); + }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; }); @@ -64,7 +64,7 @@ describe(commands.SERVICEPRINCIPAL_GRANT_REVOKE, () => { }); it('has correct name', () => { - assert.strictEqual(command.name.startsWith(commands.SERVICEPRINCIPAL_GRANT_REVOKE), true); + assert.strictEqual(command.name, commands.SERVICEPRINCIPAL_GRANT_REVOKE); }); it('has a description', () => { @@ -72,12 +72,12 @@ describe(commands.SERVICEPRINCIPAL_GRANT_REVOKE, () => { }); it('revokes the specified permission grant (debug)', async () => { - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === `50NAzUm3C0K9B6p8ORLtIvNe8tzf4ndKg51reFehHHg`) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "63553a9e-101c-4000-d6f5-91ba841ffc9d" }, 66, { @@ -91,22 +91,22 @@ describe(commands.SERVICEPRINCIPAL_GRANT_REVOKE, () => { }, 73, { "IsNull": false } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: { debug: true, id: '50NAzUm3C0K9B6p8ORLtIvNe8tzf4ndKg51reFehHHg' } }); assert(loggerLogToStderrSpy.called); }); it('revokes the specified permission grant', async () => { - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === `50NAzUm3C0K9B6p8ORLtIvNe8tzf4ndKg51reFehHHg`) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "63553a9e-101c-4000-d6f5-91ba841ffc9d" }, 66, { @@ -120,31 +120,31 @@ describe(commands.SERVICEPRINCIPAL_GRANT_REVOKE, () => { }, 73, { "IsNull": false } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: { id: '50NAzUm3C0K9B6p8ORLtIvNe8tzf4ndKg51reFehHHg' } }); assert(loggerLogSpy.notCalled); }); it('correctly handles error when revoking permission request', async () => { - sinon.stub(request, 'post').callsFake(() => { - return Promise.resolve(JSON.stringify([ + sinon.stub(request, 'post').callsFake(async () => { + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": { "ErrorMessage": "The given key was not present in the dictionary.", "ErrorValue": null, "TraceCorrelationId": "8da23a9e-00d0-4000-c621-0ffad6315d99", "ErrorCode": -1, "ErrorTypeName": "System.Collections.Generic.KeyNotFoundException" }, "TraceCorrelationId": "8da23a9e-00d0-4000-c621-0ffad6315d99" } - ])); + ]); }); await assert.rejects(command.action(logger, { options: {} } as any), new CommandError('The given key was not present in the dictionary.')); }); it('correctly handles random API error', async () => { - sinon.stub(request, 'post').callsFake(() => Promise.reject('An error has occurred')); + sinon.stub(request, 'post').callsFake(() => { throw 'An error has occurred'; }); await assert.rejects(command.action(logger, { options: {} } as any), new CommandError('An error has occurred')); }); diff --git a/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.spec.ts b/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.spec.ts index 7eca1ec1b1c..a737c09a42f 100644 --- a/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.spec.ts +++ b/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-approve.spec.ts @@ -24,16 +24,16 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { const validId = "4dc4c043-25ee-40f2-81d3-b3bf63da7538"; before(() => { - sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); - sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); - sinon.stub(pid, 'getProcessName').callsFake(() => ''); - sinon.stub(session, 'getId').callsFake(() => ''); - sinon.stub(spo, 'getRequestDigest').callsFake(() => Promise.resolve({ + sinon.stub(auth, 'restoreAuth').resolves(); + sinon.stub(telemetry, 'trackEvent').returns(); + sinon.stub(pid, 'getProcessName').returns(''); + sinon.stub(session, 'getId').returns(''); + sinon.stub(spo, 'getRequestDigest').resolves({ FormDigestValue: 'ABC', FormDigestTimeoutSeconds: 1800, FormDigestExpiresAt: new Date(), WebFullUrl: 'https://contoso.sharepoint.com' - })); + }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; commandInfo = Cli.getCommandInfo(command); @@ -69,7 +69,7 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { }); it('has correct name', () => { - assert.strictEqual(command.name.startsWith(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE), true); + assert.strictEqual(command.name, commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE); }); it('has a description', () => { @@ -77,12 +77,12 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { }); it('approves the specified permission request (debug)', async () => { - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === `{${validId}}`) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "63553a9e-101c-4000-d6f5-91ba841ffc9d" }, 66, { @@ -96,10 +96,10 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { }, 73, { "_ObjectType_": "Microsoft.Online.SharePoint.TenantAdministration.Internal.SPOWebAppServicePrincipalPermissionGrant", "ClientId": "cd4043e7-b749-420b-bd07-aa7c3912ed22", "ConsentType": "AllPrincipals", "ObjectId": "50NAzUm3C0K9B6p8ORLtIsQccg4rMERGvFGRtBsk2fA", "Resource": "Microsoft Graph", "ResourceId": "0e721cc4-302b-4644-bc51-91b41b24d9f0", "Scope": "Calendars.ReadWrite" } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: { debug: true, id: validId } }); assert(loggerLogSpy.calledWith({ @@ -113,12 +113,12 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { }); it('approves the specified permission request', async () => { - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === `{${validId}}`) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "63553a9e-101c-4000-d6f5-91ba841ffc9d" }, 66, { @@ -132,10 +132,10 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { }, 73, { "_ObjectType_": "Microsoft.Online.SharePoint.TenantAdministration.Internal.SPOWebAppServicePrincipalPermissionGrant", "ClientId": "cd4043e7-b749-420b-bd07-aa7c3912ed22", "ConsentType": "AllPrincipals", "ObjectId": "50NAzUm3C0K9B6p8ORLtIsQccg4rMERGvFGRtBsk2fA", "Resource": "Microsoft Graph", "ResourceId": "0e721cc4-302b-4644-bc51-91b41b24d9f0", "Scope": "Calendars.ReadWrite" } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: { id: validId } }); assert(loggerLogSpy.calledWith({ @@ -171,12 +171,12 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { throw new CommandError('Unknown case'); }); - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === `{${validId}}`) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "63553a9e-101c-4000-d6f5-91ba841ffc9d" }, 66, { @@ -190,13 +190,13 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { }, 73, { "_ObjectType_": "Microsoft.Online.SharePoint.TenantAdministration.Internal.SPOWebAppServicePrincipalPermissionGrant", "ClientId": "cd4043e7-b749-420b-bd07-aa7c3912ed22", "ConsentType": "AllPrincipals", "ObjectId": "50NAzUm3C0K9B6p8ORLtIsQccg4rMERGvFGRtBsk2fA", "Resource": "Microsoft Graph", "ResourceId": "0e721cc4-302b-4644-bc51-91b41b24d9f0", "Scope": "Calendars.ReadWrite" } - ])); + ]); } else if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === `{326b80a4-a6e7-43e0-9bb5-893da05e3b72}`) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "63553a9e-101c-4000-d6f5-91ba841ffc9d" }, 66, { @@ -210,10 +210,10 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { }, 73, { "_ObjectType_": "Microsoft.Online.SharePoint.TenantAdministration.Internal.SPOWebAppServicePrincipalPermissionGrant", "ClientId": "cd4043e7-b749-420b-bd07-aa7c3912ed22", "ConsentType": "AllPrincipals", "ObjectId": "50NAzUm3C0K9B6p8ORLtIsQccg4rMERGvFGRtBsk2fA", "Resource": "Microsoft Graph", "ResourceId": "0e721cc4-302b-4644-bc51-91b41b24d9f0", "Scope": "User.Read" } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: { all: true } }); assert(loggerLogSpy.calledWith([{ @@ -262,12 +262,12 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { throw new CommandError('Unknown case'); }); - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === `{${validId}}`) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "63553a9e-101c-4000-d6f5-91ba841ffc9d" }, 66, { @@ -281,13 +281,13 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { }, 73, { "_ObjectType_": "Microsoft.Online.SharePoint.TenantAdministration.Internal.SPOWebAppServicePrincipalPermissionGrant", "ClientId": "cd4043e7-b749-420b-bd07-aa7c3912ed22", "ConsentType": "AllPrincipals", "ObjectId": "50NAzUm3C0K9B6p8ORLtIsQccg4rMERGvFGRtBsk2fA", "Resource": "Microsoft Graph", "ResourceId": "0e721cc4-302b-4644-bc51-91b41b24d9f0", "Scope": "Calendars.ReadWrite" } - ])); + ]); } else if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === `{326b80a4-a6e7-43e0-9bb5-893da05e3b72}`) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "63553a9e-101c-4000-d6f5-91ba841ffc9d" }, 66, { @@ -301,10 +301,10 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { }, 73, { "_ObjectType_": "Microsoft.Online.SharePoint.TenantAdministration.Internal.SPOWebAppServicePrincipalPermissionGrant", "ClientId": "cd4043e7-b749-420b-bd07-aa7c3912ed22", "ConsentType": "AllPrincipals", "ObjectId": "50NAzUm3C0K9B6p8ORLtIsQccg4rMERGvFGRtBsk2fA", "Resource": "Microsoft Graph", "ResourceId": "0e721cc4-302b-4644-bc51-91b41b24d9f0", "Scope": "User.Read" } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: { resource: "Microsoft Graph" } }); assert(loggerLogSpy.calledWith([{ @@ -325,21 +325,21 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_APPROVE, () => { }); it('correctly handles error when approving permission request', async () => { - sinon.stub(request, 'post').callsFake(() => { - return Promise.resolve(JSON.stringify([ + sinon.stub(request, 'post').callsFake(async () => { + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7018.1204", "ErrorInfo": { "ErrorMessage": "Permission entry already exists.", "ErrorValue": null, "TraceCorrelationId": "9e54299e-208a-4000-8546-cc4139091b26", "ErrorCode": -2147024894, "ErrorTypeName": "InvalidOperationException" }, "TraceCorrelationId": "9e54299e-208a-4000-8546-cc4139091b26" } - ])); + ]); }); await assert.rejects(command.action(logger, { options: { id: validId } } as any), new CommandError('Permission entry already exists.')); }); it('correctly handles random API error', async () => { - sinon.stub(request, 'post').callsFake(() => Promise.reject('An error has occurred')); + sinon.stub(request, 'post').callsFake(() => { throw 'An error has occurred'; }); await assert.rejects(command.action(logger, { options: { id: validId } } as any), new CommandError('An error has occurred')); }); diff --git a/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-deny.spec.ts b/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-deny.spec.ts index e4013debd6d..258a4066793 100644 --- a/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-deny.spec.ts +++ b/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-deny.spec.ts @@ -23,16 +23,16 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_DENY, () => { let loggerLogToStderrSpy: sinon.SinonSpy; before(() => { - sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); - sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); - sinon.stub(pid, 'getProcessName').callsFake(() => ''); - sinon.stub(session, 'getId').callsFake(() => ''); - sinon.stub(spo, 'getRequestDigest').callsFake(() => Promise.resolve({ + sinon.stub(auth, 'restoreAuth').resolves(); + sinon.stub(telemetry, 'trackEvent').returns(); + sinon.stub(pid, 'getProcessName').returns(''); + sinon.stub(session, 'getId').returns(''); + sinon.stub(spo, 'getRequestDigest').resolves({ FormDigestValue: 'ABC', FormDigestTimeoutSeconds: 1800, FormDigestExpiresAt: new Date(), WebFullUrl: 'https://contoso.sharepoint.com' - })); + }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; commandInfo = Cli.getCommandInfo(command); @@ -76,12 +76,12 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_DENY, () => { }); it('denies the specified permission request (debug)', async () => { - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === `{4dc4c043-25ee-40f2-81d3-b3bf63da7538}`) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "1c643a9e-40b1-4000-c0ac-2fae75aa36ca" }, 211, { @@ -91,22 +91,22 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_DENY, () => { }, 215, { "IsNull": false } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: { debug: true, id: '4dc4c043-25ee-40f2-81d3-b3bf63da7538' } }); assert(loggerLogToStderrSpy.called); }); it('denies the specified permission request', async () => { - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === `{4dc4c043-25ee-40f2-81d3-b3bf63da7538}`) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "1c643a9e-40b1-4000-c0ac-2fae75aa36ca" }, 211, { @@ -116,31 +116,31 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_DENY, () => { }, 215, { "IsNull": false } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: { id: '4dc4c043-25ee-40f2-81d3-b3bf63da7538' } }); assert(loggerLogSpy.notCalled); }); it('correctly handles error when denying permission request', async () => { - sinon.stub(request, 'post').callsFake(() => { - return Promise.resolve(JSON.stringify([ + sinon.stub(request, 'post').callsFake(async () => { + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7018.1204", "ErrorInfo": { "ErrorMessage": "A permission request with the ID f0feaecf-24be-402b-a080-3a55738ec56a could not be found.", "ErrorValue": null, "TraceCorrelationId": "9e54299e-208a-4000-8546-cc4139091b26", "ErrorCode": -2147024894, "ErrorTypeName": "Microsoft.SharePoint.Client.ResourceNotFoundException" }, "TraceCorrelationId": "9e54299e-208a-4000-8546-cc4139091b26" } - ])); + ]); }); await assert.rejects(command.action(logger, { options: { id: 'f0feaecf-24be-402b-a080-3a55738ec56a' } } as any), new CommandError('A permission request with the ID f0feaecf-24be-402b-a080-3a55738ec56a could not be found.')); }); it('correctly handles random API error', async () => { - sinon.stub(request, 'post').callsFake(() => Promise.reject('An error has occurred')); + sinon.stub(request, 'post').callsFake(() => { throw 'An error has occurred'; }); await assert.rejects(command.action(logger, { options: { id: 'f0feaecf-24be-402b-a080-3a55738ec56a' } } as any), new CommandError('An error has occurred')); }); diff --git a/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-list.spec.ts b/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-list.spec.ts index 9dda587e07b..320997e8339 100644 --- a/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-list.spec.ts +++ b/src/m365/spo/commands/serviceprincipal/serviceprincipal-permissionrequest-list.spec.ts @@ -108,16 +108,16 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_LIST, () => { }; before(() => { - sinon.stub(auth, 'restoreAuth').callsFake(() => Promise.resolve()); - sinon.stub(telemetry, 'trackEvent').callsFake(() => { }); - sinon.stub(pid, 'getProcessName').callsFake(() => ''); - sinon.stub(session, 'getId').callsFake(() => ''); - sinon.stub(spo, 'getRequestDigest').callsFake(() => Promise.resolve({ + sinon.stub(auth, 'restoreAuth').resolves(); + sinon.stub(telemetry, 'trackEvent').returns(); + sinon.stub(pid, 'getProcessName').returns(''); + sinon.stub(session, 'getId').returns(''); + sinon.stub(spo, 'getRequestDigest').resolves({ FormDigestValue: 'ABC', FormDigestTimeoutSeconds: 1800, FormDigestExpiresAt: new Date(), WebFullUrl: 'https://contoso.sharepoint.com' - })); + }); auth.service.connected = true; auth.service.spoUrl = 'https://contoso.sharepoint.com'; }); @@ -172,12 +172,12 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_LIST, () => { throw 'invalid request'; }); - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === ``) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "ed4e3a9e-5007-4000-d6f5-927416c34546" }, 10, { @@ -191,10 +191,10 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_LIST, () => { } ] } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: { debug: true } }); assert(loggerLogSpy.calledWith([{ @@ -218,12 +218,12 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_LIST, () => { throw 'invalid request'; }); - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === ``) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "ed4e3a9e-5007-4000-d6f5-927416c34546" }, 10, { @@ -237,10 +237,10 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_LIST, () => { } ] } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: {} }); assert(loggerLogSpy.calledWith([{ @@ -260,12 +260,12 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_LIST, () => { throw 'invalid request'; }); - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === ``) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "ed4e3a9e-5007-4000-d6f5-927416c34546" }, 10, { @@ -279,10 +279,10 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_LIST, () => { } ] } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: {} }); assert(loggerLogSpy.calledWith([{ @@ -306,12 +306,12 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_LIST, () => { throw 'invalid request'; }); - sinon.stub(request, 'post').callsFake((opts) => { + sinon.stub(request, 'post').callsFake(async (opts) => { if ((opts.url as string).indexOf('/_vti_bin/client.svc/ProcessQuery') > -1 && opts.headers && opts.headers['X-RequestDigest'] && opts.data === ``) { - return Promise.resolve(JSON.stringify([ + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7213.1200", "ErrorInfo": null, "TraceCorrelationId": "ed4e3a9e-5007-4000-d6f5-927416c34546" }, 10, { @@ -325,10 +325,10 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_LIST, () => { } ] } - ])); + ]); } - return Promise.reject('Invalid request'); + throw 'Invalid request'; }); await command.action(logger, { options: {} }); assert(loggerLogSpy.calledWith([{ @@ -352,14 +352,14 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_LIST, () => { throw 'invalid request'; }); - sinon.stub(request, 'post').callsFake(() => { - return Promise.resolve(JSON.stringify([ + sinon.stub(request, 'post').callsFake(async () => { + return JSON.stringify([ { "SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.7018.1204", "ErrorInfo": { "ErrorMessage": "File Not Found.", "ErrorValue": null, "TraceCorrelationId": "9e54299e-208a-4000-8546-cc4139091b26", "ErrorCode": -2147024894, "ErrorTypeName": "System.IO.FileNotFoundException" }, "TraceCorrelationId": "9e54299e-208a-4000-8546-cc4139091b26" } - ])); + ]); }); await assert.rejects(command.action(logger, { options: {} } as any), new CommandError('File Not Found.')); @@ -378,7 +378,7 @@ describe(commands.SERVICEPRINCIPAL_PERMISSIONREQUEST_LIST, () => { throw 'invalid request'; }); - sinon.stub(request, 'post').callsFake(() => Promise.reject('An error has occurred')); + sinon.stub(request, 'post').callsFake(() => { throw 'An error has occurred'; }); await assert.rejects(command.action(logger, { options: {} } as any), new CommandError('An error has occurred')); });