diff --git a/sasjs-tests/src/testSuites/Basic.ts b/sasjs-tests/src/testSuites/Basic.ts index 8bc89d0..ee0bda1 100644 --- a/sasjs-tests/src/testSuites/Basic.ts +++ b/sasjs-tests/src/testSuites/Basic.ts @@ -49,7 +49,7 @@ export const basicTests = ( const newAdapterIns = new SASjs(adapter.getSasjsConfig()) - return newAdapterIns.checkSession() + return await newAdapterIns.checkSession() }, assertion: (response: any) => response?.isLoggedIn && response?.userName === userName @@ -61,7 +61,7 @@ export const basicTests = ( test: async () => { await adapter.logOut() await adapter.logIn('invalid', 'invalid') - return adapter.logIn(userName, password) + return await adapter.logIn(userName, password) }, assertion: (response: any) => response && response.isLoggedIn && response.userName === userName @@ -164,7 +164,7 @@ export const basicTests = ( description: 'Should complete successful request with extra attributes present in response', test: async () => { - const config = { + const config: Partial = { useComputeApi: false } diff --git a/src/job-execution/JesJobExecutor.ts b/src/job-execution/JesJobExecutor.ts index d924cfd..0834467 100644 --- a/src/job-execution/JesJobExecutor.ts +++ b/src/job-execution/JesJobExecutor.ts @@ -7,6 +7,7 @@ import { } from '../types/errors' import { ExtraResponseAttributes } from '@sasjs/utils/types' import { BaseJobExecutor } from './JobExecutor' +import { appendExtraResponseAttributes } from '../utils' export class JesJobExecutor extends BaseJobExecutor { constructor(serverUrl: string, private sasViyaApiClient: SASViyaApiClient) { @@ -29,21 +30,10 @@ export class JesJobExecutor extends BaseJobExecutor { .then((response: any) => { this.appendRequest(response, sasJob, config.debug) - let responseObject = {} - - if (extraResponseAttributes && extraResponseAttributes.length > 0) { - const extraAttributes = extraResponseAttributes.reduce( - (map: any, obj: any) => ((map[obj] = response[obj]), map), - {} - ) - - responseObject = { - result: response.result, - ...extraAttributes - } - } else { - responseObject = response.result - } + const responseObject = appendExtraResponseAttributes( + response, + extraResponseAttributes + ) resolve(responseObject) }) diff --git a/src/job-execution/WebJobExecutor.ts b/src/job-execution/WebJobExecutor.ts index d3b6faf..a9c724d 100644 --- a/src/job-execution/WebJobExecutor.ts +++ b/src/job-execution/WebJobExecutor.ts @@ -1,4 +1,8 @@ -import { ServerType } from '@sasjs/utils/types' +import { + AuthConfig, + ExtraResponseAttributes, + ServerType +} from '@sasjs/utils/types' import { ErrorResponse, JobExecutionError, @@ -12,7 +16,8 @@ import { SASViyaApiClient } from '../SASViyaApiClient' import { isRelativePath, getValidJson, - parseSasViyaDebugResponse + parseSasViyaDebugResponse, + appendExtraResponseAttributes } from '../utils' import { BaseJobExecutor } from './JobExecutor' import { parseWeboutResponse } from '../utils/parseWeboutResponse' @@ -37,7 +42,9 @@ export class WebJobExecutor extends BaseJobExecutor { sasJob: string, data: any, config: any, - loginRequiredCallback?: any + loginRequiredCallback?: any, + authConfig?: AuthConfig, + extraResponseAttributes: ExtraResponseAttributes[] = [] ) { const loginCallback = loginRequiredCallback || (() => Promise.resolve()) const program = isRelativePath(sasJob) @@ -113,27 +120,33 @@ export class WebJobExecutor extends BaseJobExecutor { const requestPromise = new Promise((resolve, reject) => { this.requestClient!.post(apiUrl, formData, undefined) .then(async (res: any) => { - if (this.serverType === ServerType.SasViya && config.debug) { - const jsonResponse = await parseSasViyaDebugResponse( - res.result, - this.requestClient, - this.serverUrl - ) - this.appendRequest(res, sasJob, config.debug) - resolve(jsonResponse) - } - if (this.serverType === ServerType.Sas9 && config.debug) { - let jsonResponse = res.result - if (typeof res.result === 'string') - jsonResponse = parseWeboutResponse(res.result, apiUrl) + let jsonResponse = res.result - getValidJson(jsonResponse) - this.appendRequest(res, sasJob, config.debug) - resolve(res.result) + if (config.debug) { + switch (this.serverType) { + case ServerType.SasViya: + jsonResponse = await parseSasViyaDebugResponse( + res.result, + this.requestClient, + this.serverUrl + ) + break + case ServerType.Sas9: + jsonResponse = + typeof res.result === 'string' + ? parseWeboutResponse(res.result, apiUrl) + : res.result + break + } } + this.appendRequest(res, sasJob, config.debug) - getValidJson(res.result as string) - resolve(res.result) + + const responseObject = appendExtraResponseAttributes( + { result: jsonResponse }, + extraResponseAttributes + ) + resolve(responseObject) }) .catch(async (e: Error) => { if (e instanceof JobExecutionError) { @@ -150,7 +163,9 @@ export class WebJobExecutor extends BaseJobExecutor { sasJob, data, config, - loginRequiredCallback + loginRequiredCallback, + authConfig, + extraResponseAttributes ).then( (res: any) => { resolve(res) diff --git a/src/utils/appendExtraResponseAttributes.ts b/src/utils/appendExtraResponseAttributes.ts new file mode 100644 index 0000000..789277f --- /dev/null +++ b/src/utils/appendExtraResponseAttributes.ts @@ -0,0 +1,22 @@ +import { ExtraResponseAttributes } from '@sasjs/utils/types' + +export async function appendExtraResponseAttributes( + response: any, + extraResponseAttributes: ExtraResponseAttributes[] +) { + let responseObject = {} + + if (extraResponseAttributes?.length) { + const extraAttributes = extraResponseAttributes.reduce( + (map: any, obj: any) => ((map[obj] = response[obj]), map), + {} + ) + + responseObject = { + result: response.result, + ...extraAttributes + } + } else responseObject = response.result + + return responseObject +} diff --git a/src/utils/index.ts b/src/utils/index.ts index 2a05d63..d1ec7bb 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -15,3 +15,4 @@ export * from './parseWeboutResponse' export * from './fetchLogByChunks' export * from './getValidJson' export * from './parseViyaDebugResponse' +export * from './appendExtraResponseAttributes'