acacode / acacode/swagger-typescript-api

also generate mock files

Abierto
#499 3 comentarios 1 reacción 0 asignados Ver en GitHub
Lenguaje dominante
TypeScript
Estrellas
4.1k
Forks
436
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

Hello,

I use swagger-template-typescript to generate all API calls.
As I also make some unit / functional tests and need to mock API calls, I sometimes had to wite things like:

```
fetchMock.get(
`/api/me`,
403
);
```

As you can notice neither path / query or response are typed...
Is there a plan to add mock generator ?

As a "workaround" I currently use extraTemplates option to generate files I need, but I can only generate 1 file per API (no modular) ...

I'm not sure this feature is broadly needed, and my template contains some shortcuts i took for my personnal needs / api, so its not 100% generic.

Anyway here is my template, if that can help someone or be a start for a generic feature:

```
<%
const { _ } = it.utils;
let dataContracts = _.map(it.modelTypes, "name");
%>
import fetchMock from 'fetch-mock/esm/client';
<%
let types = '';
it.routes.combined.forEach((route) => {
route.routes.forEach((realRoute) => {
types = `${types} ${realRoute.response.type}`;
const pathParams = realRoute.request.parameters.map((p) => p.type).join(' ');
types = `${types} ${realRoute.response.type} ${pathParams}`;
})
})
dataContracts = dataContracts.filter((dc) => new RegExp(`\\b(${dc})\\b`).test(types));
%>

<% if (dataContracts.length) { %>
import { <%~ dataContracts.join(', ') %> } from "./<%~ it.config.fileNames.dataContracts %>"
<% } %>

<%
it.routes.combined.forEach((route) => {
route.routes.forEach((realRoute) => {
const pathParams = realRoute.request.parameters.map((p) => `${p.name}${p.optional ? '?' : ''}: ${p.type}`).join(', ');
const availableQueryFields = realRoute.request.requestParams?.properties ? Object.keys(realRoute.request.requestParams?.properties) : [];
const responseType = `${realRoute.response.type !== 'void' ? realRoute.response.type : 'undefined'} | number`
%>
export const <%= realRoute.routeName.usage %>Mock = (<%~ pathParams ? `${pathParams}, `: '' %>queryParams: string, response: <%~ responseType %>) => {
const possibleParams: Array = <%~ JSON.stringify(availableQueryFields) %>;
const routeParameters = queryParams.split('&').map((s) => s.split('=')[0]);
if(routeParameters.filter((rp) => !possibleParams.includes(rp))) {
throw new Error('invalid query params');
}
return fetchMock.<%= realRoute.request.method %>(`<%= it.apiConfig.baseUrl.includes('private-api') ? '/private-api' : '/api' %><%= realRoute.request.path %>`, response || 200);
}
<%
})
}) %>
```

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.