Skip to content

Commit

Permalink
chore: adding proxy test cases for salesforce oauth (#3170)
Browse files Browse the repository at this point in the history
* chore: add initial business tests

* chore: cleanup

* chore: add other scenario test, refactor

* chore: address commentsx1

* chore: move test to other

* chore: address commentsx2

* chore: adding proxy test cases for salesforce oauth access token refresh

* code review suggestion

Co-authored-by: Yashasvi Bajpai <[email protected]>

* fix: review comments address

---------

Co-authored-by: Yashasvi Bajpai <[email protected]>
  • Loading branch information
shrouti1507 and yashasvibajpai authored Mar 12, 2024
1 parent 229ce47 commit 5dd5142
Show file tree
Hide file tree
Showing 3 changed files with 228 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { testScenariosForV1API } from './oauth';

export const data = [...testScenariosForV1API];
174 changes: 174 additions & 0 deletions test/integrations/destinations/salesforce_oauth/dataDelivery/oauth.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
import { ProxyMetdata } from '../../../../../src/types';
import { ProxyV1TestData } from '../../../testTypes';
import { generateProxyV1Payload } from '../../../testUtils';

const commonHeadersForWrongToken = {
Authorization: 'Bearer expiredAccessToken',
'Content-Type': 'application/json',
};

const commonHeadersForRightToken = {
Authorization: 'Bearer correctAccessToken',
'Content-Type': 'application/json',
};
const params = { destination: 'salesforce_oauth' };

const users = [
{
Email: '[email protected]',
Company: 'itus.ru',
LastName: 'Danis',
FirstName: 'Archurav',
LeadSource: 'App Signup',
account_type__c: 'free_trial',
},
];

const statTags = {
retryable: {
destType: 'SALESFORCE_OAUTH',
destinationId: 'dummyDestinationId',
errorCategory: 'network',
errorType: 'retryable',
feature: 'dataDelivery',
implementation: 'native',
module: 'destination',
workspaceId: 'dummyWorkspaceId',
},
};

const commonRequestParametersWithWrongToken = {
headers: commonHeadersForWrongToken,
JSON: users[0],
params,
};

const commonRequestParametersWithRightToken = {
headers: commonHeadersForRightToken,
JSON: users[0],
params,
};

export const proxyMetdataWithSecretWithWrongAccessToken: ProxyMetdata = {
jobId: 1,
attemptNum: 1,
userId: 'dummyUserId',
sourceId: 'dummySourceId',
destinationId: 'dummyDestinationId',
workspaceId: 'dummyWorkspaceId',
secret: {
access_token: 'expiredAccessToken',
instanceUrl: 'https://rudderstack.my.salesforce_oauth.com',
},
destInfo: { authKey: 'dummyDestinationId' },
dontBatch: false,
};

export const proxyMetdataWithSecretWithRightAccessToken: ProxyMetdata = {
jobId: 1,
attemptNum: 1,
userId: 'dummyUserId',
sourceId: 'dummySourceId',
destinationId: 'dummyDestinationId',
workspaceId: 'dummyWorkspaceId',
secret: {
access_token: 'expiredRightToken',
instanceUrl: 'https://rudderstack.my.salesforce_oauth.com',
},
destInfo: { authKey: 'dummyDestinationId' },
dontBatch: false,
};

export const reqMetadataArrayWithWrongSecret = [proxyMetdataWithSecretWithWrongAccessToken];
export const reqMetadataArray = [proxyMetdataWithSecretWithRightAccessToken];

export const testScenariosForV1API: ProxyV1TestData[] = [
{
id: 'salesforce_v1_scenario_1',
name: 'salesforce_oauth',
description: '[Proxy v1 API] :: Test with expired access token scenario',
successCriteria:
'Should return 5XX with error category REFRESH_TOKEN and Session expired or invalid, INVALID_SESSION_ID',
scenario: 'Business',
feature: 'dataDelivery',
module: 'destination',
version: 'v1',
input: {
request: {
body: generateProxyV1Payload(
{
...commonRequestParametersWithWrongToken,
endpoint:
'https://rudderstack.my.salesforce_oauth.com/services/data/v50.0/sobjects/Lead/20',
},
reqMetadataArrayWithWrongSecret,
),
method: 'POST',
},
},
output: {
response: {
status: 500,
body: {
output: {
status: 500,
authErrorCategory: 'REFRESH_TOKEN',
message:
'Salesforce Request Failed - due to "INVALID_SESSION_ID", (Retryable) during Salesforce Response Handling',
response: [
{
error:
'[{"message":"Session expired or invalid","errorCode":"INVALID_SESSION_ID"}]',
metadata: proxyMetdataWithSecretWithWrongAccessToken,
statusCode: 500,
},
],
statTags: statTags.retryable,
},
},
},
},
},
{
id: 'salesforce_v1_scenario_2',
name: 'salesforce',
description:
'[Proxy v1 API] :: Test for a valid request - Lead creation with existing unchanged leadId and unchanged data',
successCriteria: 'Should return 200 with no error with destination response',
scenario: 'Business',
feature: 'dataDelivery',
module: 'destination',
version: 'v1',
input: {
request: {
body: generateProxyV1Payload(
{
...commonRequestParametersWithRightToken,
endpoint:
'https://rudderstack.my.salesforce.com/services/data/v50.0/sobjects/Lead/existing_unchanged_leadId',
},
reqMetadataArray,
),
method: 'POST',
},
},
output: {
response: {
status: 200,
body: {
output: {
status: 200,
message: 'Request for destination: salesforce Processed Successfully',
response: [
{
error: '{"statusText":"No Content"}',
metadata: proxyMetdataWithSecretWithRightAccessToken,
statusCode: 200,
},
],
},
},
},
},
},
];
51 changes: 51 additions & 0 deletions test/integrations/destinations/salesforce_oauth/network.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
const headerWithWrongAccessToken = {
Authorization: 'Bearer expiredAccessToken',
'Content-Type': 'application/json',
};

const headerWithRightAccessToken = {
Authorization: 'Bearer correctAccessToken',
'Content-Type': 'application/json',
};

const dataValue = {
Email: '[email protected]',
Company: 'itus.ru',
LastName: 'Danis',
FirstName: 'Archurav',
LeadSource: 'App Signup',
account_type__c: 'free_trial',
};

const businessMockData = [
{
description: 'Mock response from destination depicting an expired access token',
httpReq: {
method: 'post',
url: 'https://rudderstack.my.salesforce_oauth.com/services/data/v50.0/sobjects/Lead/20',
headers: headerWithWrongAccessToken,
data: dataValue,
params: { destination: 'salesforce_oauth' },
},
httpRes: {
data: [{ message: 'Session expired or invalid', errorCode: 'INVALID_SESSION_ID' }],
status: 401,
},
},
{
description:
'Mock response from destination depicting a valid lead request, with no changed data',
httpReq: {
method: 'post',
url: 'https://rudderstack.my.salesforce.com/services/data/v50.0/sobjects/Lead/existing_unchanged_leadId',
data: dataValue,
headers: headerWithRightAccessToken,
},
httpRes: {
data: { statusText: 'No Content' },
status: 204,
},
},
];

export const networkCallsData = [...businessMockData];

0 comments on commit 5dd5142

Please sign in to comment.