rerumaccusamus
Version:
The meta-framework suite designed from scratch for frontend-focused modern web development.
134 lines (113 loc) • 3.67 kB
text/typescript
import assert from 'assert';
import { baseMatch } from '../src/match';
import { match, isHandler, isSchemaHandler, Any } from '../src';
describe('match', () => {
it('should work well', async () => {
const foo = baseMatch(
{
request: { data: { foo: Number } },
response: { foo: String },
},
input => ({ foo: String(input.data.foo) }),
);
const result = await foo({ data: { foo: 0 } });
expect(result.type).toBe('HandleSuccess');
assert(result.type === 'HandleSuccess');
expect(result.value.foo).toBe('0');
});
it('should support all file in request', async () => {
const foo = baseMatch(
{
request: {
data: { foo: Number },
params: { id: String },
query: { key: String },
headers: { 'Context-Length': String },
cookies: { sid: String },
},
response: { foo: String },
},
input => ({ foo: String(input.data.foo) }),
);
const result = await foo({
data: { foo: 0 },
params: { id: 'foo' },
query: { key: 'foo' },
headers: { 'Context-Length': '100' },
cookies: { sid: 'sid0' },
});
expect(result.type).toBe('HandleSuccess');
assert(result.type === 'HandleSuccess');
expect(result.value.foo).toBe('0');
});
it('should support body,formData,formUrlencoded when data is not exist', () => {
const foo = baseMatch(
{
request: {},
response: Any,
},
input => input,
);
foo({ body: 'test' });
foo({ formData: { foo: 'test' } as any });
foo({ formUrlencoded: { foo: 'test' } });
});
it('should fail when input does not match schema', async () => {
const foo = baseMatch(
{
request: { data: { foo: Number } },
response: { foo: String },
},
input => ({ foo: String(input.data.foo) }),
);
const result = await foo({ data: { foo: true as any } });
expect(result.type).toBe('InputValidationError');
assert(result.type === 'InputValidationError');
expect(result.message).toBe('path: ["data","foo"]\ntrue is not a number');
});
it('should fail when output does not match schema', async () => {
const foo = baseMatch(
{
request: { data: { foo: Number } },
response: { foo: String },
},
input => ({ foo: input.data.foo } as any),
);
const result = await foo({ data: { foo: 0 } });
expect(result.type).toBe('OutputValidationError');
assert(result.type === 'OutputValidationError');
expect(result.message).toBe('path: ["foo"]\n0 is not a string');
});
it('should type nest', async () => {
const getFoo = (input: { foo: string }) => input;
const foo = match(
{
request: { data: { foo: Number } },
response: { foo: String },
},
input => ({ foo: input.data.foo } as any),
);
const result = await foo({ data: { foo: 0 } });
getFoo(result);
});
it('isSchemaHandler', () => {
const foo = baseMatch(
{
request: { data: { foo: Number } },
response: { foo: String },
},
input => ({ foo: String(input.data.foo) }),
);
expect(isSchemaHandler(foo)).toBeTruthy();
expect(isSchemaHandler({})).toBeFalsy();
expect(isSchemaHandler('test')).toBeFalsy();
expect(isSchemaHandler(null)).toBeFalsy();
});
it('isHandler', () => {
// eslint-disable-next-line @typescript-eslint/no-empty-function
expect(isHandler(() => {})).toBeTruthy();
expect(isHandler({})).toBeFalsy();
expect(isHandler('test')).toBeFalsy();
expect(isHandler(null)).toBeFalsy();
});
});