Skip to content

Commit

Permalink
Refactors to async/await 'spo roledefintion add' until 'spo servicepr…
Browse files Browse the repository at this point in the history
…incipal permissionrequest list'. Closes #5102
  • Loading branch information
nicodecleyre authored and Adam-it committed Jul 9, 2023
1 parent 2b0aad1 commit 978b824
Show file tree
Hide file tree
Showing 11 changed files with 220 additions and 220 deletions.
28 changes: 14 additions & 14 deletions src/m365/spo/commands/roledefinition/roledefinition-add.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
Expand Down Expand Up @@ -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', () => {
Expand Down Expand Up @@ -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, {
Expand All @@ -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, {
Expand All @@ -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, {
Expand Down
44 changes: 22 additions & 22 deletions src/m365/spo/commands/roledefinition/roledefinition-get.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
Expand Down Expand Up @@ -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', () => {
Expand Down Expand Up @@ -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, {
Expand All @@ -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, {
Expand Down
10 changes: 5 additions & 5 deletions src/m365/spo/commands/roledefinition/roledefinition-list.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
Expand Down Expand Up @@ -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', () => {
Expand Down
28 changes: 14 additions & 14 deletions src/m365/spo/commands/roledefinition/roledefinition-remove.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
Expand Down Expand Up @@ -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', () => {
Expand Down Expand Up @@ -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, {
Expand Down Expand Up @@ -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);
Expand All @@ -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 } });
Expand Down
54 changes: 27 additions & 27 deletions src/m365/spo/commands/roledefinition/roledefinition-remove.ts
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -69,32 +69,8 @@ class SpoRoleDefinitionRemoveCommand extends SpoCommand {
}

public async commandAction(logger: Logger, args: CommandArgs): Promise<void> {
const removeRoleDefinition: () => Promise<void> = async (): Promise<void> => {
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 }>({
Expand All @@ -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<void> {
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();
Loading

0 comments on commit 978b824

Please sign in to comment.