Code Monkey home page Code Monkey logo

teste-backend-v3's Introduction

Teste Backend

Aiko

Apresentação e estado atual da aplicação

Essa aplicação é usada por uma companhia de teatro para gerar extratos impressos a partir das faturas de seus clientes.

A companhia é contratada pelos clientes para múltiplas apresentações e a cobrança é feita baseada no número de linhas de cada peça apresentada, no tamanho da platéia e no gênero da peça. Atualmente os gêneros trabalhados pela companhia são tragédia e comédia.

Para cada apresentação são também gerados créditos, que são um tipo de mecanismo de fidelização que os clientes podem usar para obter descontos em futuras apresentações. O total de créditos gerados é também mostrado no extrato.

Novas funcionalidades desejadas

A companhia de teatro pretende adicionar o gênero histórico ao seu repertório, então o software deve ser capaz de calcular os valores e créditos também para esse gênero. Provavelmente virão mais gêneros no futuro, então o design deve estar pronto para acomodar novos gêneros sem muita dificuldade.

Também desejam que o extrato possa ser gerado como um XML, além do formato de texto atualmente suportado. Novamente, é bom que o design facilite que futuramente esse extrato seja emitido em novos formatos, pois certamente é uma questão de tempo até surgir essa demanda.

Especificação da atividade

Este é um exercício de refatoração. O design inicial da aplicação é pouco testável, portanto os únicos testes que a aplicação possui no momento são os ApprovalTests para validar a saída final. É esperado que você torne o código mais testável e então adicione testes unitários que validem a aplicação de forma mais granular e que dêem segurança para futuras refatorações e para o acréscimo das novas funcionalidades.

O projeto de testes possui três ApprovalTests.

  • O teste TestStatementExampleLegacy, está passando no estado atual do código. Este teste servirá para te dar segurança das primeiras refatorações até que você escreva os testes unitários, mas ao final, com as funcionalidades novas implementadas, este teste se torna obsoleto.
  • O teste TestTextStatementExample está implementado, porém não executa, pois o gênero histórico ainda não está implementado.
  • O teste TestXmlStatementExample não está implementado e deve ser implementado por você e gerar a saída aprovada que está no projeto de testes.

O código dos testes dados pode ser refatorado, desde que a saída continue a mesma e os testes continuem cumprindo o mesmo propósito. É esperado que você implemente as novas funcionalidades pedidas para que todos os ApprovalTests passem.

Faça commits com frequência para que sua abordagem de refatoração seja mostrada pelo histórico de versões.

Regras de negócio

  • O valor base para a cobrança de todas as peças é o número de linhas da peça dividido por 10
  • O número de linhas da peça considerado para o cálculo do valor base deve ser forçado a estar no intervalo entre 1000 e 4000
  • O valor para uma peça de tragédia é igual ao valor base caso a platéia seja menor ou igual a 30, somando mais 10.00 para cada espectador adicional a esses 30
  • Para uma peça de comédia, o cálculo base é sempre somado a 3.00 por espectador. Além disso, se a platéia for maior que 20, o valor deve ser aumentado em 100.00 e deve se somar mais 5.00 por espectador adicional aos 20 de base
  • Todas performances dão 1 crédito para cada espectador acima de 30, não valendo nenhum crédito para uma platéia menor ou igual a 30
  • Existe um bônus de créditos de um quinto da platéia arredondados para baixo, exclusivo para peças de comédia
  • As peças históricas são, por algum motivo, mais complicadas e têm o valor igual à soma dos valores correspondentes a uma peça de tragédia e uma de comédia
  • A estrutura do XML deve seguir como referência a saída aprovada no ApprovalTest correspondente

Entregas

Para realizar a entrega do teste você deve:

  • Relizar o fork e clonar esse repositório para sua máquina.

  • Criar uma branch com o nome de teste/[NOME].

    • [NOME]: Seu nome.
    • Exemplos: teste/fulano-da-silva; teste/beltrano-primeiro-gomes.
  • Realize o pull request da sua branch nesse repositório.

teste-backend-v3's People

Contributors

xauuug avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.