Skip to content

Commit 45b1e54

Browse files
author
Wanderson Ferreira
committed
fix: normalize templates
1 parent d224ece commit 45b1e54

15 files changed

Lines changed: 256 additions & 13 deletions

File tree

shared-templates/shared-template-node-serverless/src/shared/Logger.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@ import { createLogger, format, transports } from 'winston';
22
const { printf, colorize } = format;
33
const colorizer = colorize();
44

5-
const timestampFormatter = () =>
6-
new Date().toLocaleString('pt-BR', {
7-
timeZone: 'America/Sao_Paulo',
8-
});
5+
const timestampFormatter = () => new Date().toISOString();
96

107
const consoleFormatter = printf(({ stack, level, message, label, timestamp }: { [key: string]: string }) => {
118
const levelLabelColorized = colorizer.colorize(level, `${level}:${label}`);

tasks/test-e2e.sh

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,32 @@ npm set registry "$localRegistryAddress"
1919
npm publish --tag e2e
2020

2121
# Finally run a e2e test
22-
npx create-node-ms nsl -pn serverless-lambda-npm --noCommit --useNpm
23-
cd serverless-lambda-npm && npm run build
22+
sh -c "echo '🏃🏾‍♂️ serverless-lambda --useNpm'"
23+
npx create-node-ms serverless-lambda -pn serverless-lambda-npm --noCommit --useNpm
24+
cd serverless-lambda-npm && npm run test && npm run lint && npm run build
25+
sh -c "echo '✅ serverless-lambda --useNpm e2e done'"
2426

25-
sh -c "echo '✅ node-serverless-lambda-npm e2e done'"
2627
cd ..
2728

29+
sh -c "echo '🏃🏾‍♂️ serverless-express'"
2830
npx create-node-ms nse -pn serverless-express --noCommit
29-
cd serverless-express && yarn build
31+
cd serverless-express && yarn test && yarn lint && yarn build
32+
sh -c "echo '✅ serverless-express e2e done'"
3033

31-
sh -c "echo '✅ node-serverless-express e2e done'"
3234
cd ..
3335

34-
npx create-node-ms nsl -pn serverless-lambda --noCommit
35-
cd serverless-lambda && yarn build
36+
sh -c "echo '🏃🏾‍♂️ serverless-lambda'"
37+
npx create-node-ms serverless-lambda -pn serverless-lambda --noCommit
38+
cd serverless-lambda && yarn test && yarn lint && yarn build
39+
sh -c "echo '✅ serverless-lambda e2e done'"
40+
41+
cd ..
42+
43+
sh -c "echo '🏃🏾‍♂️ express'"
44+
npx create-node-ms express -pn express-server --noCommit
45+
cd express-server && yarn test && yarn lint && yarn build
46+
sh -c "echo '✅ express e2e done'"
3647

37-
sh -c "echo '✅ node-serverless-lambda e2e done'"
3848
cd ..
3949

4050
# Done!
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
import 'reflect-metadata';
2+
import { AddressInfo } from 'net';
3+
import { logger } from '@shared/Logger';
24
import server from '@server/index';
35

4-
server.listen(8080);
6+
const SERVICE_PORT = 3000;
7+
8+
const serve = server.listen(SERVICE_PORT, () => {
9+
const { address, port } = serve.address() as AddressInfo;
10+
11+
logger.info(`Server started on ${address}:${port}`);
12+
});
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { AxiosError, AxiosResponse } from 'axios';
2+
import HttpResponse from '@shared/responses/HttpResponse';
3+
4+
export default class ReturnHelper {
5+
static CaseResponse<T>(status: number, data: T, success = true): Promise<HttpResponse<T>> {
6+
return Promise.resolve({ body: data, statusCode: status, success });
7+
}
8+
static HttpSuccess<T>(status: number, data?: T, headers = null): Promise<AxiosResponse<T>> {
9+
return Promise.resolve({ data, status, headers, config: null, statusText: null });
10+
}
11+
12+
static HttpError<T>(status: number, data?: T): Promise<AxiosError<T>> {
13+
return Promise.reject({ response: { data, status, headers: null, config: null, statusText: null } });
14+
}
15+
16+
static Clone<T>(obj: T): T {
17+
return JSON.parse(JSON.stringify(obj)) as T;
18+
}
19+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import 'reflect-metadata';
2+
import { Container } from 'inversify';
3+
import { Newable } from '@shared/types';
4+
import { RequestRouter, UseCase } from '@shared/contracts';
5+
import AxiosHttpHandle from '@infra/http/AxiosHttpHandler';
6+
7+
export default class TestContainer<T = UseCase | RequestRouter> {
8+
private _ref: Newable<T>;
9+
private _container: Container;
10+
11+
constructor(obj: Newable<T>) {
12+
const container = new Container({});
13+
container.bind(AxiosHttpHandle).toSelf();
14+
container.bind(obj).toSelf();
15+
this._ref = obj;
16+
this._container = container;
17+
}
18+
19+
get() {
20+
return this._container.get<T>(this._ref);
21+
}
22+
23+
add<TT = UseCase | RequestRouter>(obj: Newable<TT>) {
24+
this._container.bind(obj).toSelf();
25+
return this;
26+
}
27+
28+
addDynamicValue<TT>(obj: Newable<TT>) {
29+
this._container.bind(obj).toDynamicValue(() => new obj());
30+
return this;
31+
}
32+
33+
addDynamicValueWithAlias<TT>(alias: string, obj: Newable<TT>) {
34+
this._container.bind<TT>(alias).toDynamicValue(() => new obj());
35+
return this;
36+
}
37+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import 'reflect-metadata';
2+
import { expect } from 'chai';
3+
import GenerateRandomNumberCase from '@modules/RandomNumber/GenerateRandomNumber/GenerateRandomNumberCase';
4+
import TestContainer from '@mocks/TestContainer';
5+
import container from '@infra/container/inversify.config';
6+
7+
describe('GenerateRandomNumberCase', () => {
8+
beforeEach(() => {
9+
// create a snapshot so each unit test can modify
10+
// it without breaking other unit tests
11+
container.snapshot();
12+
});
13+
14+
afterEach(() => {
15+
// Restore to last snapshot so each unit test
16+
// takes a clean copy of the application container
17+
container.restore();
18+
});
19+
20+
it('Should get a random number between 1 and 10', async () => {
21+
const result = await new TestContainer(GenerateRandomNumberCase).get().execute({});
22+
expect(result.body.number).to.be.within(1, 10);
23+
});
24+
});
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { HttpRequestParams, UseCase } from '@shared/contracts';
2+
import { OK } from 'http-status';
3+
import { provide } from 'inversify-binding-decorators';
4+
import ExceptionHandler from '@shared/decorators/ExceptionHandler';
5+
import HttpResponse from '@shared/responses/HttpResponse';
6+
7+
@provide(GenerateRandomNumberCase)
8+
export default class GenerateRandomNumberCase implements UseCase {
9+
@ExceptionHandler
10+
async execute({ headers }: HttpRequestParams<any>) {
11+
const number = Math.floor(Math.random() * (10 - 1 + 1)) + 1;
12+
return HttpResponse.success({ status: OK, body: { number } });
13+
}
14+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { HttpRequestParams, RequestRouter } from '@shared/contracts';
2+
import { inject } from 'inversify';
3+
import { provide } from 'inversify-binding-decorators';
4+
import GenerateRandomNumberCase from '@modules/RandomNumber/GenerateRandomNumber/GenerateRandomNumberCase';
5+
6+
@provide(GenerateRandomNumberRouter)
7+
export default class GenerateRandomNumberRouter implements RequestRouter {
8+
@inject(GenerateRandomNumberCase) private case: GenerateRandomNumberCase;
9+
10+
async route({ headers }: HttpRequestParams<any>) {
11+
return await this.case.execute({ headers });
12+
}
13+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import GenerateRandomNumberRouter from '@modules/RandomNumber/GenerateRandomNumber/GenerateRandomNumberRouter';
2+
import RoutesBuilder from '@utils/RoutesBuilder';
3+
4+
const RandomNumberRoutes = new RoutesBuilder().get('/', GenerateRandomNumberRouter).build();
5+
6+
export default RandomNumberRoutes;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { Router } from 'express';
2+
import RandomNumberRoutes from '@modules/RandomNumber/RandomNumberRoutes';
3+
4+
const V1Routes = Router();
5+
6+
V1Routes.use('/random-number', RandomNumberRoutes);
7+
8+
export default V1Routes;

0 commit comments

Comments
 (0)