diff --git a/package.json b/package.json index 1c34a0ac..8a927daf 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,10 @@ "keywords": [], "author": "", "license": "ISC", - "dependencies": { + "scripts": { + "test": "jest" + }, + "devDependencies": { + "jest": "^29.5.0" } } diff --git a/src/dominio/calculadora/Projeto/pacote.js b/src/dominio/calculadora/Projeto/pacote.js index 7ae6cf8b..e38bcfd8 100644 --- a/src/dominio/calculadora/Projeto/pacote.js +++ b/src/dominio/calculadora/Projeto/pacote.js @@ -1,6 +1,7 @@ const { MAX_HORAS_POR_PACOTE } = require('../constantes/constantes'); -const calcularPacote = (totalDeHorasPorProjeto) => Object.entries(MAX_HORAS_POR_PACOTE) +const calcularPacote = (totalDeHorasPorProjeto) => +Object.entries(MAX_HORAS_POR_PACOTE) .find(([key, value]) => value > totalDeHorasPorProjeto )[0]; diff --git a/src/dominio/calculadora/constantes/constantes.js b/src/dominio/calculadora/constantes/constantes.js index 2bb57f03..d18835c1 100644 --- a/src/dominio/calculadora/constantes/constantes.js +++ b/src/dominio/calculadora/constantes/constantes.js @@ -9,8 +9,8 @@ const MAX_HORAS_POR_PACOTE = { const TAXAS_CONTRATUAIS_POR_PACOTE = { pacote_basico: 1.1, // 10% - pacote_intermediario: 1.2, // 12% - pacote_premium: 1.5 // 15% + pacote_intermediario: 1.12, // 12% + pacote_premium: 1.15 // 15% } const HORAS_POR_FUNCIONALIDADE = { diff --git a/src/entregasDesafio/daniela-botelho/HorasPorProjeto/horasPorProjeto.js b/src/entregasDesafio/daniela-botelho/HorasPorProjeto/horasPorProjeto.js new file mode 100644 index 00000000..df9977bd --- /dev/null +++ b/src/entregasDesafio/daniela-botelho/HorasPorProjeto/horasPorProjeto.js @@ -0,0 +1,10 @@ +const { HORAS_POR_FUNCIONALIDADE } = require("../../../dominio/calculadora/constantes/constantes"); + + +const calcularHorasDeProjeto = (listaDeFuncionalidades) => ( + listaDeFuncionalidades + .map(func => HORAS_POR_FUNCIONALIDADE[func]) + .reduce((sum, currentValue) => sum + currentValue, 0) +); + +exports.calcularHorasDeProjeto = calcularHorasDeProjeto; diff --git a/src/entregasDesafio/daniela-botelho/HorasPorProjeto/horasPorProjeto.test.js b/src/entregasDesafio/daniela-botelho/HorasPorProjeto/horasPorProjeto.test.js new file mode 100644 index 00000000..f8d2ca42 --- /dev/null +++ b/src/entregasDesafio/daniela-botelho/HorasPorProjeto/horasPorProjeto.test.js @@ -0,0 +1,26 @@ + +const { calcularHorasDeProjeto } = require("./horasPorProjeto"); + + +describe("Calcular Horas por Projeto", () => { + + test("Uma lista contendo 3 funcionalidades tera 24 horas", () => { + const listaAlgumasFuncionalidades = [ "setup", "construcao_1_pagina", "ssr"] + expect(calcularHorasDeProjeto(listaAlgumasFuncionalidades)).toBe(24) + + }) + + test("Calcular horas quando não existe funcionalidade", () => { + const listaInexistente = [ "teste "] + expect(calcularHorasDeProjeto(listaInexistente)).toBeNaN() + }) + + test("Verificar se possui todas as funcionalidades", () => { + const listaTodasFuncionalidades = ["setup","formulario","responsividade", + "otimizacao_seo", "construcao_1_pagina","integracao_mailchimp", + "ssr","integracao_api_propria"] + expect(calcularHorasDeProjeto(listaTodasFuncionalidades)).toBe(104) + }) + + +}) diff --git a/src/entregasDesafio/daniela-botelho/Pacote/pacote.js b/src/entregasDesafio/daniela-botelho/Pacote/pacote.js new file mode 100644 index 00000000..c66c1008 --- /dev/null +++ b/src/entregasDesafio/daniela-botelho/Pacote/pacote.js @@ -0,0 +1,8 @@ +const { MAX_HORAS_POR_PACOTE } = require("../../../dominio/calculadora/constantes/constantes"); + +const calcularPacote = (totalDeHorasPorProjeto) => +Object.entries(MAX_HORAS_POR_PACOTE) + .find(([key, value]) => value >= totalDeHorasPorProjeto +)[0]; + +exports.calcularPacote = calcularPacote; diff --git a/src/entregasDesafio/daniela-botelho/Pacote/pacote.test.js b/src/entregasDesafio/daniela-botelho/Pacote/pacote.test.js new file mode 100644 index 00000000..e76866c6 --- /dev/null +++ b/src/entregasDesafio/daniela-botelho/Pacote/pacote.test.js @@ -0,0 +1,38 @@ +const { calcularPacote } = require("./pacote") + +describe("Calcular Pacote", () => { + + test("Projeto de 200h retorna pacote_premium", () => { + const horasDeProjeto = 200 + expect(calcularPacote(horasDeProjeto)).toBe("pacote_premium" + ) + }) + + test("Projeto de 199h retorna pacote_premium", () => { + const horasDeProjeto = 199 + expect(calcularPacote(horasDeProjeto)).toBe("pacote_premium") + }) + + test("Projeto de 100h retorna pacote_intermediario", () => { + const horasDeProjeto = 100 + expect(calcularPacote(horasDeProjeto)).toBe("pacote_intermediario") + }) + + test("Projeto de 98h retorna pacote_intermediario", () => { + const horasDeProjeto = 98 + expect(calcularPacote(horasDeProjeto)).toBe("pacote_intermediario") + }) + + + test("Projeto de 50h retorna pacote_basico", () => { + const horasDeProjeto = 50 + expect(calcularPacote(horasDeProjeto)).toBe("pacote_basico") + }) + + test("Projeto de 30h retorna pacote_basico", () => { + const horasDeProjeto = 30 + expect(calcularPacote(horasDeProjeto)).toBe("pacote_basico") + }) + + +}) \ No newline at end of file diff --git a/src/entregasDesafio/daniela-botelho/ValorHora/valorHora.test.js b/src/entregasDesafio/daniela-botelho/ValorHora/valorHora.test.js new file mode 100644 index 00000000..9e062a5d --- /dev/null +++ b/src/entregasDesafio/daniela-botelho/ValorHora/valorHora.test.js @@ -0,0 +1,22 @@ +// Testes aqui +const {calcularValorPorHora} = require("../../../dominio/calculadora/Hora/valorHora") + +describe("Calcular valor por Hora", () => { + + test("Salario é 2000,00 e o valor da hora é 12,00", () => { + expect(calcularValorPorHora(2000)).toBe(12) + }) + + test("Salario é 1500,00, hora paga é menor que 10" , () => { + expect(calcularValorPorHora(1500)).toBeLessThan(10); + }) + + test("Salario é 2000,00, hora paga maior igual a 10" , () => { + expect(calcularValorPorHora(2000)).toBeGreaterThanOrEqual(10); + }) + + test("Valor informado não é string", () => { + expect(typeof calcularValorPorHora(1500)).not.toBe('string'); + }) + +}) \ No newline at end of file diff --git a/src/entregasDesafio/daniela-botelho/ValorProjeto/valorProjeto.js b/src/entregasDesafio/daniela-botelho/ValorProjeto/valorProjeto.js new file mode 100644 index 00000000..72dbc2fa --- /dev/null +++ b/src/entregasDesafio/daniela-botelho/ValorProjeto/valorProjeto.js @@ -0,0 +1,20 @@ + +const { TAXAS_CONTRATUAIS_POR_PACOTE } = require("../../../dominio/calculadora/constantes/constantes"); +const { calcularHorasDeProjeto } = require("../HorasPorProjeto/horasPorProjeto"); +const { calcularPacote } = require("../Pacote/pacote"); + +const calcularValorBaseProjeto = (totalDeHorasPorProjeto, valorHora) => { + return 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]); +} + +exports.calcularValorTotalProjeto = calcularValorTotalProjeto; diff --git a/src/entregasDesafio/daniela-botelho/ValorProjeto/valorProjeto.test.js b/src/entregasDesafio/daniela-botelho/ValorProjeto/valorProjeto.test.js new file mode 100644 index 00000000..49ac3724 --- /dev/null +++ b/src/entregasDesafio/daniela-botelho/ValorProjeto/valorProjeto.test.js @@ -0,0 +1,35 @@ +const { calcularValorPorHora } = require("../../../dominio/calculadora/Hora/valorHora"); +const { calcularValorTotalProjeto } = require("./valorProjeto"); + + +describe("Valor do Projeto", () => { + const listaTodasFuncionalidades = ["setup","formulario","responsividade", + "otimizacao_seo", "construcao_1_pagina","integracao_mailchimp", "ssr","integracao_api_propria"] + + const listaIntermediaria = ["setup","formulario","responsividade", "otimizacao_seo", "construcao_1_pagina"] + + const listaBasica = [ "setup", "ssr", "construcao_1_pagina"] + + const listaVazia = [ ] + + test("Valor do projeto com todas as funcionalidades e valor da hora 8,00 é maior que 900", () => { + expect(calcularValorTotalProjeto(listaTodasFuncionalidades,8)).toBeGreaterThan(900); + }) + + test("Valor do projeto todas as funcinalidades e salario de 2200 é 1555", () => { + expect(calcularValorTotalProjeto(listaTodasFuncionalidades,calcularValorPorHora(2200))).toBe(1555); + }) + + test("Valor do projeto com 3 funcionalidades de 8 horas cada e valor da hora 10,00, é 264,00" , () => { + expect(calcularValorTotalProjeto(listaBasica,10)).toBe(264); + }) + + test("Valor do projeto com pacote intemediario e salario 1500" , () => { + expect(calcularValorTotalProjeto(listaIntermediaria,calcularValorPorHora(1500))).toBe(645); + }) + + test("Valor do projeto sem funcionalidades e 8 horas seja 0", () => { + expect(calcularValorTotalProjeto(listaVazia,8)).toBe(0); + }) + +}) \ No newline at end of file diff --git a/src/entregasDesafio/daniela-botelho/sum.js b/src/entregasDesafio/daniela-botelho/sum.js new file mode 100644 index 00000000..bc78fe02 --- /dev/null +++ b/src/entregasDesafio/daniela-botelho/sum.js @@ -0,0 +1,5 @@ +function sum(a,b){ + return a + b ; +} + +module.exports = sum \ No newline at end of file diff --git a/src/entregasDesafio/daniela-botelho/sum.test.js b/src/entregasDesafio/daniela-botelho/sum.test.js new file mode 100644 index 00000000..6f0c00a6 --- /dev/null +++ b/src/entregasDesafio/daniela-botelho/sum.test.js @@ -0,0 +1,14 @@ +const sum = require('./sum'); + +describe('Testando a função SUM', () => { + + test('adds 1 + 2 to equal 3', () => { + expect(sum(1, 2)).toBe(3); + }) + + test('adds 2 + 3 not to equal 4', () => { + expect(sum(2, 1)).not.toBe(4); + }) + +}) + 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 e69de29b..00000000 diff --git a/src/entregasDesafio/milena-martins/valorHora.test.js b/src/entregasDesafio/milena-martins/valorHora.test.js deleted file mode 100644 index 43d00b1b..00000000 --- a/src/entregasDesafio/milena-martins/valorHora.test.js +++ /dev/null @@ -1 +0,0 @@ -// Testes aqui \ No newline at end of file