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
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
9 changes: 9 additions & 0 deletions src/dominio/calculadora/Hora/valorHora.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
11 changes: 9 additions & 2 deletions src/dominio/calculadora/Projeto/pacote.js
Original file line number Diff line number Diff line change
@@ -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;
Empty file.
49 changes: 49 additions & 0 deletions src/entregasDesafio/camila-cristina/calcularPacote.test.js
Original file line number Diff line number Diff line change
@@ -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')
})
})
27 changes: 27 additions & 0 deletions src/entregasDesafio/camila-cristina/horasPorProjeto.test.js
Original file line number Diff line number Diff line change
@@ -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)
})
})
47 changes: 47 additions & 0 deletions src/entregasDesafio/camila-cristina/valorHora.test.js
Original file line number Diff line number Diff line change
@@ -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);
})
})

73 changes: 73 additions & 0 deletions src/entregasDesafio/camila-cristina/valorProjeto-mock.test.js
Original file line number Diff line number Diff line change
@@ -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)
})
})
37 changes: 37 additions & 0 deletions src/entregasDesafio/camila-cristina/valorProjeto.test.js
Original file line number Diff line number Diff line change
@@ -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)
})
})
Empty file.