diff --git a/package.json b/package.json index f454b90..cebe791 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,6 @@ "author": "", "license": "ISC", "dependencies": { - "jest": "^28.1.2" + "jest": "^28.1.3" } } diff --git a/src/dominio/calculadora/Projeto/horasPorProjeto.js b/src/dominio/calculadora/Projeto/horasPorProjeto.js index a40ffbb..39f4e7e 100644 --- a/src/dominio/calculadora/Projeto/horasPorProjeto.js +++ b/src/dominio/calculadora/Projeto/horasPorProjeto.js @@ -1,8 +1,8 @@ const { HORAS_POR_FUNCIONALIDADE } = require('../constantes/constantes'); - +// adicionar o || 0 para quando passar uma funcionalidade retornar 0 em vez de NaN const calcularHorasDeProjeto = (listaDeFuncionalidades) => ( listaDeFuncionalidades - .map(func => HORAS_POR_FUNCIONALIDADE[func]) + .map(func => HORAS_POR_FUNCIONALIDADE[func] || 0) .reduce((sum, currentValue) => sum + currentValue, 0) ); diff --git a/src/dominio/calculadora/Projeto/pacote.js b/src/dominio/calculadora/Projeto/pacote.js index 615b3c4..5317f74 100644 --- a/src/dominio/calculadora/Projeto/pacote.js +++ b/src/dominio/calculadora/Projeto/pacote.js @@ -3,5 +3,17 @@ const { MAX_HORAS_POR_PACOTE } = require('../constantes/constantes'); const calcularPacote = (totalDeHorasPorProjeto) => Object.entries(MAX_HORAS_POR_PACOTE) .find(([key, value]) => value > totalDeHorasPorProjeto )[0]; +// modificando para funcionar para maiores de 200 +// const calcularPacoteV2 = (totalDeHorasPorProjeto) => { +// if (totalDeHorasPorProjeto > 200) { +// return 'pacote_premium'; +// } + +// const encontrado = Object.entries(MAX_HORAS_POR_PACOTE) +// .find(([key, value]) => value > totalDeHorasPorProjeto); + +// return encontrado ? encontrado[0] : 'pacote não encontrado'; +// }; -exports.calcularPacote = calcularPacote; \ No newline at end of file + +exports.calcularPacote = calcularPacote; diff --git a/src/dominio/calculadora/Projeto/valorProjeto.js b/src/dominio/calculadora/Projeto/valorProjeto.js index a8072b8..823713b 100644 --- a/src/dominio/calculadora/Projeto/valorProjeto.js +++ b/src/dominio/calculadora/Projeto/valorProjeto.js @@ -7,10 +7,9 @@ const calcularValorBaseProjeto = (totalDeHorasPorProjeto, valorHora) => { }; const calcularValorTotalProjeto = (funcionalidades, valorHora) => { + const totalDeHorasPorProjeto = calcularHorasDeProjeto(funcionalidades); - const pacote = calcularPacote(totalDeHorasPorProjeto); - const valorBase = calcularValorBaseProjeto(totalDeHorasPorProjeto, valorHora); return Math.round(valorBase * TAXAS_CONTRATUAIS_POR_PACOTE[pacote]); 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/beatriz-conceicao-da-costa/horasPorProjeto.test.js b/src/entregasDesafio/beatriz-conceicao-da-costa/horasPorProjeto.test.js new file mode 100644 index 0000000..1074fa7 --- /dev/null +++ b/src/entregasDesafio/beatriz-conceicao-da-costa/horasPorProjeto.test.js @@ -0,0 +1,53 @@ +const { calcularHorasDeProjeto } = require("../../dominio/calculadora/Projeto/horasPorProjeto") + +describe("Calcular horas de projeto",()=>{ + + test("calcular horas de projeto - formulario e ssr",()=>{ + const lista_de_funcionalidades = ['formulario','ssr']; + const retorno = calcularHorasDeProjeto(lista_de_funcionalidades); + const esperado =24; + expect(esperado).toBe(retorno) + }); + + test("calcular horas de projeto - 3 paginas",()=>{ + const lista_de_funcionalidades = ['construcao_1_pagina','construcao_1_pagina','construcao_1_pagina'] + const retorno = calcularHorasDeProjeto(lista_de_funcionalidades); + const esperado =24; + expect(esperado).toBe(retorno) + }); + + + test("calcular horas de projeto - 1 funcionalidade",()=>{ + const lista_de_funcionalidades = ['integracao_mailchimp']; + const retorno = calcularHorasDeProjeto(lista_de_funcionalidades); + const esperado =16; + expect(esperado).toBe(retorno) + }); + + test("calcular horas de projeto - nenhuma funcionalidade",()=>{ + const retorno = calcularHorasDeProjeto([]); + const esperado =0; + expect(esperado).toBe(retorno) + }); + test("calcular horas de projeto - varias funcionalidades", () => { + const lista_de_funcionalidades = ['formulario', 'ssr', 'construcao_1_pagina', 'integracao_mailchimp']; + const retorno = calcularHorasDeProjeto(lista_de_funcionalidades); + const esperado = 48; + expect(esperado).toBe(retorno); + }); + + test("calcular horas de projeto - funcionalidade desconhecida", () => { + const lista_de_funcionalidades = ['funcionalidade_desconhecida']; + const retorno = calcularHorasDeProjeto(lista_de_funcionalidades); + const esperado = 0; + expect(esperado).toBe(retorno); + }); + + + test("calcular horas de projeto - muitas funcionalidades", () => { + const lista_de_funcionalidades = Array(30).fill('formulario'); + const retorno = calcularHorasDeProjeto(lista_de_funcionalidades); + const esperado = 480; + expect(esperado).toBe(retorno); + }); +}) \ No newline at end of file diff --git a/src/entregasDesafio/beatriz-conceicao-da-costa/pacote.test.js b/src/entregasDesafio/beatriz-conceicao-da-costa/pacote.test.js new file mode 100644 index 0000000..0196c33 --- /dev/null +++ b/src/entregasDesafio/beatriz-conceicao-da-costa/pacote.test.js @@ -0,0 +1,21 @@ +const { calcularPacote } = require("../../dominio/calculadora/Projeto/pacote") +describe("Calcular pacote",()=>{ + + test("calcular pacote - pacote basico",()=>{ + const retorno = calcularPacote(30); + const esperado ="pacote_basico"; + expect(esperado).toBe(retorno) + }); + + test("calcular pacote - pacote intermediario",()=>{ + const retorno = calcularPacote(60); + const esperado ="pacote_intermediario"; + expect(esperado).toBe(retorno) + }); + + test("calcular pacote - pacote premium",()=>{ + const retorno = calcularPacote(190); + const esperado ="pacote_premium"; + expect(esperado).toBe(retorno) + }); +}) \ No newline at end of file diff --git a/src/entregasDesafio/beatriz-conceicao-da-costa/valorHora.test.js b/src/entregasDesafio/beatriz-conceicao-da-costa/valorHora.test.js new file mode 100644 index 0000000..ef32775 --- /dev/null +++ b/src/entregasDesafio/beatriz-conceicao-da-costa/valorHora.test.js @@ -0,0 +1,21 @@ +const { calcularValorPorHora } = require('../../dominio/calculadora/Hora/valorHora') +describe("Calcular valor da hora",()=>{ + + test("calcular valor da hora - renda mensal 3000",()=>{ + const retorno = calcularValorPorHora(3000); + const esperado =18; + expect(esperado).toBe(retorno) + }); + + test("calcular valor da hora - renda mensal 4000",()=>{ + const retorno = calcularValorPorHora(4000); + const esperado =23; + expect(esperado).toBe(retorno) + }); + + test("calcular valor da hora - renda mensal 15000",()=>{ + const retorno = calcularValorPorHora(15000); + const esperado =86; + expect(esperado).toBe(retorno) + }); +}) \ No newline at end of file diff --git a/src/entregasDesafio/beatriz-conceicao-da-costa/valorProjeto.test.js b/src/entregasDesafio/beatriz-conceicao-da-costa/valorProjeto.test.js new file mode 100644 index 0000000..360dc98 --- /dev/null +++ b/src/entregasDesafio/beatriz-conceicao-da-costa/valorProjeto.test.js @@ -0,0 +1,90 @@ +const { calcularValorBaseProjeto,calcularValorTotalProjeto} = require("../../dominio/calculadora/Projeto/valorProjeto") +const pacote = require("../../dominio/calculadora/Projeto/pacote") +jest.mock("../../dominio/calculadora/Projeto/pacote") +describe("Calcular valor projeto basico",()=>{ + beforeEach(()=>{ + pacote.calcularPacote.mockReturnValue("pacote_basico") + }) + test("calcular valor total projeto - ssr, 15",()=>{ + const valorHora =15; + const funcionalidades =['ssr'] + const retorno = calcularValorTotalProjeto(funcionalidades, valorHora); + const esperado =132; + expect(esperado).toBe(retorno) + }); + + 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) + }) + test('calcular valor total do projeto - funcionalidade desconhecida', () => { + const valorHora = 20; + const funcionalidades = ['funcionalidade_desconhecida']; + const retorno = calcularValorTotalProjeto(funcionalidades, valorHora); + const esperado = 0; + expect(esperado).toBe(retorno); + }); + test('calcular valor total do projeto - várias funcionalidades', () => { + const valorHora = 25; + const funcionalidades = ['formulario', 'ssr', 'construcao_1_pagina', 'integracao_mailchimp']; + const retorno = calcularValorTotalProjeto(funcionalidades, valorHora); + const esperado = 1320; + expect(esperado).toBe(retorno); + }); +}) + +describe("Calcular valor projeto intermediario",()=>{ + beforeEach(()=>{ + pacote.calcularPacote.mockReturnValue("pacote_intermediario") + }) + test('calcular valor total do projeto quando 90 horas e 30 reais/hora - simulando mock',()=>{ + const valorHora=30; + const funcionalidades=['formulario', 'responsividade'] + const retornado = calcularValorTotalProjeto(funcionalidades, valorHora); + const esperado = 1075 + expect(esperado).toBe(retornado) + }) + test('calcular valor total do projeto - nenhuma funcionalidade', () => { + const valorHora = 30; + const funcionalidades = []; + const retorno = calcularValorTotalProjeto(funcionalidades, valorHora); + const esperado = 0; + expect(esperado).toBe(retorno); + }); + test('calcular valor total do projeto - várias funcionalidades ', () => { + const valorHora = 40; + const funcionalidades = ['formulario', 'ssr', 'construcao_1_pagina', 'integracao_mailchimp']; + const retorno = calcularValorTotalProjeto(funcionalidades, valorHora); + const esperado = 2150; + expect(esperado).toBe(retorno); + }); +}) + +describe("Calcular valor projeto premium",()=>{ + + test('calcular valor total do projeto quando 190 horas e 30 reais/hora - simulando mock',()=>{ + pacote.calcularPacote.mockReturnValue("pacote_premium") + const valorHora=30; + const funcionalidades=['formulario', 'responsividade'] + const retornado = calcularValorTotalProjeto(funcionalidades, valorHora); + const esperado = 1104 + expect(esperado).toBe(retornado) + }) + test('calcular valor total do projeto - várias funcionalidades', () => { + const valorHora = 60; + const funcionalidades = ['formulario', 'ssr', 'construcao_1_pagina', 'integracao_mailchimp']; + const retorno = calcularValorTotalProjeto(funcionalidades, valorHora); + const esperado = 3312; + expect(esperado).toBe(retorno); + }); + test('calcular valor total do projeto - funcionalidade desconhecida', () => { + const valorHora = 20; + const funcionalidades = ['funcionalidade_desconhecida']; + const retorno = calcularValorTotalProjeto(funcionalidades, valorHora); + const esperado = 0; + expect(esperado).toBe(retorno); + }); +}) \ 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