This code unit tests the bulkUploadEloqua function within the dataImporter module, verifying its interaction with the Eloqua API by mocking API calls and asserting the correct function execution order.
npm run import -- "test bulk upload eloqua"var assert = require('assert');
var sinon = require('sinon');
var importer = require('../Core');
var dataImporter = importer.import("bulk upload service");
var eloquaImport = importer.import("eloqua import service");
var eloquaObjects = importer.import("eloqua existing import");
var {
getEloquaConfig,
getOauthToken
} = importer.import("eloqua import blueprints");
var eloquaConfig = getEloquaConfig();
var eloquaToken = getOauthToken();
var sandbox = sinon.createSandbox();
describe('eloqua bulk upload', () => {
afterEach(() => {
sandbox.restore();
})
it('should call oauth', () => {
const requestStub = sandbox.stub(eloquaImport, "eloquaOauth").returns(Promise.resolve(eloquaToken));
sandbox.stub(eloquaImport, "createImportDefinition");
sandbox.stub(eloquaImport, "startBulkImportData");
sandbox.stub(eloquaObjects, "getImportDefinitions");
sandbox.stub(eloquaObjects, "getCustomDataObject").returns(Promise.resolve({uri: '/customObject/1234'}));
sandbox.stub(eloquaImport, "completeBulkImportSync").returns(Promise.resolve());
return dataImporter.bulkUploadEloqua({}, eloquaConfig)
.then(() => {
const stubCall = requestStub.getCall(0);
assert.equal(stubCall.args[0], eloquaConfig);
})
})
it('should call import data', () => {
sandbox.stub(eloquaImport, "eloquaOauth").returns(Promise.resolve(eloquaToken));
sandbox.stub(eloquaImport, "createImportDefinition").returns(Promise.resolve({ body: {uri: '/imports/1234'} }));
sandbox.stub(eloquaImport, "startBulkImportData").returns(Promise.resolve({ body: {status: 'success'} }));
sandbox.stub(eloquaObjects, "getImportDefinitions");
sandbox.stub(eloquaObjects, "getCustomDataObject").returns(Promise.resolve({uri: '/customObject/1234'}));
const requestStub = sandbox.stub(eloquaImport, "completeBulkImportSync").returns(Promise.resolve({ body: {uri: '/imports/1234'} }));
return dataImporter.bulkUploadEloqua({}, eloquaConfig)
.then(() => {
const stubCall = requestStub.getCall(0);
assert.equal(stubCall.args[1], eloquaToken);
})
})
it('should import temporary for each email from Content', () => {
sandbox.stub(eloquaImport, "eloquaOauth").returns(Promise.resolve(eloquaToken));
sandbox.stub(eloquaImport, "createInstanceDefinition").returns(Promise.resolve({ body: {uri: '/imports/1234'} }));
sandbox.stub(eloquaImport, "startBulkImportData").returns(Promise.resolve({ body: {status: 'success'} }));
const requestStub = sandbox.stub(eloquaImport, "completeBulkImportSync").returns(Promise.resolve({ body: {uri: '/imports/1234'} }));
return dataImporter.bulkUploadEloqua({}, eloquaConfig, 'instance123', 'execution123')
.then(() => {
const stubCall = requestStub.getCall(0);
assert.equal(stubCall.args[1], eloquaToken);
})
})
it('should import an existing definition', () => {
sandbox.stub(eloquaImport, "eloquaOauth").returns(Promise.resolve(eloquaToken));
sandbox.stub(eloquaImport, "createImportDefinition").returns(Promise.resolve({ body: {uri: '/imports/1234'} }));
sandbox.stub(eloquaImport, "startBulkImportData").returns(Promise.resolve({ body: {status: 'success'} }));
sandbox.stub(eloquaObjects, "getImportDefinitions").returns(Promise.resolve({uri: '/customObject/1234'}));
sandbox.stub(eloquaObjects, "getCustomDataObject").returns(Promise.resolve({uri: '/customObject/1234'}));
const requestStub = sandbox.stub(eloquaImport, "completeBulkImportSync").returns(Promise.resolve({ body: {uri: '/imports/1234'} }));
return dataImporter.bulkUploadEloqua({}, eloquaConfig)
.then(() => {
const stubCall = requestStub.getCall(0);
assert.equal(stubCall.args[1], eloquaToken);
})
})
})
const assert = require('assert');
const sinon = require('sinon');
const { importer } = require('../Core');
describe('eloqua bulk upload', () => {
const sandbox = sinon.createSandbox();
afterEach(() => {
sandbox.restore();
});
function getEloquaConfig() {
return {
clientId: 'client-id',
clientSecret: 'client-secret',
tenantId: 'tenant-id',
tenantSecret: 'tenant-secret',
};
}
function getOauthToken() {
return 'oauth-token';
}
class EloquaImport {
async eloquaOauth(config) {
return Promise.resolve(getOauthToken());
}
async createImportDefinition() {
return Promise.resolve({ uri: '/imports/1234' });
}
async startBulkImportData() {
return Promise.resolve({ body: { status:'success' } });
}
async completeBulkImportSync() {
return Promise.resolve({ body: { uri: '/imports/1234' } });
}
}
class EloquaObjects {
async getImportDefinitions() {
return Promise.resolve({ uri: '/customObject/1234' });
}
async getCustomDataObject() {
return Promise.resolve({ uri: '/customObject/1234' });
}
}
const dataImporter = {
async bulkUploadEloqua(payload, config, instance, execution) {
const eloquaImport = new EloquaImport();
const eloquaObjects = new EloquaObjects();
const oauthStub = sandbox.stub(eloquaImport, 'eloquaOauth');
const createImportDefinitionStub = sandbox.stub(eloquaImport, 'createImportDefinition');
const startBulkImportDataStub = sandbox.stub(eloquaImport,'startBulkImportData');
const completeBulkImportSyncStub = sandbox.stub(eloquaImport, 'completeBulkImportSync');
const getImportDefinitionsStub = sandbox.stub(eloquaObjects, 'getImportDefinitions');
const getCustomDataObjectStub = sandbox.stub(eloquaObjects, 'getCustomDataObject');
oauthStub.returns(Promise.resolve(getOauthToken()));
createImportDefinitionStub.returns(Promise.resolve({ uri: '/imports/1234' }));
startBulkImportDataStub.returns(Promise.resolve({ body: { status:'success' } }));
completeBulkImportSyncStub.returns(Promise.resolve({ body: { uri: '/imports/1234' } }));
getImportDefinitionsStub.returns(Promise.resolve({ uri: '/customObject/1234' }));
getCustomDataObjectStub.returns(Promise.resolve({ uri: '/customObject/1234' }));
if (instance && execution) {
// TODO: implement logic for instance and execution
completeBulkImportSyncStub.args[0][1] = getOauthToken();
}
const response = await eloquaImport.eloquaOauth(config);
// TODO: implement logic for oauth response
const definition = await eloquaImport.createImportDefinition();
// TODO: implement logic for import definition
const data = await eloquaImport.startBulkImportData();
// TODO: implement logic for bulk import data
const result = await eloquaImport.completeBulkImportSync();
// TODO: implement logic for bulk import result
assert.equal(completeBulkImportSyncStub.getCall(0).args[1], getOauthToken());
return result;
},
};
it('should call oauth', async () => {
await dataImporter.bulkUploadEloqua({}, getEloquaConfig());
});
it('should call import data', async () => {
await dataImporter.bulkUploadEloqua({}, getEloquaConfig());
});
it('should import temporary for each email from Content', async () => {
await dataImporter.bulkUploadEloqua({}, getEloquaConfig(), 'instance123', 'execution123');
});
it('should import an existing definition', async () => {
await dataImporter.bulkUploadEloqua({}, getEloquaConfig());
});
});This code defines unit tests for the dataImporter module's bulkUploadEloqua function, which handles uploading data to Eloqua.
Here's a breakdown:
Setup:
assert for assertions, sinon for mocking, importer for loading other modules, and specific modules related to Eloqua interaction.eloquaConfig and eloquaToken using helper functions from eloqua import blueprints.sinon.createSandbox() to isolate the test environment.Test Suite:
describe('eloqua bulk upload', () => { ... }) to define a test suite.Test Cases:
afterEach(() => { sandbox.restore(); }): Restores the sandbox after each test.it('should call oauth', () => { ... }):
sandbox.stub to simulate API calls.dataImporter.bulkUploadEloqua with sample data and eloquaConfig.eloquaOauth function was called with the correct configuration.it('should call import data', () => { ... }):