@thoughtspot/visual-embed-sdk
Version:
ThoughtSpot Embed SDK
190 lines • 8.48 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("./utils");
const errors_1 = require("../../errors");
const types_1 = require("../../types");
const utils_2 = require("../../utils");
describe('hostEventClient utils', () => {
// =========================
// UpdateFilters Validation
// =========================
describe('isValidUpdateFiltersPayload', () => {
it('returns false for undefined', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)(undefined)).toBe(false);
});
it('returns false for empty payload', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({})).toBe(false);
});
it('returns true for valid filter with column', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({
filter: { column: 'region', oper: 'EQ', values: ['North'] },
})).toBe(true);
});
it('returns true for valid filter with columnName', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({
filter: { columnName: 'region', oper: 'EQ', values: ['North'] },
})).toBe(true);
});
it('returns true for filter with operator instead of oper', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({
filter: { column: 'region', operator: 'EQ', values: ['North'] },
})).toBe(true);
});
it('returns true for valid filters array', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({
filters: [
{ column: 'x', oper: 'IN', values: ['a', 'b'] },
{ column: 'y', oper: 'EQ', values: ['c'] },
],
})).toBe(true);
});
it('returns true for valid filters array with columnName', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({
filters: [
{ columnName: 'x', oper: 'IN', values: ['a', 'b'] },
{ columnName: 'y', oper: 'EQ', values: ['c'] },
],
})).toBe(true);
});
it('returns false if one filter in filters array is invalid', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({
filters: [
{ column: 'x', oper: 'EQ', values: ['a'] },
{ column: 'y', values: ['b'] }, // invalid
],
})).toBe(false);
});
it('returns false for filter with missing column/columnName', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({
filter: { oper: 'EQ', values: ['a'] },
})).toBe(false);
});
it('returns false for filter with missing operator', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({
filter: { column: 'x', values: ['a'] },
})).toBe(false);
});
it('returns false for filter with non-array values', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({
filter: { column: 'x', oper: 'EQ', values: 'a' },
})).toBe(false);
});
it('returns false for filter with non-string type', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({
filter: { column: 'x', oper: 'EQ', values: ['a'], type: 123 },
})).toBe(false);
});
it('returns true for filter with valid string type', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({
filter: { column: 'x', oper: 'EQ', values: ['a'], type: 'STRING' },
})).toBe(true);
});
it('returns false for empty filters array', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({ filters: [] })).toBe(false);
});
it('returns false if filters is not an array', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({
filters: 'invalid',
})).toBe(false);
});
it('returns true if filter is valid even when filters is invalid', () => {
expect((0, utils_1.isValidUpdateFiltersPayload)({
filter: { column: 'x', oper: 'EQ', values: ['a'] },
filters: [{ column: 'y' }], // invalid
})).toBe(true);
});
});
// =========================
// DrillDown Validation
// =========================
describe('isValidDrillDownPayload', () => {
it('returns false for undefined', () => {
expect((0, utils_1.isValidDrillDownPayload)(undefined)).toBe(false);
});
it('returns false for empty payload', () => {
expect((0, utils_1.isValidDrillDownPayload)({})).toBe(false);
});
it('returns false for empty points object', () => {
expect((0, utils_1.isValidDrillDownPayload)({ points: {} })).toBe(false);
});
it('returns false for non-object points', () => {
expect((0, utils_1.isValidDrillDownPayload)({ points: 'invalid' })).toBe(false);
});
it('returns true for clickedPoint', () => {
expect((0, utils_1.isValidDrillDownPayload)({
points: { clickedPoint: 'point-1' },
})).toBe(true);
});
it('returns true for selectedPoints', () => {
expect((0, utils_1.isValidDrillDownPayload)({
points: { selectedPoints: ['p1', 'p2'] },
})).toBe(true);
});
it('returns true for both clickedPoint and selectedPoints', () => {
expect((0, utils_1.isValidDrillDownPayload)({
points: { clickedPoint: 'p1', selectedPoints: ['p2'] },
})).toBe(true);
});
it('returns false for selectedPoints empty array', () => {
expect((0, utils_1.isValidDrillDownPayload)({
points: { selectedPoints: [] },
})).toBe(false);
});
it('returns false if clickedPoint is null', () => {
expect((0, utils_1.isValidDrillDownPayload)({
points: { clickedPoint: null },
})).toBe(false);
});
it('returns false if selectedPoints is not an array', () => {
expect((0, utils_1.isValidDrillDownPayload)({
points: { selectedPoints: 'invalid' },
})).toBe(false);
});
it('returns false if both clickedPoint and selectedPoints are invalid', () => {
expect((0, utils_1.isValidDrillDownPayload)({
points: { clickedPoint: null, selectedPoints: [] },
})).toBe(false);
});
});
// =========================
// Error Handling
// =========================
describe('createValidationError', () => {
it('throws with message', () => {
expect(() => (0, utils_1.createValidationError)('test error')).toThrow('test error');
});
it('throws Error instance with metadata', () => {
try {
(0, utils_1.createValidationError)('custom msg');
}
catch (err) {
expect(err).toBeInstanceOf(Error);
expect(err.isValidationError).toBe(true);
expect(err.embedErrorDetails).toBeDefined();
expect(err.embedErrorDetails).toMatchObject({
type: types_1.EmbedEvent.Error,
data: {
errorType: 'VALIDATION_ERROR',
message: 'custom msg',
code: 'HOST_EVENT_VALIDATION',
error: 'custom msg',
},
status: utils_2.embedEventStatus.END,
});
}
});
});
describe('throwUpdateFiltersValidationError', () => {
it('throws with UPDATEFILTERS_INVALID_PAYLOAD message', () => {
expect(() => (0, utils_1.throwUpdateFiltersValidationError)())
.toThrow(errors_1.ERROR_MESSAGE.UPDATEFILTERS_INVALID_PAYLOAD);
});
});
describe('throwDrillDownValidationError', () => {
it('throws with DRILLDOWN_INVALID_PAYLOAD message', () => {
expect(() => (0, utils_1.throwDrillDownValidationError)())
.toThrow(errors_1.ERROR_MESSAGE.DRILLDOWN_INVALID_PAYLOAD);
});
});
});
//# sourceMappingURL=utils.spec.js.map