@rudderstack/integrations-lib
Version:
121 lines • 16 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = __importDefault(require("./index"));
const axios_client_1 = require("../../network/clients/axios_client");
const utils_1 = require("./utils");
jest.mock('../../network/clients/axios_client', () => ({
AxiosClient: jest.fn().mockImplementation(() => ({
get: jest.fn(),
post: jest.fn(),
})),
}));
describe('CustomerIOSegment', () => {
let customerIOSegment;
let mockClient;
const mockAppApiKey = 'test-api-key';
beforeEach(() => {
jest.clearAllMocks();
mockClient = new axios_client_1.AxiosClient();
customerIOSegment = new index_1.default({ appApiKey: mockAppApiKey }, mockClient);
});
describe('constructor', () => {
it('should create instance with valid auth object', () => {
expect(customerIOSegment).toBeInstanceOf(index_1.default);
expect(customerIOSegment.getAppApiKey()).toBe(mockAppApiKey);
});
it('should throw error if appApiKey is missing', () => {
expect(() => new index_1.default({})).toThrow('appApiKey is required and must be a string');
});
it('should throw error if appApiKey is not a string', () => {
expect(() => new index_1.default({ appApiKey: 123 })).toThrow('appApiKey is required and must be a string');
});
});
describe('getAppApiKey', () => {
it('should return the app api key', () => {
expect(customerIOSegment.getAppApiKey()).toBe(mockAppApiKey);
});
});
describe('getSegments', () => {
const mockSuccessResponse = {
type: 'success',
responseBody: {
segments: [
{
id: 1,
name: 'Test Segment',
description: 'Test Description',
},
],
},
statusCode: 200,
headers: {},
};
const mockErrorResponse = {
type: 'client-error',
message: 'Not Found',
statusCode: 404,
};
it('should fetch segments successfully', async () => {
mockClient.get.mockResolvedValue(mockSuccessResponse);
const result = await customerIOSegment.getSegments();
expect(mockClient.get).toHaveBeenCalledWith(index_1.default.url, {
headers: {
Accept: 'application/json',
Authorization: `Bearer ${mockAppApiKey}`,
},
});
expect(result).toEqual(mockSuccessResponse.responseBody);
});
it('should throw RestError when fetching segments fails', async () => {
mockClient.get.mockResolvedValue(mockErrorResponse);
await expect(customerIOSegment.getSegments()).rejects.toThrow(utils_1.RestError);
await expect(customerIOSegment.getSegments()).rejects.toThrow('Not Found');
});
});
describe('createSegment', () => {
const mockSegmentBody = {
segment: {
name: 'Test Segment',
description: 'Test Description',
},
};
const mockSuccessResponse = {
type: 'success',
responseBody: {
segment: {
id: 1,
name: 'Test Segment',
description: 'Test Description',
state: 'active',
},
},
statusCode: 201,
headers: {},
};
const mockErrorResponse = {
type: 'client-error',
message: 'Bad Request',
statusCode: 400,
};
it('should create segment successfully', async () => {
mockClient.post.mockResolvedValue(mockSuccessResponse);
const result = await customerIOSegment.createSegment(mockSegmentBody);
expect(mockClient.post).toHaveBeenCalledWith(index_1.default.url, mockSegmentBody, {
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${mockAppApiKey}`,
},
});
expect(result).toEqual(mockSuccessResponse.responseBody);
});
it('should throw RestError when creating segment fails', async () => {
mockClient.post.mockResolvedValue(mockErrorResponse);
await expect(customerIOSegment.createSegment(mockSegmentBody)).rejects.toThrow(utils_1.RestError);
await expect(customerIOSegment.createSegment(mockSegmentBody)).rejects.toThrow('Bad Request');
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZGtzL2N1c3RvbWVyaW9fYXVkaWVuY2UvaW5kZXgudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUF3QztBQUN4QyxxRUFBaUU7QUFDakUsbUNBQW9DO0FBSXBDLElBQUksQ0FBQyxJQUFJLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDL0MsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtLQUNoQixDQUFDLENBQUM7Q0FDSixDQUFDLENBQUMsQ0FBQztBQUVKLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7SUFDakMsSUFBSSxpQkFBb0MsQ0FBQztJQUN6QyxJQUFJLFVBQW9DLENBQUM7SUFDekMsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDO0lBRXJDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsVUFBVSxHQUFHLElBQUksMEJBQVcsRUFBOEIsQ0FBQztRQUMzRCxpQkFBaUIsR0FBRyxJQUFJLGVBQWlCLENBQUMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDdEYsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUMzQixFQUFFLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1lBQ3ZELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxlQUFpQixDQUFDLENBQUM7WUFDNUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxD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QU8sQ0FBQyxPQUFPLENBQUMsaUJBQVMsQ0FBQyxDQUFDO1lBQzFGLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEN1c3RvbWVySU9TZWdtZW50IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgQXhpb3NDbGllbnQgfSBmcm9tICcuLi8uLi9uZXR3b3JrL2NsaWVudHMvYXhpb3NfY2xpZW50JztcbmltcG9ydCB7IFJlc3RFcnJvciB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgR2V0U2VnbWVudHNSZXNwb25zZSwgQ3JlYXRlU2VnbWVudFJlc3BvbnNlIH0gZnJvbSAnLi90eXBlJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbmV0d29yayc7XG5cbmplc3QubW9jaygnLi4vLi4vbmV0d29yay9jbGllbnRzL2F4aW9zX2NsaWVudCcsICgpID0+ICh7XG4gIEF4aW9zQ2xpZW50OiBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgZ2V0OiBqZXN0LmZuKCksXG4gICAgcG9zdDogamVzdC5mbigpLFxuICB9KSksXG59KSk7XG5cbmRlc2NyaWJlKCdDdXN0b21lcklPU2VnbWVudCcsICgpID0+IHtcbiAgbGV0IGN1c3RvbWVySU9TZWdtZW50OiBDdXN0b21lcklPU2VnbWVudDtcbiAgbGV0IG1vY2tDbGllbnQ6IGplc3QuTW9ja2VkPEF4aW9zQ2xpZW50PjtcbiAgY29uc3QgbW9ja0FwcEFwaUtleSA9ICd0ZXN0LWFwaS1rZXknO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICAgIG1vY2tDbGllbnQgPSBuZXcgQXhpb3NDbGllbnQoKSBhcyBqZXN0Lk1vY2tlZDxBeGlvc0NsaWVudD47XG4gICAgY3VzdG9tZXJJT1NlZ21lbnQgPSBuZXcgQ3VzdG9tZXJJT1NlZ21lbnQoeyBhcHBBcGlLZXk6IG1vY2tBcHBBcGlLZXkgfSwgbW9ja0NsaWVudCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb25zdHJ1Y3RvcicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBpbnN0YW5jZSB3aXRoIHZhbGlkIGF1dGggb2JqZWN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGN1c3RvbWVySU9TZWdtZW50KS50b0JlSW5zdGFuY2VPZihDdXN0b21lcklPU2VnbWVudCk7XG4gICAgICBleHBlY3QoY3VzdG9tZXJJT1NlZ21lbnQuZ2V0QXBwQXBpS2V5KCkpLnRvQmUobW9ja0FwcEFwaUtleSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIGFwcEFwaUtleSBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IG5ldyBDdXN0b21lcklPU2VnbWVudCh7fSBhcyBhbnkpKS50b1Rocm93KFxuICAgICAgICAnYXBwQXBpS2V5IGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgc3RyaW5nJyxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIGFwcEFwaUtleSBpcyBub3QgYSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4gbmV3IEN1c3RvbWVySU9TZWdtZW50KHsgYXBwQXBpS2V5OiAxMjMgfSBhcyBhbnkpKS50b1Rocm93KFxuICAgICAgICAnYXBwQXBpS2V5IGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgc3RyaW5nJyxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRBcHBBcGlLZXknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGFwcCBhcGkga2V5JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGN1c3RvbWVySU9TZWdtZW50LmdldEFwcEFwaUtleSgpKS50b0JlKG1vY2tBcHBBcGlLZXkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0U2VnbWVudHMnLCAoKSA9PiB7XG4gICAgY29uc3QgbW9ja1N1Y2Nlc3NSZXNwb25zZTogQXBpUmVzcG9uc2U8R2V0U2VnbWVudHNSZXNwb25zZT4gPSB7XG4gICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICByZXNwb25zZUJvZHk6IHtcbiAgICAgICAgc2VnbWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogMSxcbiAgICAgICAgICAgIG5hbWU6ICdUZXN0IFNlZ21lbnQnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUZXN0IERlc2NyaXB0aW9uJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgIH07XG5cbiAgICBjb25zdCBtb2NrRXJyb3JSZXNwb25zZTogQXBpUmVzcG9uc2U8YW55PiA9IHtcbiAgICAgIHR5cGU6ICdjbGllbnQtZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ05vdCBGb3VuZCcsXG4gICAgICBzdGF0dXNDb2RlOiA0MDQsXG4gICAgfTtcblxuICAgIGl0KCdzaG91bGQgZmV0Y2ggc2VnbWVudHMgc3VjY2Vzc2Z1bGx5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9ja0NsaWVudC5nZXQubW9ja1Jlc29sdmVkVmFsdWUobW9ja1N1Y2Nlc3NSZXNwb25zZSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGN1c3RvbWVySU9TZWdtZW50LmdldFNlZ21lbnRzKCk7XG5cbiAgICAgIGV4cGVjdChtb2NrQ2xpZW50LmdldCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoQ3VzdG9tZXJJT1NlZ21lbnQudXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7bW9ja0FwcEFwaUtleX1gLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tTdWNjZXNzUmVzcG9uc2UucmVzcG9uc2VCb2R5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgUmVzdEVycm9yIHdoZW4gZmV0Y2hpbmcgc2VnbWVudHMgZmFpbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrQ2xpZW50LmdldC5tb2NrUmVzb2x2ZWRWYWx1ZShtb2NrRXJyb3JSZXNwb25zZSk7XG5cbiAgICAgIGF3YWl0IGV4cGVjdChjdXN0b21lcklPU2VnbWVudC5nZXRTZWdtZW50cygpKS5yZWplY3RzLnRvVGhyb3coUmVzdEVycm9yKTtcbiAgICAgIGF3YWl0IGV4cGVjdChjdXN0b21lcklPU2VnbWVudC5nZXRTZWdtZW50cygpKS5yZWplY3RzLnRvVGhyb3coJ05vdCBGb3VuZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlU2VnbWVudCcsICgpID0+IHtcbiAgICBjb25zdCBtb2NrU2VnbWVudEJvZHkgPSB7XG4gICAgICBzZWdtZW50OiB7XG4gICAgICAgIG5hbWU6ICdUZXN0IFNlZ21lbnQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1Rlc3QgRGVzY3JpcHRpb24nLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgbW9ja1N1Y2Nlc3NSZXNwb25zZTogQXBpUmVzcG9uc2U8Q3JlYXRlU2VnbWVudFJlc3BvbnNlPiA9IHtcbiAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIHJlc3BvbnNlQm9keToge1xuICAgICAgICBzZWdtZW50OiB7XG4gICAgICAgICAgaWQ6IDEsXG4gICAgICAgICAgbmFtZTogJ1Rlc3QgU2VnbWVudCcsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUZXN0IERlc2NyaXB0aW9uJyxcbiAgICAgICAgICBzdGF0ZTogJ2FjdGl2ZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc3RhdHVzQ29kZTogMjAxLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgfTtcblxuICAgIGNvbnN0IG1vY2tFcnJvclJlc3BvbnNlOiBBcGlSZXNwb25zZTxhbnk+ID0ge1xuICAgICAgdHlwZTogJ2NsaWVudC1lcnJvcicsXG4gICAgICBtZXNzYWdlOiAnQmFkIFJlcXVlc3QnLFxuICAgICAgc3RhdHVzQ29kZTogNDAwLFxuICAgIH07XG5cbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBzZWdtZW50IHN1Y2Nlc3NmdWxseScsIGFzeW5jICgpID0+IHtcbiAgICAgIG1vY2tDbGllbnQucG9zdC5tb2NrUmVzb2x2ZWRWYWx1ZShtb2NrU3VjY2Vzc1Jlc3BvbnNlKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3VzdG9tZXJJT1NlZ21lbnQuY3JlYXRlU2VnbWVudChtb2NrU2VnbWVudEJvZHkpO1xuXG4gICAgICBleHBlY3QobW9ja0NsaWVudC5wb3N0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChDdXN0b21lcklPU2VnbWVudC51cmwsIG1vY2tTZWdtZW50Qm9keSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7bW9ja0FwcEFwaUtleX1gLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tTdWNjZXNzUmVzcG9uc2UucmVzcG9uc2VCb2R5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgUmVzdEVycm9yIHdoZW4gY3JlYXRpbmcgc2VnbWVudCBmYWlscycsIGFzeW5jICgpID0+IHtcbiAgICAgIG1vY2tDbGllbnQucG9zdC5tb2NrUmVzb2x2ZWRWYWx1ZShtb2NrRXJyb3JSZXNwb25zZSk7XG5cbiAgICAgIGF3YWl0IGV4cGVjdChjdXN0b21lcklPU2VnbWVudC5jcmVhdGVTZWdtZW50KG1vY2tTZWdtZW50Qm9keSkpLnJlamVjdHMudG9UaHJvdyhSZXN0RXJyb3IpO1xuICAgICAgYXdhaXQgZXhwZWN0KGN1c3RvbWVySU9TZWdtZW50LmNyZWF0ZVNlZ21lbnQobW9ja1NlZ21lbnRCb2R5KSkucmVqZWN0cy50b1Rocm93KCdCYWQgUmVxdWVzdCcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19