Skip to content

Commit 4201976

Browse files
nicodecleyremartinlingstuyl
authored andcommitted
Refactors 'pp solution publish' to use util. Closes #5248
1 parent 7205e34 commit 4201976

File tree

4 files changed

+317
-209
lines changed

4 files changed

+317
-209
lines changed

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

Lines changed: 21 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import { powerPlatform } from '../../../../utils/powerPlatform.js';
1212
import { session } from '../../../../utils/session.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-publish.js';
1716
import { accessToken } from '../../../../utils/accessToken.js';
1817

@@ -38,6 +37,19 @@ describe(commands.SOLUTION_PUBLISH, () => {
3837
}
3938
]
4039
};
40+
const solutionResponse = {
41+
solutionid: validId,
42+
uniquename: validName,
43+
version: '1.0.0.0',
44+
installedon: '2021-10-01T21:54:14Z',
45+
solutionpackageversion: null,
46+
friendlyname: validName,
47+
versionnumber: 860052,
48+
publisherid: {
49+
friendlyname: 'CDS Default Publisher',
50+
publisherid: '00000001-0000-0000-0000-00000000005a'
51+
}
52+
};
4153
//#endregion
4254

4355
let log: string[];
@@ -76,7 +88,8 @@ describe(commands.SOLUTION_PUBLISH, () => {
7688
request.get,
7789
powerPlatform.getDynamicsInstanceApiUrl,
7890
cli.promptForConfirmation,
79-
cli.executeCommandWithOutput
91+
cli.executeCommandWithOutput,
92+
powerPlatform.getSolutionByName
8093
]);
8194
});
8295

@@ -121,34 +134,14 @@ describe(commands.SOLUTION_PUBLISH, () => {
121134
it('publishes the components of a specified solution owned by the currently signed-in user', async () => {
122135
sinon.stub(powerPlatform, 'getDynamicsInstanceApiUrl').callsFake(async () => envUrl);
123136

124-
sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise<any> => {
125-
if (command === ppSolutionGetCommand) {
126-
return ({
127-
stdout: `{
128-
"solutionid": "${validId}",
129-
"uniquename": "${validName}",
130-
"version": "1.0.0.0",
131-
"installedon": "2022-10-30T13:59:26Z",
132-
"solutionpackageversion": null,
133-
"friendlyname": "${validName}",
134-
"versionnumber": 1209676,
135-
"publisherid": {
136-
"friendlyname": "Default Publisher for org1547b730",
137-
"publisherid": "d21aab71-79e7-11dd-8874-00188b01e34f"
138-
}
139-
}`
140-
});
141-
}
142-
143-
throw new CommandError('Unknown case');
144-
});
137+
sinon.stub(powerPlatform, 'getSolutionByName').resolves(solutionResponse);
145138

146139
sinon.stub(request, 'get').callsFake(async (opts) => {
147140
if (opts.url === `https://contoso-dev.api.crm4.dynamics.com/api/data/v9.0/msdyn_solutioncomponentsummaries?$filter=(msdyn_solutionid eq ${validId})&$select=msdyn_componentlogicalname,msdyn_name&$orderby=msdyn_componentlogicalname asc&api-version=9.1`) {
148141
return validSolutionComponentsResult;
149142
}
150143

151-
throw 'Invalid request';
144+
throw `Invalid request with opts ${JSON.stringify(opts)}`;
152145
});
153146

154147
sinon.stub(request, 'post').callsFake(async (opts) => {
@@ -158,7 +151,7 @@ describe(commands.SOLUTION_PUBLISH, () => {
158151
}
159152
}
160153

161-
throw 'Invalid request';
154+
throw `Invalid request with opts ${JSON.stringify(opts)}`;
162155
});
163156

164157
await assert.doesNotReject(command.action(logger, {
@@ -173,34 +166,14 @@ describe(commands.SOLUTION_PUBLISH, () => {
173166
it('publishes the components of a specified solution owned by the currently signed-in user and waits for completion', async () => {
174167
sinon.stub(powerPlatform, 'getDynamicsInstanceApiUrl').callsFake(async () => envUrl);
175168

176-
sinon.stub(cli, 'executeCommandWithOutput').callsFake(async (command): Promise<any> => {
177-
if (command === ppSolutionGetCommand) {
178-
return ({
179-
stdout: `{
180-
"solutionid": "${validId}",
181-
"uniquename": "${validName}",
182-
"version": "1.0.0.0",
183-
"installedon": "2022-10-30T13:59:26Z",
184-
"solutionpackageversion": null,
185-
"friendlyname": "${validName}",
186-
"versionnumber": 1209676,
187-
"publisherid": {
188-
"friendlyname": "Default Publisher for org1547b730",
189-
"publisherid": "d21aab71-79e7-11dd-8874-00188b01e34f"
190-
}
191-
}`
192-
});
193-
}
194-
195-
throw new CommandError('Unknown case');
196-
});
169+
sinon.stub(powerPlatform, 'getSolutionByName').resolves(solutionResponse);
197170

198171
sinon.stub(request, 'get').callsFake(async (opts) => {
199172
if (opts.url === `https://contoso-dev.api.crm4.dynamics.com/api/data/v9.0/msdyn_solutioncomponentsummaries?$filter=(msdyn_solutionid eq ${validId})&$select=msdyn_componentlogicalname,msdyn_name&$orderby=msdyn_componentlogicalname asc&api-version=9.1`) {
200173
return validSolutionComponentsResult;
201174
}
202175

203-
throw 'Invalid request';
176+
throw `Invalid request with opts ${JSON.stringify(opts)}`;
204177
});
205178

206179
sinon.stub(request, 'post').callsFake(async (opts) => {
@@ -210,7 +183,7 @@ describe(commands.SOLUTION_PUBLISH, () => {
210183
}
211184
}
212185

213-
throw 'Invalid request';
186+
throw `Invalid request with opts ${JSON.stringify(opts)}`;
214187
});
215188

216189
await command.action(logger, {

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

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
import { AxiosRequestConfig } from 'axios';
2-
import { cli } from '../../../../cli/cli.js';
32
import { Logger } from '../../../../cli/Logger.js';
4-
import Command from '../../../../Command.js';
53
import GlobalOptions from '../../../../GlobalOptions.js';
64
import request from '../../../../request.js';
75
import { formatting } from '../../../../utils/formatting.js';
86
import { powerPlatform } from '../../../../utils/powerPlatform.js';
97
import { validation } from '../../../../utils/validation.js';
108
import PowerPlatformCommand from '../../../base/PowerPlatformCommand.js';
119
import commands from '../../commands.js';
12-
import ppSolutionGetCommand, { Options as PpSolutionGetCommandOptions } from './solution-get.js';
1310

1411
interface CommandArgs {
1512
options: Options;
@@ -97,8 +94,8 @@ class PpSolutionPublishCommand extends PowerPlatformCommand {
9794

9895
public async commandAction(logger: Logger, args: any): Promise<void> {
9996
try {
100-
const dynamicsApiUrl = await powerPlatform.getDynamicsInstanceApiUrl(args.options.environmentName, args.options.asAdmin);
101-
const solutionId = await this.getSolutionId(args, logger);
97+
const dynamicsApiUrl = await powerPlatform.getDynamicsInstanceApiUrl(args.options.environment, args.options.asAdmin);
98+
const solutionId = await this.getSolutionId(args, dynamicsApiUrl, logger);
10299
const solutionComponents = await this.getSolutionComponents(dynamicsApiUrl, solutionId, logger);
103100
const parameterXml = await this.buildXmlRequestObject(solutionComponents, logger);
104101

@@ -147,26 +144,17 @@ class PpSolutionPublishCommand extends PowerPlatformCommand {
147144
return response.value;
148145
}
149146

150-
private async getSolutionId(args: CommandArgs, logger: Logger): Promise<string> {
147+
private async getSolutionId(args: CommandArgs, dynamicsApiUrl: string, logger: Logger): Promise<string> {
151148
if (args.options.id) {
152149
return args.options.id;
153150
}
154151

155152
if (this.verbose) {
156-
await logger.logToStderr(`Retrieving solutionId`);
153+
await logger.logToStderr(`Retrieving solutionId...`);
157154
}
158155

159-
const options: PpSolutionGetCommandOptions = {
160-
environmentName: args.options.environmentName,
161-
name: args.options.name,
162-
output: 'json',
163-
debug: this.debug,
164-
verbose: this.verbose
165-
};
166-
167-
const output = await cli.executeCommandWithOutput(ppSolutionGetCommand as Command, { options: { ...options, _: [] } });
168-
const getSolutionOutput = JSON.parse(output.stdout);
169-
return getSolutionOutput.solutionid;
156+
const solution = await powerPlatform.getSolutionByName(dynamicsApiUrl, args.options.name!);
157+
return solution.solutionid;
170158
}
171159

172160
private async buildXmlRequestObject(solutionComponents: SolutionComponent[], logger: Logger): Promise<string> {

0 commit comments

Comments
 (0)