@ -346,4 +346,170 @@ describe("/queries", () => {
expect ( contents ) . toBe ( null )
} )
} )
describe ( "Current User Request Mapping" , ( ) => {
async function previewGet ( datasource , fields , params ) {
return config . previewQuery ( request , config , datasource , fields , params )
}
async function previewPost ( datasource , fields , params ) {
return config . previewQuery ( request , config , datasource , fields , params , "create" )
}
it ( "should parse global and query level header mappings" , async ( ) => {
const userDetails = config . getUserDetails ( )
const datasource = await config . restDatasource ( {
defaultHeaders : {
"test" : "headerVal" ,
"emailHdr" : "{{[user].[email]}}"
}
} )
const res = await previewGet ( datasource , {
path : "www.google.com" ,
queryString : "email={{[user].[email]}}" ,
headers : {
queryHdr : "{{[user].[firstName]}}" ,
secondHdr : "1234"
}
} )
const parsedRequest = JSON . parse ( res . body . extra . raw )
expect ( parsedRequest . opts . headers ) . toEqual ( {
"test" : "headerVal" ,
"emailHdr" : userDetails . email ,
"queryHdr" : userDetails . firstName ,
"secondHdr" : "1234"
} )
expect ( res . body . rows [ 0 ] . url ) . toEqual ( "http://www.google.com?email=" + userDetails . email )
} )
it ( "should bind the current user to query parameters" , async ( ) => {
const userDetails = config . getUserDetails ( )
const datasource = await config . restDatasource ( )
const res = await previewGet ( datasource , {
path : "www.google.com" ,
queryString : "test={{myEmail}}&testName={{myName}}&testParam={{testParam}}" ,
} , {
"myEmail" : "{{[user].[email]}}" ,
"myName" : "{{[user].[firstName]}}" ,
"testParam" : "1234"
} )
expect ( res . body . rows [ 0 ] . url ) . toEqual ( "http://www.google.com?test=" + userDetails . email +
"&testName=" + userDetails . firstName + "&testParam=1234" )
} )
it ( "should bind the current user the request body - plain text" , async ( ) => {
const userDetails = config . getUserDetails ( )
const datasource = await config . restDatasource ( )
const res = await previewPost ( datasource , {
path : "www.google.com" ,
queryString : "testParam={{testParam}}" ,
requestBody : "This is plain text and this is my email: {{[user].[email]}}. This is a test param: {{testParam}}" ,
bodyType : "text"
} , {
"testParam" : "1234"
} )
const parsedRequest = JSON . parse ( res . body . extra . raw )
expect ( parsedRequest . opts . body ) . toEqual ( ` This is plain text and this is my email: ${ userDetails . email } . This is a test param: 1234 ` )
expect ( res . body . rows [ 0 ] . url ) . toEqual ( "http://www.google.com?testParam=1234" )
} )
it ( "should bind the current user the request body - json" , async ( ) => {
const userDetails = config . getUserDetails ( )
const datasource = await config . restDatasource ( )
const res = await previewPost ( datasource , {
path : "www.google.com" ,
queryString : "testParam={{testParam}}" ,
requestBody : "{\"email\":\"{{[user].[email]}}\",\"queryCode\":{{testParam}},\"userRef\":\"{{userRef}}\"}" ,
bodyType : "json"
} , {
"testParam" : "1234" ,
"userRef" : "{{[user].[firstName]}}"
} )
const parsedRequest = JSON . parse ( res . body . extra . raw )
const test = ` {"email":" ${ userDetails . email } ","queryCode":1234,"userRef":" ${ userDetails . firstName } "} `
expect ( parsedRequest . opts . body ) . toEqual ( test )
expect ( res . body . rows [ 0 ] . url ) . toEqual ( "http://www.google.com?testParam=1234" )
} )
it ( "should bind the current user the request body - xml" , async ( ) => {
const userDetails = config . getUserDetails ( )
const datasource = await config . restDatasource ( )
const res = await previewPost ( datasource , {
path : "www.google.com" ,
queryString : "testParam={{testParam}}" ,
requestBody : "<note> <email>{{[user].[email]}}</email> <code>{{testParam}}</code> " +
"<ref>{{userId}}</ref> <somestring>testing</somestring> </note>" ,
bodyType : "xml"
} , {
"testParam" : "1234" ,
"userId" : "{{[user].[firstName]}}"
} )
const parsedRequest = JSON . parse ( res . body . extra . raw )
const test = ` <note> <email> ${ userDetails . email } </email> <code>1234</code> <ref> ${ userDetails . firstName } </ref> <somestring>testing</somestring> </note> `
expect ( parsedRequest . opts . body ) . toEqual ( test )
expect ( res . body . rows [ 0 ] . url ) . toEqual ( "http://www.google.com?testParam=1234" )
} )
it ( "should bind the current user the request body - form-data" , async ( ) => {
const userDetails = config . getUserDetails ( )
const datasource = await config . restDatasource ( )
const res = await previewPost ( datasource , {
path : "www.google.com" ,
queryString : "testParam={{testParam}}" ,
requestBody : "{\"email\":\"{{[user].[email]}}\",\"queryCode\":{{testParam}},\"userRef\":\"{{userRef}}\"}" ,
bodyType : "form"
} , {
"testParam" : "1234" ,
"userRef" : "{{[user].[firstName]}}"
} )
const parsedRequest = JSON . parse ( res . body . extra . raw )
const emailData = parsedRequest . opts . body . _ streams [ 1 ]
expect ( emailData ) . toEqual ( userDetails . email )
const queryCodeData = parsedRequest . opts . body . _ streams [ 4 ]
expect ( queryCodeData ) . toEqual ( "1234" )
const userRef = parsedRequest . opts . body . _ streams [ 7 ]
expect ( userRef ) . toEqual ( userDetails . firstName )
expect ( res . body . rows [ 0 ] . url ) . toEqual ( "http://www.google.com?testParam=1234" )
} )
it ( "should bind the current user the request body - encoded" , async ( ) => {
const userDetails = config . getUserDetails ( )
const datasource = await config . restDatasource ( )
const res = await previewPost ( datasource , {
path : "www.google.com" ,
queryString : "testParam={{testParam}}" ,
requestBody : "{\"email\":\"{{[user].[email]}}\",\"queryCode\":{{testParam}},\"userRef\":\"{{userRef}}\"}" ,
bodyType : "encoded"
} , {
"testParam" : "1234" ,
"userRef" : "{{[user].[firstName]}}"
} )
const parsedRequest = JSON . parse ( res . body . extra . raw )
expect ( parsedRequest . opts . body . email ) . toEqual ( userDetails . email )
expect ( parsedRequest . opts . body . queryCode ) . toEqual ( "1234" )
expect ( parsedRequest . opts . body . userRef ) . toEqual ( userDetails . firstName )
} )
} ) ;
} )