acacode / acacode/swagger-typescript-api

also generate mock files

Aberta
#499 3 comentários 1 reação 0 responsáveis Ver no GitHub
Linguagem predominante
TypeScript
Estrelas
4.1k
Forks
436
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

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);
}
<%
})
}) %>
```

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.