Skip to content

Latest commit

 

History

History
88 lines (56 loc) · 3.26 KB

dev-notes.md

File metadata and controls

88 lines (56 loc) · 3.26 KB

Desenvolver uma aplicação node.js orientada a testes (TDD)

O objetivo é mapear os passos de desenvolvimento de acordo com as aulas do curso. A ideia desse projeto é criar uma API completa baseado em Programação Orientada a Testes e Arquitetura Limpa, de acordo com os princípios SOLID - Essa API faz parte do treinamento do professor Rodrigo Manguinho (Mango) na Udemy.

0. SOLID

  • Princípio de única responsabilidade (Single-responsibility principle):

    "uma classe deve ter apenas uma única responsabilidade (mudanças em apenas uma parte da especificação do software, devem ser capaz de afetar a especificação da classe)."

  • Princípio de aberto/fechado (Open-Closed principle):

    "entidades de software devem ser abertas para extensão, mas fechadas para modificação."

  • Princípio da substituição de Liskov (Liskov substitution principle):

    "objetos em um programa devem ser substituíveis por instâncias de seus subtipos, sem alterar a funcionalidade do programa." deve ser capaz de afetar apenas a especificação da

  • Princípio da segregação de Interface (Interface segregation principle):

    "muitas interfaces de clientes específicas, são melhores do que uma para todos propósitos."

  • Princípio da inversão de dependência (Dependency inversion principle):

    "deve-se depender de abstrações, não de objetos concretos."

1. Introdução

  • 1. Configurando o Git
  • 2. Configurando as dependências
  • 3. Clean Architecture

3. SignUp API - Presentation Layer

  • 1. Criando o SignUpController e validando o request
  • 2. Criando erros personalizados
  • 3. Utilizando Mocks da maneira correta
  • 4. Testando exceções e integrando com o EmailValidator
  • 5. Integrando com o AddAccount UseCase

4. Jest

  • 1. Configurando o Jest e criando scripts de testes

5. Utils Layer

  • 1. Criando o EmailValidatorAdapter e mockando o validator

6. SignUp API - Data Layer

  • 1. Criando o DbAddAccount e integrando com o Encrypter
  • 2. Integrando com o AddAccountRepository

7. SignUp API - Infra Layer

  • 1. Criando o BcryptAdapter e mockando o bcrypt

  • 2. Configurando MongoDb em memória

  • 3. Testando o MongoDb

    • Se der problema, usar essa estratégia para mapear o '_id' do MongoDB:

      import { AddAccountRepository } from '../../../../data/protocols/add-account-repository';
      import { AccountModel } from '../../../../domain/models/account';
      import { AddAccountModel } from '../../../../domain/usecases/add-account';
      import { MongoHelper } from '../helpers/mongo-helper';
      
      export class AccountMongoRepository implements AddAccountRepository {
        async add(accountData: AddAccountModel): Promise<AccountModel> {
          const accountCollection = MongoHelper.getCollection('accounts');
          const result = await accountCollection.insertOne(accountData);
          const { _id, ...collectionWithoutId } = result;
      
          // Isso deve retornar um objeto sem o '_id'
          return Object.assign({}, accountWithoutId, { id: _id });
        }
      }

8. SignUp API - Main Layer

  • 1. Testando middlewares do express
  • 2. Criando teste de integração para o SignUp
  • 3. Fazendo a composição do SignUp e desacoplando do express