1
0
mirror of https://github.com/sasjs/adapter.git synced 2026-01-19 10:00:06 +00:00

Merge pull request #259 from sasjs/issue-258

Issue 258
This commit is contained in:
Muhammad Saad
2021-02-25 18:41:21 +05:00
committed by GitHub
5 changed files with 155 additions and 71 deletions

View File

@@ -20,7 +20,8 @@ export class ComputeJobExecutor extends BaseJobExecutor {
const waitForResult = true const waitForResult = true
const expectWebout = true const expectWebout = true
return this.sasViyaApiClient const requestPromise = new Promise((resolve, reject) => {
this.sasViyaApiClient
?.executeComputeJob( ?.executeComputeJob(
sasJob, sasJob,
config.contextName, config.contextName,
@@ -32,23 +33,39 @@ export class ComputeJobExecutor extends BaseJobExecutor {
) )
.then((response) => { .then((response) => {
this.appendRequest(response, sasJob, config.debug) this.appendRequest(response, sasJob, config.debug)
let responseJson
return response.result resolve(response.result)
return responseJson
}) })
.catch(async (e: Error) => { .catch(async (e: Error) => {
if (e instanceof ComputeJobExecutionError) { if (e instanceof ComputeJobExecutionError) {
this.appendRequest(e, sasJob, config.debug) this.appendRequest(e, sasJob, config.debug)
reject(new ErrorResponse(e?.message, e))
} }
if (e instanceof LoginRequiredError) { if (e instanceof LoginRequiredError) {
await loginCallback() await loginCallback()
this.appendWaitingRequest(() => this.appendWaitingRequest(() => {
this.execute(sasJob, data, config, loginRequiredCallback) return this.execute(
sasJob,
data,
config,
loginRequiredCallback
).then(
(res: any) => {
resolve(res)
},
(err: any) => {
reject(err)
}
) )
}
return Promise.reject(new ErrorResponse(e?.message, e))
}) })
} else {
reject(new ErrorResponse(e?.message, e))
}
})
})
return requestPromise
} }
} }

View File

@@ -17,24 +17,52 @@ export class JesJobExecutor extends BaseJobExecutor {
accessToken?: string accessToken?: string
) { ) {
const loginCallback = loginRequiredCallback || (() => Promise.resolve()) const loginCallback = loginRequiredCallback || (() => Promise.resolve())
return await this.sasViyaApiClient
?.executeJob(sasJob, config.contextName, config.debug, data, accessToken) const requestPromise = new Promise((resolve, reject) => {
this.sasViyaApiClient
?.executeJob(
sasJob,
config.contextName,
config.debug,
data,
accessToken
)
.then((response) => { .then((response) => {
this.appendRequest(response, sasJob, config.debug) this.appendRequest(response, sasJob, config.debug)
return response.result resolve(response.result)
}) })
.catch(async (e: Error) => { .catch(async (e: Error) => {
if (e instanceof JobExecutionError) { if (e instanceof JobExecutionError) {
this.appendRequest(e, sasJob, config.debug) this.appendRequest(e, sasJob, config.debug)
reject(new ErrorResponse(e?.message, e))
} }
if (e instanceof LoginRequiredError) { if (e instanceof LoginRequiredError) {
await loginCallback() await loginCallback()
this.appendWaitingRequest(() =>
this.execute(sasJob, data, config, loginRequiredCallback) this.appendWaitingRequest(() => {
return this.execute(
sasJob,
data,
config,
loginRequiredCallback
).then(
(res: any) => {
resolve(res)
},
(err: any) => {
reject(err)
}
) )
}
return Promise.reject(new ErrorResponse(e?.message, e))
}) })
} else {
reject(new ErrorResponse(e?.message, e))
}
})
})
return requestPromise
} }
} }

View File

@@ -7,6 +7,11 @@ import { SASViyaApiClient } from '../SASViyaApiClient'
import { isRelativePath } from '../utils' import { isRelativePath } from '../utils'
import { BaseJobExecutor } from './JobExecutor' import { BaseJobExecutor } from './JobExecutor'
export interface WaitingRequstPromise {
promise: Promise<any> | null
resolve: any
reject: any
}
export class WebJobExecutor extends BaseJobExecutor { export class WebJobExecutor extends BaseJobExecutor {
constructor( constructor(
serverUrl: string, serverUrl: string,
@@ -80,30 +85,51 @@ export class WebJobExecutor extends BaseJobExecutor {
} }
} }
return this.requestClient!.post(apiUrl, formData, undefined) const requestPromise = new Promise((resolve, reject) => {
this.requestClient!.post(apiUrl, formData, undefined)
.then(async (res) => { .then(async (res) => {
if (this.serverType === ServerType.SasViya && config.debug) { if (this.serverType === ServerType.SasViya && config.debug) {
const jsonResponse = await this.parseSasViyaDebugResponse( const jsonResponse = await this.parseSasViyaDebugResponse(
res.result as string res.result as string
) )
this.appendRequest(res, sasJob, config.debug) this.appendRequest(res, sasJob, config.debug)
return jsonResponse resolve(jsonResponse)
} }
this.appendRequest(res, sasJob, config.debug) this.appendRequest(res, sasJob, config.debug)
return res.result resolve(res.result)
}) })
.catch(async (e: Error) => { .catch(async (e: Error) => {
if (e instanceof JobExecutionError) { if (e instanceof JobExecutionError) {
this.appendRequest(e, sasJob, config.debug) this.appendRequest(e, sasJob, config.debug)
reject(new ErrorResponse(e?.message, e))
} }
if (e instanceof LoginRequiredError) { if (e instanceof LoginRequiredError) {
await loginCallback() await loginCallback()
this.appendWaitingRequest(() =>
this.execute(sasJob, data, config, loginRequiredCallback) this.appendWaitingRequest(() => {
) return this.execute(
sasJob,
data,
config,
loginRequiredCallback
).then(
(res: any) => {
resolve(res)
},
(err: any) => {
reject(err)
} }
return Promise.reject(new ErrorResponse(e?.message, e)) )
}) })
} else {
reject(new ErrorResponse(e?.message, e))
}
})
})
return requestPromise
} }
private parseSasViyaDebugResponse = async (response: string) => { private parseSasViyaDebugResponse = async (response: string) => {

View File

@@ -386,6 +386,7 @@ export class RequestClient implements HttpClient {
private parseResponse<T>(response: AxiosResponse<any>) { private parseResponse<T>(response: AxiosResponse<any>) {
const etag = response?.headers ? response.headers['etag'] : '' const etag = response?.headers ? response.headers['etag'] : ''
let parsedResponse let parsedResponse
let includeSAS9Log: boolean = false
try { try {
if (typeof response.data === 'string') { if (typeof response.data === 'string') {
@@ -399,11 +400,20 @@ export class RequestClient implements HttpClient {
} catch { } catch {
parsedResponse = response.data parsedResponse = response.data
} }
includeSAS9Log = true
} }
return {
let responseToReturn: { result: T; etag: any; log?: string } = {
result: parsedResponse as T, result: parsedResponse as T,
etag etag
} }
if (includeSAS9Log) {
responseToReturn.log = response.data
}
return responseToReturn
} }
} }

View File

@@ -29,7 +29,10 @@ describe('SessionManager', () => {
Promise.resolve({ data: sampleResponse }) Promise.resolve({ data: sampleResponse })
) )
const expectedResponse = { etag: '', result: sampleResponse } const expectedResponse = {
etag: '',
result: sampleResponse
}
await expect( await expect(
sessionManager.getVariable( sessionManager.getVariable(