Files
api-testgen-cli/templates/jest/api.test.js.j2

102 lines
3.4 KiB
Django/Jinja

/**
* Generated Jest tests for {{ api_title }} API v{{ api_version }}
*
* This file was auto-generated by API TestGen.
*/
const request = require('supertest');
const BASE_URL = process.env.MOCK_SERVER_URL || '{{ mock_server_url }}';
{% if security_schemes %}
{% for scheme_name, scheme in security_schemes.items() %}
{% if scheme.type == "apiKey" %}
const get{{ scheme_name|capitalize }}Headers = () => ({
"{{ scheme.name }}": process.env.API_KEY || 'your-api-key',
});
{% elif scheme.type == "http" and scheme.scheme == "bearer" %}
const getBearerHeaders = () => ({
Authorization: `Bearer ${process.env.TOKEN || 'your-token'}`,
});
{% elif scheme.type == "http" and scheme.scheme == "basic" %}
const getBasicHeaders = () => {
const credentials = Buffer.from(`${process.env.USERNAME || 'username'}:${process.env.PASSWORD || 'password'}`).toString('base64');
return { Authorization: `Basic ${credentials}` };
};
{% endif %}
{% endfor %}
{% endif %}
const validateResponse = (response, expectedStatus) => {
expect(response.headers['content-type']).toMatch(/application\/json/);
if (expectedStatus) {
expect(response.status).toBe(expectedStatus);
}
};
describe('{{ api_title }} API', () => {
{% for endpoint in endpoints %}
{% set endpoint_id = endpoint.operation_id or (endpoint.method + "_" + endpoint.path.strip("/").replace("/", "_").replace("{", "").replace("}", "")) %}
describe('{{ endpoint.method.upper() }} {{ endpoint.path }}', () => {
{{ endpoint.description or "" }}
it('should return valid response', async () => {
{% if endpoint.security %}
{% set scheme_name = endpoint.security[0].keys()|first %}
{% set scheme = security_schemes[scheme_name] %}
{% if scheme.type == "apiKey" %}
const headers = get{{ scheme_name|capitalize }}Headers();
{% elif scheme.type == "http" and scheme.scheme == "bearer" %}
const headers = getBearerHeaders();
{% elif scheme.type == "http" and scheme.scheme == "basic" %}
const headers = getBasicHeaders();
{% else %}
const headers = {};
{% endif %}
{% else %}
const headers = { 'Content-Type': 'application/json' };
{% endif %}
{% if endpoint.method in ["post", "put", "patch"] %}
const body = {};
const response = await request(BASE_URL)
.{{ endpoint["method"] }}('{{ endpoint["path"] }}')
.send(body)
.set(headers);
{% else %}
{% if endpoint.parameters|selectattr("in", "equalto", "query")|list %}
{% set query_params = endpoint.parameters|selectattr("in", "equalto", "query")|list %}
const queryParams = {
{% for param in query_params %}
{{ param.name }}: 'test'{% if not loop.last %},
{% endif %}
{% endfor %}
};
const response = await request(BASE_URL)
.{{ endpoint["method"] }}('{{ endpoint["path"] }}')
.query(queryParams)
.set(headers);
{% else %}
const response = await request(BASE_URL)
.{{ endpoint["method"] }}('{{ endpoint["path"] }}')
.set(headers);
{% endif %}
{% endif %}
expect([200, 201, 204]).toContain(response.status);
{% if endpoint.responses["200"] %}
validateResponse(response, {{ endpoint.responses["200"] }});
{% else %}
validateResponse(response);
{% endif %}
});
});
{% endfor %}
});