Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@
"author": "",
"license": "ISC",
"dependencies": {
"jest": "^28.1.2"
"jest": "^28.1.3"
}
}
4 changes: 2 additions & 2 deletions src/dominio/calculadora/Projeto/horasPorProjeto.js
Original file line number Diff line number Diff line change
@@ -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)
);

Expand Down
14 changes: 13 additions & 1 deletion src/dominio/calculadora/Projeto/pacote.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;

exports.calcularPacote = calcularPacote;
3 changes: 1 addition & 2 deletions src/dominio/calculadora/Projeto/valorProjeto.js
Original file line number Diff line number Diff line change
Expand Up @@ -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]);
Expand Down
Empty file.
Original file line number Diff line number Diff line change
@@ -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);
});
})
21 changes: 21 additions & 0 deletions src/entregasDesafio/beatriz-conceicao-da-costa/pacote.test.js
Original file line number Diff line number Diff line change
@@ -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)
});
})
21 changes: 21 additions & 0 deletions src/entregasDesafio/beatriz-conceicao-da-costa/valorHora.test.js
Original file line number Diff line number Diff line change
@@ -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)
});
})
Original file line number Diff line number Diff line change
@@ -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);
});
})
Empty file.