0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-01-06 20:40:08 -05:00
logto/packages/toolkit/connector-kit/src/index.test.ts
2024-03-28 12:07:54 +08:00

94 lines
3.1 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { z } from 'zod';
import {
parseJson,
parseJsonObject,
replaceSendMessageHandlebars,
validateConfig,
} from './index.js';
describe('validateConfig', () => {
it('valid config', () => {
const testingTypeGuard = z.unknown();
const testingConfig = { foo: 'foo', bar: 1, baz: true };
expect(() => {
validateConfig(testingConfig, testingTypeGuard);
}).not.toThrow();
});
it('invalid config', () => {
const testingTypeGuard = z.record(z.string());
const testingConfig = { foo: 'foo', bar: 1 };
expect(() => {
validateConfig(testingConfig, testingTypeGuard);
}).toThrow();
});
});
describe('parseJson', () => {
it('should return parsed result', () => {
const literalContent = 'foo';
expect(parseJson(JSON.stringify(literalContent))).toEqual(literalContent);
const objectContent = { foo: 'foo', bar: 1, baz: true, qux: [1, '2', null] };
expect(parseJson(JSON.stringify(objectContent))).toEqual(objectContent);
});
it('throw error when parsing invalid Json string', () => {
expect(() => parseJson('[1,2,3,"4",]')).toThrow();
});
});
describe('parseJsonObject', () => {
it('should return parsed object', () => {
const objectContent = { foo: 'foo', bar: 1, baz: true, qux: [1, '2', null] };
expect(parseJsonObject(JSON.stringify(objectContent))).toEqual(objectContent);
});
it('throw error when parsing non-object result', () => {
expect(() => parseJsonObject(JSON.stringify('foo'))).toThrow();
});
});
describe('replaceSendMessageHandlebars', () => {
it('should replace handlebars with payload', () => {
const template = 'Your verification code is {{code}}';
const payload = { code: '123456' };
expect(replaceSendMessageHandlebars(template, payload)).toEqual(
'Your verification code is 123456'
);
});
it('should not replace handlebars if payload does not contain the key', () => {
const template = 'Your verification code is {{code}}';
const payload = {};
expect(replaceSendMessageHandlebars(template, payload)).toEqual(
'Your verification code is {{code}}'
);
});
it('should replace all handlebars even they are not in the predefined list for payload', () => {
const template = 'Your verification code is {{code}} and {{foo}}';
const payload = { code: '123456', foo: 'bar' };
expect(replaceSendMessageHandlebars(template, payload)).toEqual(
'Your verification code is 123456 and bar'
);
});
it('should ignore handlebars that are not in the payload', () => {
const template = 'Your verification code is {{code}} and {{foo}}';
const payload = { code: '123456' };
expect(replaceSendMessageHandlebars(template, payload)).toEqual(
'Your verification code is 123456 and {{foo}}'
);
});
it('should replace handlebars that have extra spaces with payload', () => {
const template = 'Your verification code is {{ code }}';
const payload = { code: '123456' };
expect(replaceSendMessageHandlebars(template, payload)).toEqual(
'Your verification code is 123456'
);
});
});