diff --git a/package.json b/package.json index f454b90..c375d0f 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,13 @@ "description": "", "main": "index.js", "scripts": { - "test": "jest" + "test": "jest", + "test:watch": "jest .src/entregasDesafio/camila-cristina --watchAll " }, "keywords": [], "author": "", "license": "ISC", - "dependencies": { - "jest": "^28.1.2" + "devDependencies": { + "jest": "^29.7.0" } } diff --git a/src/dominio/calculadora/Hora/valorHora.js b/src/dominio/calculadora/Hora/valorHora.js index be65388..91733d8 100644 --- a/src/dominio/calculadora/Hora/valorHora.js +++ b/src/dominio/calculadora/Hora/valorHora.js @@ -4,6 +4,15 @@ const { } = require('../constantes/constantes') const calcularValorPorHora = (rendaMensal) => { + + if(isNaN(rendaMensal)) { + throw new Error('valor mensal dever ser um numero') + } + + if(rendaMensal < 0) { + throw new Error('valor mensal deve ser maior que zero') + } + const horasTrabalhadasPorMes = (HORAS_POR_DIA * DIAS_UTEIS_NO_MES); const valorPorHora = rendaMensal / horasTrabalhadasPorMes; diff --git a/src/dominio/calculadora/Projeto/pacote.js b/src/dominio/calculadora/Projeto/pacote.js index 615b3c4..15ae4be 100644 --- a/src/dominio/calculadora/Projeto/pacote.js +++ b/src/dominio/calculadora/Projeto/pacote.js @@ -1,7 +1,14 @@ const { MAX_HORAS_POR_PACOTE } = require('../constantes/constantes'); -const calcularPacote = (totalDeHorasPorProjeto) => Object.entries(MAX_HORAS_POR_PACOTE) - .find(([key, value]) => value > totalDeHorasPorProjeto +const calcularPacote = (totalDeHorasPorProjeto) => { + + if(totalDeHorasPorProjeto > 200) { + throw new Error('Valor enviado é maior que o máximo permitido') + } + + return Object.entries(MAX_HORAS_POR_PACOTE) + .find(([key, value]) => value >= totalDeHorasPorProjeto )[0]; +} exports.calcularPacote = calcularPacote; \ No newline at end of file diff --git a/src/entregasDesafio/ana-luiza-sampaio/valorHora.test.js b/src/entregasDesafio/ana-luiza-sampaio/valorHora.test.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/entregasDesafio/camila-cristina/calcularPacote.test.js b/src/entregasDesafio/camila-cristina/calcularPacote.test.js new file mode 100644 index 0000000..cb48818 --- /dev/null +++ b/src/entregasDesafio/camila-cristina/calcularPacote.test.js @@ -0,0 +1,49 @@ +const { calcularPacote } = require('../../dominio/calculadora/Projeto/pacote'); + +describe('Calular pacote', () => { + test('Calcular pacote basico quando 23 horas', () => { + const retornado = calcularPacote(23) + const esperado = 'pacote_basico' + + expect(esperado).toBe(retornado) + }) + + test('Calcular pacote basico quando 50 horas', () => { + const retornado = calcularPacote(50) + const esperado = 'pacote_basico' + + expect(esperado).toBe(retornado) + }) + + test('Calcular pacote basico quando 51 horas', () => { + const retornado = calcularPacote(51) + const esperado = 'pacote_intermediario' + + expect(esperado).toBe(retornado) + }) + + test('Calcular pacote basico quando 100 horas', () => { + const retornado = calcularPacote(100) + const esperado = 'pacote_intermediario' + + expect(esperado).toBe(retornado) + }) + + test('Calcular pacote basico quando 101 horas', () => { + const retornado = calcularPacote(101) + const esperado = 'pacote_premium' + + expect(esperado).toBe(retornado) + }) + + test('Calcular pacote basico quando 200 horas', () => { + const retornado = calcularPacote(200) + const esperado = 'pacote_premium' + + expect(esperado).toBe(retornado) + }) + + test('Calcular pacote basico quando 201 horas', () => { + expect(() => calcularPacote(201)).toThrow('Valor enviado é maior que o máximo permitido') + }) +}) \ No newline at end of file diff --git a/src/entregasDesafio/camila-cristina/horasPorProjeto.test.js b/src/entregasDesafio/camila-cristina/horasPorProjeto.test.js new file mode 100644 index 0000000..a2169dc --- /dev/null +++ b/src/entregasDesafio/camila-cristina/horasPorProjeto.test.js @@ -0,0 +1,27 @@ +const { calcularHorasDeProjeto } = require('../../dominio/calculadora/Projeto/horasPorProjeto'); + +describe('Calcular horas de projeto', () => { + test('calcular horas de projeto - 1 funcionalidade', () => { + const listaFuncionalidades = ['formulario'] + const retornado = calcularHorasDeProjeto(listaFuncionalidades) + const esperado = 16 + + expect(esperado).toBe(retornado) + }) + + test('calcular horas de projeto - 2 funcionalidades iguais', () => { + const listaFuncionalidades = ['formulario', 'formulario'] + const retornado = calcularHorasDeProjeto(listaFuncionalidades) + const esperado = 32 + + expect(esperado).toBe(retornado) + }) + + test('calcular horas de projeto - 4 funcionalidades diferentes', () => { + const listaFuncionalidades = ['formulario', 'responsividade', 'otimizacao_seo', 'construcao_1_pagina'] + const retornado = calcularHorasDeProjeto(listaFuncionalidades) + const esperado = 56 + + expect(esperado).toBe(retornado) + }) +}) \ No newline at end of file diff --git a/src/entregasDesafio/camila-cristina/valorHora.test.js b/src/entregasDesafio/camila-cristina/valorHora.test.js new file mode 100644 index 0000000..c13c8e9 --- /dev/null +++ b/src/entregasDesafio/camila-cristina/valorHora.test.js @@ -0,0 +1,47 @@ +const {calcularValorPorHora} = require('../../dominio/calculadora/Hora/valorHora') + +describe('Calcular valor da hora', () => { + + test("Deve emitir um erro caso a função não receba uma string como parametro", () => { + + expect(() => calcularValorPorHora('string')).toThrow() + }) + + test("Deve emitir um erro caso a função não receba o parametro renda mensal", () => { + + expect(() => calcularValorPorHora()).toThrow('valor mensal dever ser um numero'); + }) + + test("Deve emitir um erro caso renda mensal seja negativa", () => { + expect(() => calcularValorPorHora(-1)).toThrow('valor mensal deve ser maior que zero'); + }) + + test("Calcular valor da hora - renda mensal 0", () => { + const retorno = calcularValorPorHora(0); + const esperado = 0; + + expect(retorno).toBe(esperado); + }) + + test("Calcular valor da hora - renda mensal 3000 mil", () => { + const retorno = calcularValorPorHora(3000); + const esperado = 18; + + expect(retorno).toBe(esperado); + }) + + test("Calcular valor da hora - renda mensal 4000 mil", () => { + const retorno = calcularValorPorHora(4000); + const esperado = 23; + + expect(retorno).toBe(esperado); + }) + + test("Calcular valor da hora - renda mensal 15000 mil ", () => { + const retorno = calcularValorPorHora(15000); + const esperado = 86; + + expect(retorno).toBe(esperado); + }) +}) + diff --git a/src/entregasDesafio/camila-cristina/valorProjeto-mock.test.js b/src/entregasDesafio/camila-cristina/valorProjeto-mock.test.js new file mode 100644 index 0000000..2336111 --- /dev/null +++ b/src/entregasDesafio/camila-cristina/valorProjeto-mock.test.js @@ -0,0 +1,73 @@ +const {calcularValorTotalProjeto} = require('../../dominio/calculadora/Projeto/valorProjeto') +const pacote = require('../../dominio/calculadora/Projeto/pacote') + +jest.mock('../../dominio/calculadora/Projeto/pacote') + +describe('pacote basico', () => { + + // beforeAll(() => { + // // unica vez + // pacote.calcularPacote.mockReturnValue('pacote_basico') + // }) + + beforeEach(() => { + // para cada teste + pacote.calcularPacote.mockReturnValue('pacote_basico') + }) + + + test('calcular valor total do projeto quando 30 horas e 30 reais/hora', () => { + + const valorHora = 30; + const funcionalidades= [ 'formulario', 'responsividade'] + const retornado = calcularValorTotalProjeto(funcionalidades, valorHora) + const esperado = 1056; + + expect(esperado).toBe(retornado) + }) + + test('calcular valor total do projeto quando 30 horas e 30 reais/hora - simulando mock', () => { + const valorHora = 30; + const funcionalidades= [ 'formulario', 'responsividade'] + const retornado = calcularValorTotalProjeto(funcionalidades, valorHora) + const esperado = 1056 + + expect(esperado).toBe(retornado) + }) + +}) + +describe('pacote intermediario mock', () => { + beforeEach(() => { + // para cada teste + pacote.calcularPacote.mockReturnValue('pacote_intermediario') + }) + + test('calcular valor total do projeto quando 64 horas e 30 reais/hora', () => { + + + const valorHora = 30; + const funcionalidades= ['formulario', 'responsividade', 'integracao_mailchimp', 'otimizacao_seo'] + const retornado = calcularValorTotalProjeto(funcionalidades, valorHora) + const esperado = 2150; + + expect(esperado).toBe(retornado) + }) +}) + +describe('pacote premium mock', () => { + beforeEach(() => { + // para cada teste + pacote.calcularPacote.mockReturnValue('pacote_premium') + }) + + test('calcular valor total do projeto quando 104 horas e 30 reais/hora', () => { + + const valorHora = 30; + const funcionalidades= [ 'formulario', 'responsividade', 'integracao_mailchimp', 'otimizacao_seo', 'integracao_api_propria', 'ssr', 'construcao_1_pagina', 'setup'] + const retornado = calcularValorTotalProjeto(funcionalidades, valorHora) + const esperado = 3588; + + expect(esperado).toBe(retornado) + }) +}) \ No newline at end of file diff --git a/src/entregasDesafio/camila-cristina/valorProjeto.test.js b/src/entregasDesafio/camila-cristina/valorProjeto.test.js new file mode 100644 index 0000000..d3ef8f8 --- /dev/null +++ b/src/entregasDesafio/camila-cristina/valorProjeto.test.js @@ -0,0 +1,37 @@ +const {calcularValorTotalProjeto} = require('../../dominio/calculadora/Projeto/valorProjeto') + +describe('pacote basico', () => { + test('calcular valor total do projeto quando 30 horas e 30 reais/hora', () => { + + const valorHora = 30; + const funcionalidades= [ 'formulario', 'responsividade'] + const retornado = calcularValorTotalProjeto(funcionalidades, valorHora) + const esperado = 1056; + + expect(esperado).toBe(retornado) + }) +}) + +describe('pacote intermediario', () => { + test('calcular valor total do projeto quando 64 horas e 30 reais/hora', () => { + + const valorHora = 30; + const funcionalidades= [ 'formulario', 'responsividade', 'integracao_mailchimp', 'otimizacao_seo'] + const retornado = calcularValorTotalProjeto(funcionalidades, valorHora) + const esperado = 2150; + + expect(esperado).toBe(retornado) + }) +}) + +describe('pacote premium', () => { + test('calcular valor total do projeto quando 104 horas e 30 reais/hora', () => { + + const valorHora = 30; + const funcionalidades= [ 'formulario', 'responsividade', 'integracao_mailchimp', 'otimizacao_seo', 'integracao_api_propria', 'ssr', 'construcao_1_pagina', 'setup'] + const retornado = calcularValorTotalProjeto(funcionalidades, valorHora) + const esperado = 3588; + + expect(esperado).toBe(retornado) + }) +}) \ No newline at end of file diff --git a/src/entregasDesafio/exemplo-nome-sobrenome/valorHora.test.js b/src/entregasDesafio/exemplo-nome-sobrenome/valorHora.test.js deleted file mode 100644 index e69de29..0000000