Skip to content

Commit 9281056

Browse files
nicodecleyremartinlingstuyl
authored andcommitted
Refactors 'pp solution remove' to use util. Closes #5252
1 parent 4201976 commit 9281056

File tree

2 files changed

+21
-40
lines changed

2 files changed

+21
-40
lines changed

src/m365/pp/commands/solution/solution-remove.spec.ts

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
import assert from 'assert';
22
import sinon from 'sinon';
3+
import { telemetry } from '../../../../telemetry.js';
34
import auth from '../../../../Auth.js';
45
import { cli } from '../../../../cli/cli.js';
56
import { CommandInfo } from '../../../../cli/CommandInfo.js';
67
import { Logger } from '../../../../cli/Logger.js';
78
import { CommandError } from '../../../../Command.js';
89
import request from '../../../../request.js';
9-
import { telemetry } from '../../../../telemetry.js';
1010
import { pid } from '../../../../utils/pid.js';
11-
import { powerPlatform } from '../../../../utils/powerPlatform.js';
1211
import { session } from '../../../../utils/session.js';
12+
import { powerPlatform } from '../../../../utils/powerPlatform.js';
1313
import { sinonUtil } from '../../../../utils/sinonUtil.js';
1414
import commands from '../../commands.js';
15-
import ppSolutionGetCommand from './solution-get.js';
1615
import command from './solution-remove.js';
1716
import { accessToken } from '../../../../utils/accessToken.js';
1817

@@ -23,6 +22,19 @@ describe(commands.SOLUTION_REMOVE, () => {
2322
const validId = '00000001-0000-0000-0001-00000000009b';
2423
const validName = 'Solution name';
2524
const envUrl = "https://contoso-dev.api.crm4.dynamics.com";
25+
const solutionResponse = {
26+
solutionid: validId,
27+
uniquename: validName,
28+
version: '1.0.0.0',
29+
installedon: '2021-10-01T21:54:14Z',
30+
solutionpackageversion: null,
31+
friendlyname: validName,
32+
versionnumber: 860052,
33+
publisherid: {
34+
friendlyname: 'CDS Default Publisher',
35+
publisherid: '00000001-0000-0000-0000-00000000005a'
36+
}
37+
};
2638
//#endregion
2739

2840
let log: string[];
@@ -66,6 +78,7 @@ describe(commands.SOLUTION_REMOVE, () => {
6678
sinonUtil.restore([
6779
request.delete,
6880
powerPlatform.getDynamicsInstanceApiUrl,
81+
powerPlatform.getSolutionByName,
6982
cli.promptForConfirmation,
7083
cli.executeCommandWithOutput
7184
]);
@@ -129,28 +142,7 @@ describe(commands.SOLUTION_REMOVE, () => {
129142

130143
it('removes the specified solution owned by the currently signed-in user when prompt confirmed', async () => {
131144
sinon.stub(powerPlatform, 'getDynamicsInstanceApiUrl').callsFake(async () => envUrl);
132-
133-
sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise<any> => {
134-
if (command === ppSolutionGetCommand) {
135-
return ({
136-
stdout: `{
137-
"solutionid": "${validId}",
138-
"uniquename": "${validName}",
139-
"version": "1.0.0.0",
140-
"installedon": "2022-10-30T13:59:26Z",
141-
"solutionpackageversion": null,
142-
"friendlyname": "${validName}",
143-
"versionnumber": 1209676,
144-
"publisherid": {
145-
"friendlyname": "Default Publisher for org1547b730",
146-
"publisherid": "d21aab71-79e7-11dd-8874-00188b01e34f"
147-
}
148-
}`
149-
});
150-
}
151-
152-
throw new CommandError('Unknown case');
153-
});
145+
sinon.stub(powerPlatform, 'getSolutionByName').resolves(solutionResponse);
154146

155147
sinon.stub(request, 'delete').callsFake(async (opts) => {
156148
if (opts.url === `https://contoso-dev.api.crm4.dynamics.com/api/data/v9.1/solutions(${validId})`) {

src/m365/pp/commands/solution/solution-remove.ts

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import { cli } from '../../../../cli/cli.js';
22
import { Logger } from '../../../../cli/Logger.js';
3-
import Command from '../../../../Command.js';
43
import GlobalOptions from '../../../../GlobalOptions.js';
54
import request, { CliRequestOptions } from '../../../../request.js';
65
import { powerPlatform } from '../../../../utils/powerPlatform.js';
76
import { validation } from '../../../../utils/validation.js';
87
import PowerPlatformCommand from '../../../base/PowerPlatformCommand.js';
98
import commands from '../../commands.js';
10-
import ppSolutionGetCommand, { Options as PpSolutionGetCommandOptions } from './solution-get.js';
119

1210
interface CommandArgs {
1311
options: Options;
@@ -106,29 +104,20 @@ class PpSolutionRemoveCommand extends PowerPlatformCommand {
106104
}
107105
}
108106

109-
private async getSolutionId(args: CommandArgs): Promise<string> {
107+
private async getSolutionId(args: CommandArgs, dynamicsApiUrl: string): Promise<string> {
110108
if (args.options.id) {
111109
return args.options.id;
112110
}
113111

114-
const options: PpSolutionGetCommandOptions = {
115-
environmentName: args.options.environmentName,
116-
name: args.options.name,
117-
output: 'json',
118-
debug: this.debug,
119-
verbose: this.verbose
120-
};
121-
122-
const output = await cli.executeCommandWithOutput(ppSolutionGetCommand as Command, { options: { ...options, _: [] } });
123-
const getSolutionOutput = JSON.parse(output.stdout);
124-
return getSolutionOutput.solutionid;
112+
const solution = await powerPlatform.getSolutionByName(dynamicsApiUrl, args.options.name!);
113+
return solution.solutionid;
125114
}
126115

127116
private async deleteSolution(args: CommandArgs): Promise<void> {
128117
try {
129118
const dynamicsApiUrl = await powerPlatform.getDynamicsInstanceApiUrl(args.options.environmentName, args.options.asAdmin);
130119

131-
const solutionId = await this.getSolutionId(args);
120+
const solutionId = await this.getSolutionId(args, dynamicsApiUrl);
132121
const requestOptions: CliRequestOptions = {
133122
url: `${dynamicsApiUrl}/api/data/v9.1/solutions(${solutionId})`,
134123
headers: {

0 commit comments

Comments
 (0)