O desafio foi muito enriquecedor para meu conhecimento como estudante de programação, tive a sensação real de como é trabalhar com o desenvolvimento de uma aplicação, analisando meu código, resolvendo bugs, e fazendo commit diretamente do VisualCode através do GIT push.
As partes do desafio que mais fiquei presa foram nas regras:
- "É possível pedir mais de um item extra sem precisar de mais de um principal."
- "Caso item extra seja informado num pedido que não tenha o respectivo item principal, apresentar mensagem "Item extra não pode ser pedido sem o principal".
Um hora todos itens eram considerados inválidos, outra todos itens eram considerados válidos, e por fim o código estava descontando o valor dos itens extras do total a pagar...
Precisei parar descansar, estudar, e algumas horas depois encontrei a solução!
"Se tiver pedidos['queijo'] e não tiver pedidos['sanduiche'] e se tiver pedidos['chantily'] e não tiver pedidos['cafe'] A mensagem "Item extra não pode ser pedido sem o principal" é retornada."
Caso contrário o calculo prossegue.
Desafio concluido!!
Para completar a etapa do desafio você terá que baixar a estrutura do código aqui na Azure, resolver o desafio e entregá-lo no repositório no seu github.
Para baixar a estrutura no formato zip, basta clicar neste link.
Após resolver o desafio e validá-lo com os testes (mais detalhes nos tópicos abaixo), você terá que criar um repositório no Github com o nome de desafio-$seunome-$sobrenome
(substitua os nomes com $ pelo seu próprio nome e sobrenome). Deṕos disso, você pode enviar o link do seu repositório para que possamos validá-lo para o e-mail: start@dbserver.com.br
Se você ainda não teve contato com essas ferramentas, não tem problema, separamos um material para lhe ajudar nessa etapa: Primeiros passos com Git e Github.
Olá! Você foi contratado para automatizar o caixa da Lanchonete da DB. Sua missão será construir a lógica que calcula o valor de uma compra de acordo com o cardápio, regras e descontos da Lanchonete.
codigo | descrição | valor |
---|---|---|
cafe | Café | R$ 3,00 |
chantily | Chantily (extra do Café) | R$ 1,50 |
suco | Suco Natural | R$ 6,20 |
sanduiche | Sanduíche | R$ 6,50 |
queijo | Queijo (extra do Sanduíche) | R$ 2,00 |
salgado | Salgado | R$ 7,25 |
combo1 | 1 Suco e 1 Sanduíche | R$ 9,50 |
combo2 | 1 Café e 1 Sanduíche | R$ 7,50 |
Atualmente a Lanchonete aceita as seguintes formas de pagamento:
- dinheiro
- debito
- credito
O sistema deve receber essa informação como string, utilizando a grafia exatamente igual aos exemplos acima.
- Pagamento em dinheiro tem 5% de desconto
- Pagamento a crédito tem acréscimo de 3% no valor total
- Caso item extra seja informado num pedido que não tenha o respectivo item principal, apresentar mensagem "Item extra não pode ser pedido sem o principal".
- Combos não são considerados como item principal.
- É possível pedir mais de um item extra sem precisar de mais de um principal.
- Se não forem pedidos itens, apresentar mensagem "Não há itens no carrinho de compra!"
- Se a quantidade de itens for zero, apresentar mensagem "Quantidade inválida!".
- Se o código do item não existir, apresentar mensagem "Item inválido!"
- Se a forma de pagamento não existir, apresentar mensagem "Forma de pagamento inválida!"
Você está recebendo uma estrutura básica para desenvolver a lógica do caixa. O arquivo principal está localizado dentro da pasta src
e se chama caixa-da-lanchonete.js
. Você pode desenvolver a sua lógica criando outros arquivos, métodos e até mesmo outras classes, porém o resultado deve poder ser obtido através do método calcularValorDaCompra
.
ALERTA: É importante que a estrutura básica descrita acima não seja alterada, incluindo nome e parâmetros do método. Iremos validar sua solução através destes, assim como você pode validar através dos cenários de testes já implementados em
src/caixa-da-lanchonete.test.js
.
- Instalar o Node
- Instalar dependencias do projeto com o seguinte comando:
npm install
Junto com a estrutura básica você está recebendo alguns cenários de testes para auxiliar na validação da sua solução. Recomendamos que você crie mais casos de teste para aumentar a confiabilidade da sua solução. Para testar sua solução com os cenários já criados, basta rodar o seguinte comando:
npm test
Para saber mais consulte a Documentação do Jest.
O método calcularValorDaCompra
recebe dois parâmetros, formaDePagamento
e itens
, sendo o primeiro uma string com os possíveis valores válidos: debito
, credito
e dinheiro
. O segundo parâmetro contém uma array dos itens que serão comprados. Cada item é uma string contendo o código do item e a quantidade do mesmo separados por uma vírgula.
EXEMPLO:
['cafe,1','chantily,1']
O retorno do método calcularValorDaCompra
deve ser sempre uma string e conteúdo dela pode ser ou o valor total da compra ou uma mensagem de erro conforme as regras descritas anteriormente. O valor da compra deve ser formatado com R$
e decimais separados por vírgula.
Para padronizar a quantidade de decimais, utilize o método toFixed
do JavaScript. Esse método serve o propósito deste desafio, porém na vida real a regra de arredondamento deve ser conferida! Para saber mais consulte a Documentação do Number.
EXEMPLO:
// exemplo de saída do valor da compra
"R$ 6,00"
// exemplo de saída de erro
"Forma de pagamento inválida!"
EXEMPLO 1: Compra de chantily sem café.
new CaixaDaLanchonete()
.calcularValorDaCompra('debito', ['chantily,1']);
O resultado esperado deve ser:
"Item extra não pode ser pedido sem o principal"
EXEMPLO 2: Compra de café com chantily.
new CaixaDaLanchonete()
.calcularValorDaCompra('debito', ['cafe,1','chantily,1']);
O resultado esperado deve ser:
"R$ 4,50"
EXEMPLO 3: Compra de combo e dois cafés
new CaixaDaLanchonete()
.calcularValorDaCompra('credito', ['combo1,1','cafe,2']);
O resultado esperado deve ser:
"R$ 15,96"