Skip to content

Commit

Permalink
✔️test(produto): aplica testes de unidade automatizados na entidades …
Browse files Browse the repository at this point in the history
…de domínio | Parte 11

- Define os scripts de teste unitários
- Implementa o conjunto de testes para entidade de domínio com base nos casos de teste/cenários de exceção e padrão definidos na história de usuário + BDD
  • Loading branch information
diegoarmandoo committed Aug 28, 2023
1 parent c9dc215 commit 67c0f26
Showing 1 changed file with 180 additions and 0 deletions.
180 changes: 180 additions & 0 deletions src/modules/catalogo/domain/produto/produto.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
import { describe, expect, test } from "vitest";
import { Categoria } from "../categoria/categoria.entity";
import { CriarProdutoProps } from "./produto.types";
import { Produto } from "./produto.entity";
import { DescricaoProdutoTamanhoMaximoInvalido, DescricaoProdutoTamanhoMinimoInvalido, NomeProdutoTamanhoMaximoInvalido, NomeProdutoTamanhoMinimoInvalido, QtdMaximaCategoriasProdutoInvalida, QtdMinimaCategoriasProdutoInvalida, ValorMinimoProdutoInvalido } from "./produto.exception";

//Suite de Testes de Unidade - Entidade de Domínio
//Usando o 'describe', você pode definir como um conjunto de testes ou benchmarks relacionados
describe('Entidade de Domínio: Criar Produto', () => {

//Teste define um conjunto de expectativas relacionadas.
test('Deve Criar Um Produto Válido', async () => {

let categoriasValidas: Array<Categoria> = [];
categoriasValidas.push(Categoria.criar({ nome: 'Banho' }));

//Dado (Given)
const produtoValido: CriarProdutoProps = {
nome: 'Toalha',
descricao: 'Toalha de Algodão',
valor: 10,
categorias: categoriasValidas
};

//Quando (When) e Então (Then)
expect(Produto.criar(produtoValido))
.to.be.instanceof(Produto);

});

//Teste define um conjunto de expectativas relacionadas.
test('Não Deve Criar Produto Com Nome Inválido (Tamanho Mínimo)', async () => {

let categoriasValidas: Array<Categoria> = [];
categoriasValidas.push(Categoria.criar({ nome: 'Banho' }));

//Dado (Given)
//Nome menor que cinco caracteres
const produtoNomeInvalido: CriarProdutoProps = {
nome: 'Toa',
descricao: 'Toalha de Algodão',
valor: 10,
categorias: categoriasValidas
};

//Quando (When) e Então (Then)
expect(() => Produto.criar(produtoNomeInvalido))
.toThrowError(NomeProdutoTamanhoMinimoInvalido);

});

//Teste define um conjunto de expectativas relacionadas.
test('Não Deve Criar Produto Com Nome Inválido (Tamanho Máximo)', async () => {

let categoriasValidas: Array<Categoria> = [];
categoriasValidas.push(Categoria.criar({ nome: 'Banho' }));

//Dado (Given)
//Nome maior que cinquenta caracteres
const produtoNomeInvalido: CriarProdutoProps = {
nome: 'abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabc',
descricao: 'Toalha de Algodão',
valor: 10,
categorias: categoriasValidas
};

//Quando (When) e Então (Then)
expect(() => Produto.criar(produtoNomeInvalido))
.toThrowError(NomeProdutoTamanhoMaximoInvalido);

});

//Teste define um conjunto de expectativas relacionadas.
test('Não Deve Criar Produto Com Descrição Inválida (Tamanho Mínimo)', async () => {

let categoriasValidas: Array<Categoria> = [];
categoriasValidas.push(Categoria.criar({ nome: 'Banho' }));

//Dado (Given)
//Descrição menor que dez caracteres
const produtoNomeInvalido: CriarProdutoProps = {
nome: 'Toalha',
descricao: 'Algodão',
valor: 10,
categorias: categoriasValidas
};

//Quando (When) e Então (Then)
expect(() => Produto.criar(produtoNomeInvalido))
.toThrowError(DescricaoProdutoTamanhoMinimoInvalido);

});

//Teste define um conjunto de expectativas relacionadas.
test('Não Deve Criar Produto Com Descrição Inválida (Tamanho Máximo)', async () => {

let categoriasValidas: Array<Categoria> = [];
categoriasValidas.push(Categoria.criar({ nome: 'Banho' }));

//Dado (Given)
//Descrição maior que duzentos caracteres
const produtoNomeInvalido: CriarProdutoProps = {
nome: 'Toalha',
descricao: 'abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijasc',
valor: 10,
categorias: categoriasValidas
};

//Quando (When) e Então (Then)
expect(() => Produto.criar(produtoNomeInvalido))
.toThrowError(DescricaoProdutoTamanhoMaximoInvalido);

});

//Teste define um conjunto de expectativas relacionadas.
test('Não Deve Criar Produto Com Valor Mínimo Inválido', async () => {

let categoriasValidas: Array<Categoria> = [];
categoriasValidas.push(Categoria.criar({ nome: 'Banho' }));

//Dado (Given)
//Valor mínimo menor que 0
const produtoNomeInvalido: CriarProdutoProps = {
nome: 'Toalha',
descricao: 'Toalha de Banho',
valor: -50,
categorias: categoriasValidas
};

//Quando (When) e Então (Then)
expect(() => Produto.criar(produtoNomeInvalido))
.toThrowError(ValorMinimoProdutoInvalido);

});

//Teste define um conjunto de expectativas relacionadas.
test('Não Deve Criar Produto Com Número Mínimo de Categorias Inválido', async () => {

let categoriasQtdMinInvalidas: Array<Categoria> = [];

//Dado (Given)
//Nenhuma categoria é atribuida - menor que 1
const produtoNomeInvalido: CriarProdutoProps = {
nome: 'Toalha',
descricao: 'Toalha de Banho',
valor: 10,
categorias: categoriasQtdMinInvalidas
};

//Quando (When) e Então (Then)
expect(() => Produto.criar(produtoNomeInvalido))
.toThrowError(QtdMinimaCategoriasProdutoInvalida);

});

//Teste define um conjunto de expectativas relacionadas.
test('Não Deve Criar Produto Com Número Máximo de Categorias Inválido', async () => {

let categoriasQtdMaxInvalidas: Array<Categoria> = [];
categoriasQtdMaxInvalidas.push(Categoria.criar({ nome: 'Cama' }));
categoriasQtdMaxInvalidas.push(Categoria.criar({ nome: 'Mesa' }));
categoriasQtdMaxInvalidas.push(Categoria.criar({ nome: 'Banho' }));
categoriasQtdMaxInvalidas.push(Categoria.criar({ nome: 'Enxoval' }));

//Dado (Given)
//4 categorias é atribuidas - maior que 3
const produtoNomeInvalido: CriarProdutoProps = {
nome: 'Toalha',
descricao: 'Toalha de Banho',
valor: 10,
categorias: categoriasQtdMaxInvalidas
};

//Quando (When) e Então (Then)
expect(() => Produto.criar(produtoNomeInvalido))
.toThrowError(QtdMaximaCategoriasProdutoInvalida);

});

});

0 comments on commit 67c0f26

Please sign in to comment.