@@ -12,6 +12,7 @@ import {
1212 RequestStatus ,
1313} from '@salesforce/source-deploy-retrieve/lib/src/client/types' ;
1414import { cloneJson } from '@salesforce/kit' ;
15+ import { toArray } from '../../../src/formatters/resultFormatter' ;
1516
1617const baseDeployResponse = {
1718 checkOnly : false ,
@@ -72,7 +73,10 @@ export type DeployResponseType =
7273 | 'successRecentValidation'
7374 | 'canceled'
7475 | 'inProgress'
75- | 'failed' ;
76+ | 'failed'
77+ | 'failedTest'
78+ | 'passedTest'
79+ | 'passedAndFailedTest' ;
7680
7781export const getDeployResponse = (
7882 type : DeployResponseType ,
@@ -98,6 +102,157 @@ export const getDeployResponse = (
98102 response . details . componentFailures . problem = 'This component has some problems' ;
99103 }
100104
105+ if ( type === 'failedTest' ) {
106+ response . status = RequestStatus . Failed ;
107+ response . success = false ;
108+ response . details . componentFailures = cloneJson ( baseDeployResponse . details . componentSuccesses [ 1 ] ) as DeployMessage ;
109+ response . details . componentSuccesses = cloneJson ( baseDeployResponse . details . componentSuccesses [ 0 ] ) as DeployMessage ;
110+ response . details . componentFailures . success = 'false' ;
111+ delete response . details . componentFailures . id ;
112+ response . details . componentFailures . problemType = 'Error' ;
113+ response . details . componentFailures . problem = 'This component has some problems' ;
114+ response . details . runTestResult . numFailures = '1' ;
115+ response . runTestsEnabled = true ;
116+ response . numberTestErrors = 1 ;
117+ response . details . runTestResult . successes = [ ] ;
118+ response . details . runTestResult . failures = [
119+ {
120+ name : 'ChangePasswordController' ,
121+ methodName : 'testMethod' ,
122+ message : 'testMessage' ,
123+ id : 'testId' ,
124+ time : 'testTime' ,
125+ packageName : 'testPkg' ,
126+ stackTrace : 'test stack trace' ,
127+ type : 'ApexClass' ,
128+ } ,
129+ ] ;
130+ response . details . runTestResult . codeCoverage = [
131+ {
132+ id : 'ChangePasswordController' ,
133+ type : 'ApexClass' ,
134+ name : 'ChangePasswordController' ,
135+ numLocations : '1' ,
136+ locationsNotCovered : {
137+ column : '54' ,
138+ line : '2' ,
139+ numExecutions : '1' ,
140+ time : '2' ,
141+ } ,
142+ numLocationsNotCovered : '5' ,
143+ } ,
144+ ] ;
145+ }
146+
147+ if ( type === 'passedTest' ) {
148+ response . status = RequestStatus . Failed ;
149+ response . success = false ;
150+ response . details . componentFailures = cloneJson ( baseDeployResponse . details . componentSuccesses [ 1 ] ) as DeployMessage ;
151+ response . details . componentSuccesses = cloneJson ( baseDeployResponse . details . componentSuccesses [ 0 ] ) as DeployMessage ;
152+ response . details . componentFailures . success = 'false' ;
153+ delete response . details . componentFailures . id ;
154+ response . details . componentFailures . problemType = 'Error' ;
155+ response . details . componentFailures . problem = 'This component has some problems' ;
156+ response . details . runTestResult . numFailures = '0' ;
157+ response . runTestsEnabled = true ;
158+ response . numberTestErrors = 0 ;
159+ response . details . runTestResult . successes = [
160+ {
161+ name : 'ChangePasswordController' ,
162+ methodName : 'testMethod' ,
163+ id : 'testId' ,
164+ time : 'testTime' ,
165+ } ,
166+ ] ;
167+ response . details . runTestResult . failures = [ ] ;
168+ response . details . runTestResult . codeCoverage = [
169+ {
170+ id : 'ChangePasswordController' ,
171+ type : 'ApexClass' ,
172+ name : 'ChangePasswordController' ,
173+ numLocations : '1' ,
174+ locationsNotCovered : {
175+ column : '54' ,
176+ line : '2' ,
177+ numExecutions : '1' ,
178+ time : '2' ,
179+ } ,
180+ numLocationsNotCovered : '5' ,
181+ } ,
182+ ] ;
183+ }
184+ if ( type === 'passedAndFailedTest' ) {
185+ response . status = RequestStatus . Failed ;
186+ response . success = false ;
187+ response . details . componentFailures = cloneJson ( baseDeployResponse . details . componentSuccesses [ 1 ] ) as DeployMessage ;
188+ response . details . componentSuccesses = cloneJson ( baseDeployResponse . details . componentSuccesses [ 0 ] ) as DeployMessage ;
189+ response . details . componentFailures . success = 'false' ;
190+ delete response . details . componentFailures . id ;
191+ response . details . componentFailures . problemType = 'Error' ;
192+ response . details . componentFailures . problem = 'This component has some problems' ;
193+ response . details . runTestResult . numFailures = '2' ;
194+ response . runTestsEnabled = true ;
195+ response . numberTestErrors = 2 ;
196+ response . details . runTestResult . successes = [
197+ {
198+ name : 'ChangePasswordController' ,
199+ methodName : 'testMethod' ,
200+ id : 'testId' ,
201+ time : 'testTime' ,
202+ } ,
203+ ] ;
204+ response . details . runTestResult . failures = [
205+ {
206+ name : 'ChangePasswordController' ,
207+ methodName : 'testMethod' ,
208+ message : 'testMessage' ,
209+ id : 'testId' ,
210+ time : 'testTime' ,
211+ packageName : 'testPkg' ,
212+ stackTrace : 'test stack trace' ,
213+ type : 'ApexClass' ,
214+ } ,
215+ {
216+ name : 'ApexTestClass' ,
217+ methodName : 'testMethod' ,
218+ message : 'testMessage' ,
219+ id : 'testId' ,
220+ time : 'testTime' ,
221+ packageName : 'testPkg' ,
222+ stackTrace : 'test stack trace' ,
223+ type : 'ApexClass' ,
224+ } ,
225+ ] ;
226+ response . details . runTestResult . codeCoverage = [
227+ {
228+ id : 'ChangePasswordController' ,
229+ type : 'ApexClass' ,
230+ name : 'ChangePasswordController' ,
231+ numLocations : '1' ,
232+ locationsNotCovered : {
233+ column : '54' ,
234+ line : '2' ,
235+ numExecutions : '1' ,
236+ time : '2' ,
237+ } ,
238+ numLocationsNotCovered : '5' ,
239+ } ,
240+ {
241+ id : 'ApexTestClass' ,
242+ type : 'ApexClass' ,
243+ name : 'ApexTestClass' ,
244+ numLocations : '1' ,
245+ locationsNotCovered : {
246+ column : '54' ,
247+ line : '2' ,
248+ numExecutions : '1' ,
249+ time : '2' ,
250+ } ,
251+ numLocationsNotCovered : '5' ,
252+ } ,
253+ ] ;
254+ }
255+
101256 return response ;
102257} ;
103258
@@ -113,7 +268,7 @@ export const getDeployResult = (
113268 let fileProps : DeployMessage [ ] = [ ] ;
114269 if ( type === 'failed' ) {
115270 const failures = response . details . componentFailures || [ ] ;
116- fileProps = Array . isArray ( failures ) ? failures : [ failures ] ;
271+ fileProps = toArray ( failures ) ;
117272 return fileProps . map ( ( comp ) => ( {
118273 fullName : comp . fullName ,
119274 filePath : comp . fileName ,
@@ -124,7 +279,7 @@ export const getDeployResult = (
124279 } ) ) ;
125280 } else {
126281 const successes = response . details . componentSuccesses ;
127- fileProps = Array . isArray ( successes ) ? successes : [ successes ] ;
282+ fileProps = toArray ( successes ) ;
128283 return fileProps
129284 . filter ( ( p ) => p . fileName !== 'package.xml' )
130285 . map ( ( comp ) => ( {
0 commit comments