@asyncapi/nunjucks-filters
Version:
Library with Nunjucks filters for templates using AsyncAPI Generator
213 lines (191 loc) • 5.88 kB
JavaScript
const test = require('ava');
const { markdown2html, generateExample, getPayloadExamples, getHeadersExamples, oneLine, replaceServerVariablesWithValues } = require('./customFilters');
const Message = require('@asyncapi/parser/lib/models/message');
const ServerVariable = require('@asyncapi/parser/lib/models/server-variable');
const exampleName = 'example name';
const exampleSummary = 'example summary';
function messageExampleMock(firstType = 'payload', secondType = 'payload') {
return [
{
name: exampleName,
summary: exampleSummary,
[firstType]: { foo: 'bar' },
},
{
name: exampleName,
summary: exampleSummary,
[secondType]: { bar: 'foo' },
},
];
}
test('markdown2html returns valid html', t => {
const is = t.is;
const value = markdown2html('**test**');
const expected = '<p><strong>test</strong></p>\n';
is(value, expected);
});
test('generateExample returns valid example', t => {
const is = t.is;
const value = generateExample({ type: 'object', properties: { email: { type: 'string', format: 'email' } }, 'x-parser-schema-id': '<anonymous-schema-1>' });
const expected = '{\n "email": "user@example.com"\n}';
is(value, expected);
});
test('oneLine returns one liner string', t => {
const is = t.is;
const value = oneLine(`This is
multiline`);
const expected = 'This is multiline';
is(value, expected);
});
test('.getPayloadExamples() should return empty examples', t => {
const result = getPayloadExamples(
new Message({
examples: messageExampleMock('headers', 'headers'),
}),
);
t.is(result, undefined);
});
test('.getPayloadExamples() should return payload examples', t => {
const result = getPayloadExamples(
new Message({
examples: messageExampleMock('payload', 'payload'),
}),
);
t.deepEqual(result, messageExampleMock('example', 'example'));
});
test('.getPayloadExamples() should return examples from payload schema', t => {
const result = getPayloadExamples(
new Message({
payload: {
examples: [{ foo: 'bar' }, { bar: 'foo' }],
},
}),
);
t.deepEqual(result, [
{
example: { foo: 'bar' },
},
{
example: { bar: 'foo' },
},
]);
});
test('.getPayloadExamples() should return examples from payload schema - case when only headers examples are defined in `examples` field', t => {
const result = getPayloadExamples(
new Message({
payload: {
examples: [{ foo: 'bar' }, { bar: 'foo' }],
},
examples: messageExampleMock('headers', 'headers'),
}),
);
t.deepEqual(result, [
{
example: { foo: 'bar' },
},
{
example: { bar: 'foo' },
},
]);
});
test('.getPayloadExamples() should return examples for payload - case when at least one item in `examples` array has `payload` field with existing `payload.examples`', t => {
const result = getPayloadExamples(
new Message({
payload: {
examples: [{ foo: 'bar' }, { bar: 'foo' }],
},
examples: messageExampleMock('headers', 'payload'),
}),
);
t.deepEqual(result, [
{
name: exampleName,
summary: exampleSummary,
example: { bar: 'foo' },
},
]);
});
test('.getHeadersExamples() should return empty examples', t => {
const result = getHeadersExamples(
new Message({
examples: messageExampleMock('payload', 'payload'),
}),
);
t.is(result, undefined);
});
test('.getHeadersExamples() should return headers examples', t => {
const result = getHeadersExamples(
new Message({
examples: messageExampleMock('headers', 'headers'),
}),
);
t.deepEqual(result, messageExampleMock('example', 'example'));
});
test('.getHeadersExamples() should return examples from headers schema', t => {
const result = getHeadersExamples(
new Message({
headers: {
examples: [{ foo: 'bar' }, { bar: 'foo' }],
},
}),
);
t.deepEqual(result, [
{
example: { foo: 'bar' },
},
{
example: { bar: 'foo' },
},
]);
});
test('.getHeadersExamples() should return examples from headers schema - case when only payload examples are defined in `examples` field', t => {
const result = getHeadersExamples(
new Message({
headers: {
examples: [{ foo: 'bar' }, { bar: 'foo' }],
},
examples: messageExampleMock('payload', 'payload'),
}),
);
t.deepEqual(result, [
{
example: { foo: 'bar' },
},
{
example: { bar: 'foo' },
},
]);
});
test('.getHeadersExamples() should return examples for headers - case when at least one item in `examples` array has `headers` field with existing `headers.examples`', t => {
const result = getHeadersExamples(
new Message({
headers: {
examples: [{ foo: 'bar' }, { bar: 'foo' }],
},
examples: messageExampleMock('payload', 'headers'),
}),
);
t.deepEqual(result, [
{
name: exampleName,
summary: exampleSummary,
example: { bar: 'foo' },
},
]);
});
test('.replaceServerVariablesWithValues() should replace placeholder with default value', t => {
const is = t.is;
const inputUrl = 'localhost:{port}';
const serverVariables = { port: new ServerVariable({ default: '9092', enum: ['8080','8883'] }) };
const expected = 'localhost:9092';
const value = replaceServerVariablesWithValues(inputUrl, serverVariables);
is(value, expected);
});
test('.replaceServerVariablesWithValues() should replace placeholder with first enum value when no default is specified', t => {
const is = t.is;
const inputUrl = 'localhost:{port}';
const serverVariables = { port: new ServerVariable({ enum: ['8080','8883'] }) };
const expected = 'localhost:8080';
const value = replaceServerVariablesWithValues(inputUrl, serverVariables);
is(value, expected);
});