Coder Social home page Coder Social logo

joivo / list-to-me Goto Github PK

View Code? Open in Web Editor NEW
0.0 0.0 0.0 328 KB

Implementação protótipo dos monitores para o projeto da disciplina de Laboratório de Programação II, na UFCG.

Java 100.00%
easy-accept java-8 junit5 learning-java object-oriented-programming

list-to-me's Introduction

Hi there, I'm Joivo 👋

Although I am currently serving as a DevOps Engineer, my fascination and genuine curiosity lie within the realms of software engineering, unraveling the complexities of distributed systems, and exploring the subtleties of platform engineering, particularly in infrastructure platforms.

🛠️ Skills

  • Cloud Platforms: AWS, GCP, Azure, OpenStack
  • Containers & Orchestration: Docker, Kubernetes
  • Continuous Integration & Continuous Deployment (CI/CD): Jenkins, GitLab CI, GitHub Actions
  • Infrastructure as Code (IaC): Terraform, Ansible, Puppet
  • Monitoring & Logging: Prometheus, Grafana, ELK, Logz, Datadog
  • Networking: TCP/IP, DNS, Load Balancers, 5G
  • Operating Systems: Unix/Linux, Windows Server

📊 Stats

Joivo's GitHub stats

🔝 Languages

Top Langs

📫 Contact

list-to-me's People

Contributors

damiaorobson avatar joivo avatar lucasmedeiros avatar mourats avatar pedrohcm avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

list-to-me's Issues

US4

Caso de uso 4: Pesquisar listas de compras Listas de compras inseridas no Lista pra mim© podem ser pesquisadas da seguinte forma: Usando o descritor da lista. Neste caso, apenas uma lista de compras deve ser retornada, já que o Lista pra mim© não aceita descritores repetidos. Uma representação em String da lista de compras deve ser retornada, seguindo a mesma ordenação de impressão da lista de compras; Usando uma data. Neste caso o Lista pra mim© deve retornar todos os descritores as listas de compras criadas na data específica. Esta pesquisa deve retornar uma String com todos os descritores das listas de compras criadas na data especificada, ordenados em ordem lexicográfica crescente dos descritores. Exemplo: Compras extra atacadão Feira de 23/05/2018 Produtos naturais Usando o código de um item comprável. Esta pesquisa deve retornar os descritores de todas as listas de compras que contemplam o item especificado, ordenadas pela data de criação das listas. As datas de criação também devem ser retornadas na String de resposta. Exemplo: 02/05/2018 - Compras atacadão 15/05/2018 - Compras de mês 23/05/2018 - Limpeza 25/05/2018 (No caso em que várias listas forem criadas na mesma data, seus descritores devem ser ordenados em ordem lexicográfica crescente).

deletaItem(id) não funciona quando o item foi atualizado anteriormente

Teste:

atualizaItem id=${id1} atributo="nome" novoValor="banana maca"
deletaItem id=${id1}
expectError "Item nao existe." listaItem id=${id1}

O que deveria acontecer: Aparecer o erro que o item não existe
O que acontece: listaItem funciona normal, e o item não é deletado da lista de itens

Como resolver (sugestão): Alterar método hashcode do Item para utilizar apenas o id (visto que é o único atributo de Item que não pode ser alterado), visto que se colocar atributos no cálculo do hashcode e eles mudarem, ele muda e ele não é mais reconhecido pelo HashSet de Item, impossibilitando sua remoção.

listaItensPorCategoria não está respeitando a ordem alfabética

Ao testar o método listaItensPorCategoria() passando "alimento industrializado" como parâmetro, a saída não está na ordem alfabética.
Resultado:
"2. Peito de peru Saara, alimento industrializado, Preco por quilo: <> |8. Capsula Dois Coracoes, alimento industrializado, 8 capsulas, Preco: <> |9. Costela suina Sabia, alimento industrializado, Preco por quilo: <> |10. Batata Tentacoes, alimento industrializado, Preco: <> |11. Iogurte Lactivia, alimento industrializado, Preco: <> |"

Esperado:
"10. Batata Tentacoes, alimento industrializado, Preco: <> |8. Capsula Dois Coracoes, alimento industrializado, 8 capsulas, Preco: <> |9. Costela suina Sabia, alimento industrializado, Preco por quilo: <> |11. Iogurte Lactivia, alimento industrializado, Preco: <> |2. Peito de peru Saara, alimento industrializado, Preco por quilo: <> |"

Acredito que pelo padrão no resultado, o problema esteja na inclusão do id na comparação do toString(), pois os números estão vindo na ordem natural.

O uso perceptível do " |" nessa listagem está sendo abordado com a professora. O easy accept não suporta o uso do System.lineSeparator() e essa é solução que eu usei já foi usada em projetos anteriores.

US4 - Test

Erro no adicionar item na lista de compra.
Erro:

At line 26: Erro na compra de item: lista de compras ainda nao existe.

US1

Caso de uso 1: CRUD dos itens compráveis

  • Deve ser possível fazer CRUD (Create, read, update and delete) de itens compráveis no Lista pra mim©.
  • Todo item comprável deve manter as seguintes informações obrigatoriamente: identificador único numérico, nome, categoria e mapa de preços. O identificador numérico deve ser gerado automaticamente pelo sistema.
  • Não deve ser permitido que itens iguais sejam adicionados no sistema. Dois itens compráveis são iguais se eles tem o mesmo nome e categoria.
  • As categorias contempladas no Lista pra mim© são: alimentos industrializados, alimentos não industrializados, limpeza e higiene pessoal.

Os itens compráveis podem ser de três tipos:

  • Produtos com quantidade fixa (por exemplo, frasco de detergente Brilhol com 500ml, ou saco de algodão Clemer com 300g, ou caixa com 18 ovos). Esses itens devem manter a quantidade e a medida do produto. No exemplo do detergente a quantidade é 500 e a medida é mililitro, já para o algodão a quantidade é 300 e a medida grama. Já no caso do ovo a quantidade é 18 e a medida é "unidade do produto";
  • Produtos não industrializados por quilo. Em geral são os produtos de açougue e hortifruti;
  • Produto por unidade, como pacote de biscoito recheado Vox, ou copo de requeijão cremoso fofonlí, ou ainda abacaxi. A maioria dos produtos de higiene pessoal e alimentos industrializados recai nessa classe de itens.

Cálculo do Preço:

O mapa de preços existe para todo item comprável e vai sendo atualizado cada vez que o usuário compra um item em um estabelecimento e obtém o preço do produto. Neste mapa são acumulados os preços para diferentes estabelecimentos de compra.

  • Para os produtos com quantidade fixa, o preço será o preço total da quantidade fixa estabelecida, por exemplo, o preço do pacote de algodão de 300 gramas.
  • Para os produtos por unidade, o preço é pela unidade, por exemplo, o preço de uma unidade de abacaxi ou de uma unidade de pacote de biscoito Vox.
  • Já para os itens não industrializados por quilo, o preço definido deve ser por quilo.

Deve ser possível ter uma representação de String de um item comprável das seguintes formas:

  • Se for produto com quantidade fixa:
  1. Algodão Clemer, higiene pessoal, 300 gramas, Preço: <Supermercado BaratoD+, R$ 2,33; Baratão, R$ 2,30>
  • Se for produto não industrializado por quilo:
  1. Chuchu, alimentos não industrializados, Preço por quilo: <Supermercado BaratoD+, R$ 1,34; Baratão, R$ 1,30>
  • Se for um produto por unidade:
  1. Queijo minas Dali, alimentos industrializados, Preço: <Baratão, R$ 4,30>

Adicionar/remover/pesquisar/atualizar um item no Lista pra mim© significa adicionar/remover/pesquisar/atualizar um item na coleção de itens daquela instalação do app. Não existe um usuário específico, todos os usuários que acessam o app pelo mesmo celular irá ver a mesma coleção de itens compráveis. A pesquisa de itens oferecida pelo sistema deve usar o seu identificador e portanto pode retornar apenas um item. Todos os atributos de itens compráveis podem ser atualizados, exceto o seu identificador único.

US4 - Pesquisa lista

pesquisaListaDeCompra, pesquisaListasDeComprasPorData e pesquisaListasDeComprasPorItem estão retornando

Verificar novoValor na atualização de atributos do item

Teste: atualizaItem id=${id1} atributo="nome" novoValor=""

Esperado: "Erro na atualizacao de item: nome nao pode ser vazio ou nulo."
O que acontece: atualiza e deixa o nome vazio
1. , alimento nao industrializado, Preco por quilo: <> -- saída do listaItem

É legal fazer essa verificação com os outros atributos também (ex: categoria, valores, etc.).

US3 - adicionaCompraALista

Não está aceitando o double, como mostra erro abaixo.

At line 41:Problems during Type Conversion - 1.5 to class java.lang.Integer
At line 43:Problems during Type Conversion - 2.0 to class java.lang.Integer
At line 44:Problems during Type Conversion - 0.5 to class java.lang.Integer

OBS: mas está ocorrendo uma inconsistência, as vezes funciona como deveria, aceitando a quantidade em double.

Validação da categoria do item

O que deveria acontecer:

expectError "Erro no cadastro de item: o valor de categoria nao eh valido." adicionaItem nome="Banana" categoria="fruta" kg=1

O que acontece: adiciona normalmente

US4 - Test & Exception

Métodos:
pesquisaListasDeComprasPorData;
pesquisaListasDeComprasPorItem;

Não estão retornando as descrições, estão retornando "but was <>".

  • Necessário método auxiliar para testar a lista de descrições de pesquisaListasDeComprasPorData e pesquisaListasDeComprasPorItem.

Exception:
Método pesquisaListasDeComprasPorData com a data de criação data="01/01/2000" não está ocorrendo erro, neste caso não há lista com essa data.

US3 - Test & excption

Está ocorrendo um erro na pesquisa da lista de compras, ela já estando criada, tanto no método de pesquisa quando adicionar o item a lista de compras.
erro:

At line 24: Unexpected error: Erro na pesquisa de compra:
At line 28: Erro na compra de item: lista de compras ainda nao existe.


As exception estão informando erro de pesquisa, concertando o bug do caso 3 talvez acerto as exceptions.
Erro:

Expected the error message , but the error message was

finalizacao de lista esta retornando erro que não deveria
Erro:
msg que retorna: Erro na finalizacao de lista de compras:

Mensagem de erro de unidade de medida

A mensagem de erro retornada quando a unidade de medida é vazia ou nula é "Erro no cadastro de item: valor de unidade de medida nao pode ser menor que zero.".

Sugestão: "Erro no cadastro de item: unidade de medida nao pode ser vazia ou nula."

US2

Caso de uso 2: outras funcionalidades de pesquisa de itens

Uma vez que o sistema já conhece os itens compráveis, chegou a hora de escrever algumas funcionalidades interessantes.

  • O sistema deve permitir uma listagem de todos os itens cadastrados no sistema, ordenada em ordem alfabética pela representação em string do item;
  • O sistema deve permitir uma listagem de todos os itens cadastrados no sistema de uma dada categoria, ordenada em ordem alfabética pela representação em string do item;
  • O sistema deve permitir uma listagem de todos os itens inseridos no sistema ordenada em ordem crescente do menor preço cadastrado para os itens. Nesta pesquisa apenas os itens que tiverem pelo menos um preço cadastrado aparecem;
  • O sistema deve listar todos os itens relacionados a uma dada string de pesquisa. Se por exemplo, o usuário digitar algodão, então todos os itens cujo nome contém a string "algodão" devem ser listados. Essa pesquisa não deve ser sensível a maiúscula/minúscula, assim, se a pesquisa foi da string "algodão", mas no nome do item está armazenado "Algodão", esse item deve ser selecionado na pesquisa. Essa listagem deve ocorrer em ordem alfabética considerando a representação em string do item.

Implemente a parte da classe de fachada e o(s) controlador(es) necessários para lidar com as classes/funcionalidades criadas neste caso de uso.

US5

Caso de uso 5: Geração automática de listas de compras O Lista pra mim© deve ser capaz de gerar listas de compras para a comodidade de seus usuários. Não é indicado que uma lista de compras já finalizadas seja modificada, pois no futuro os desenvolvedores do Lista pra mim© pretendem gerar relatórios da história das compras, estatísticas de preço, etc. A geração de listas de compras automática segue estratégias diferentes: Estratégia 1: essa estratégia apenas repete a lista de compras mais recentemente criada. O descritor dessa nova lista de compras é "Lista automática 1 dd/mm/aaaa". Essa data corresponde à data na qual essa lista automática está sendo gerada. Esta lista de compras inicia sem um preço final e não finalizada; Estratégia 2: nessa estratégia uma lista de compras é gerada usando como base um item de compra específico que deve ser especificado pelo usuário. O Lista pra mim© deve encontrar a última lista de compras que contempla o item de compra indicado pelo usuário. O descritor dessa nova lista de compras é "Lista automática 2 dd/mm/aaaa". Essa data corresponde à data na qual essa lista automática está sendo gerada. Esta lista de compras inicia sem um preço final e não finalizada; Estratégia 3: A última estratégia gera uma lista de compras com os itens de compras que mais aparecem nas listas de compras anteriores. Para que um item de compras entre nessa lista ele tem que ter aparecido em pelo menos metade das listas de compras já inseridas no app. O descritor dessa nova lista de compras é "Lista automática 3 dd/mm/aaaa". Essa data corresponde à data na qual essa lista automática está sendo gerada. Esta lista de compras inicia sem um preço final e não finalizada.

US4 - Exception

• pesquisaListaDeCompras(): não retorna erro mesmo pondo uma lista que não existe na descrição.
msg: (no message: exception = java.lang.NullPointerException)

• pesquisaListasDeComprasPorData(): nao retorna erro para data que nao existe lista cadastrada no sistema.
msg: but no error occurred.

• pesquisaListasDeComprasPorItem(): retorna erro incompleto para id que não existe em lista e nem cadastrado no sistema.
msg:

• pesquisaListasDeComprasPorItem(): não ocorre erro para id que não está adicionado para uma lista de compra, mas está cadastrado no sistema.
msg: no error occurred.

US1 - Exception

Preço do item com dois dígitos e
Preço retornando com ponto ao invés de vírgula

id5=adicionaItemPorUnidade nome="Esponja de Aco Assolange" categoria="limpeza" unidade=1 localDeCompra="Supermercado BuyMore" preco="3.50"

Esperado:
expect ${id5}". Esponja de Aco Assolange, limpeza, Preco: <Supermercado BuyMore, R$ 3,50;>" exibeItem id=${id5}

O que é retornado:

expect ${id5}". Esponja de Aco Assolange, limpeza, Preco: <Supermercado BuyMore, R$ 3.5;>" exibeItem id=${id5}

US6

Caso de uso 6: Sugestão do melhor estabelecimento para as compras Com base nos preços cadastrados nos itens de compra, o Lista pra mim© deve ser capaz de indicar o estabelecimento que vai resultar no menor preço para uma determinada lista de compras. É possível que não exista informação de preço para todos os produtos em todos os estabelecimentos de compra. Isso não deve impedir que o app sugira um estabelecimento. A sugestão dada deve levar em conta apenas os preços dos produtos cadastrados para os estabelecimentos de forma comparativa, assim, apenas os itens com preços em todos os estabelecimentos devem ser considerados para essa decisão. Vejamos um exemplo:

1 Algodão Clemer, higiene pessoal, 300 gramas 2 Sabão líquido Pomo, limpeza, 1 litro 1 Queijo minas Dali, alimentos industrializado 0,5 kg Chuchu, alimentos não industrializados 2,0 kg Carne moída extra light, alimentos não industrializados

Considerando as informações que temos para estes itens de compra (ver abaixo), percebemos que os dois estabelecimentos mais mencionados são BaratoD+ e Baratão. Nesse caso, o software que sugere o melhor lugar para realizar as compras deve indicar os itens que registraram preços para BaratoD+ e Baratão.

Algodão Clemer, higiene pessoal, 300 gramas, Preço: <Supermercado BaratoD+, R$ 2,33; Baratão, R$ 2,30>
Sabão líquido Pomo, limpeza, 1 litro, Preço: <Supermercado BaratoD+, R$ 12,89; Baratão, R$ 12,30>
Chuchu, alimentos não industrializados, Preço por quilo: <Supermercado BaratoD+, R$ 1,34; Baratão, R$ 1,30>
Queijo minas Dali, alimentos industrializados, Preço: <Baratão, R$ 4,30>
Carne moída extra light, alimentos não industrializados, Preço por quilo: <Supermercado BaratoD+, R$ 42,34; Baratão, R$ 41,30>
Neste exemplo, não é possível comparar o preço dessas compras incluindo o queijo minas, já que para este queijo só há registro de preço para o supermercado Baratão. Esta funcionalidade deve indicar os dois estabelecimentos mais indicados para estas compras e o preço parcial das compras em cada um, apresentando primeiro quem tem o menor preço parcial:

Baratão, R$ 113,46 BaratoD+, R$ 110,15

Com base nesses itens o Baratão deve ser o melhor lugar para fazer essas compras. No caso em que os locais de compra mais registrados não tenham itens em comum, essa funcionalidade deve indicar esse problema.

Faltam dados para identificar se o melhor local de compra e o Baratão ou o BaratoD+

US3

Caso de uso 3: CRUD de listas de compra O app deve permitir a criação de listas de compra. Uma lista de compras é caracterizada por um descritor e uma coleção de itens a comprar, ou compras. A lista de compras também insere automaticamente um atributo que identifica a data/hora em que a lista de compras foi criada. O descritor deve descrever a compra, por exemplo, "feira 23/05/2018". Cada compra deve indicar a quantidade e o item comprável. Quando o item comprável for um produto industrializados por quilo, é possível que a quantidade a ser comprada seja um valor não inteiro. O identificador único do item comprável deve ser usado para indicar o item de interesse. Para os outros tipos de itens apenas valores inteiros são aceitos. Deve ser possível adicionar, remover e atualizar as compras de uma lista de compras. A atualização deve ocorrer apenas na quantidade a ser comprada e não do item comprável em si. Quando uma atualização modificar a quantidade de um item comprável para zero, então este item deve ser removido da lista. Uma compra de uma lista de compras pode ser pesquisada usando o identificador do item a ser comprado. Cada item comprável só pode aparecer uma vez em cada lista de compra, assim não deve ser possível inserir mais de uma compra para o mesmo item em uma lista de compras.

O Lista pra mim© não permite que descritores de listas de compras sejam repetidos. Se já existir no sistema uma lista com o descritor "feira 23/05/2017" então nenhuma outra lista de compra pode ter o mesmo descritor.

Deve ser possível imprimir uma lista de compras como a seguir:

1 Algodão Clemer, higiene pessoal, 300 gramas 2 Pasta dental DDS, higiene pessoal, 120 gramas 5 Sabonete de aveia Dorene, higiene pessoal, 80 gramas 2 Sabão líquido Pomo, limpeza, 1 litro 1 Creme de ricota Rocotó, alimentos industrializados 2 Iogurte Lactivia, alimentos industrializado 1 Queijo minas Dali, alimentos industrializado 0,5 kg Chuchu, alimentos não industrializados 1,5 kg Tomate, alimentos não industrializados 2,0 kg Carne moída extra light, alimentos não industrializados

Note que a lista está ordenada em 2 níveis. Em um primeiro nível está ordenada pela categoria do tipo do item na ordem default: higiene pessoal, limpeza, alimentos industrializados e alimentos não industrializados. Dentro de cada categoria os itens são ordenados pelo nome em ordem crescente.

Finalmente, uma vez realizadas as compras da lista, o usuário deve finalizar essa lista e registrar na lista o local onde a compra foi realizada e o valor final da compra. Então além das informações já mencionadas anteriormente que devem ser armazenadas em uma lista de compras, essas duas novas informações devem ser adicionadas.

US7

Caso de uso 7: Persistência

O Lista pra mim© deve armazenar em disco todos os dados necessários para manter o seu estado mesmo que o programa seja fechado. Assim, se eu usar o programa, adicionar listas de compras e itens de compra, gerar novas listas automaticamente, modificar as listas, etc. tudo isso deve ser visto se eu fechar o programa e abrir novamente.

Implemente a parte da classe de fachada e o(s) controlador(es) necessários para lidar com as classes/funcionalidades criadas neste caso de uso. Testes de aceitação disponíveis aqui.

US1 - Validation

Implement data validation in the item controller. It is ideal encapsulate validation operations in the Validator class (util/Validator).

listaItensPesquisa não está funcionando como a descrição do projeto

Segundo o projeto:
O sistema deve listar todos os itens relacionados a uma dada string de pesquisa. Se por exemplo, o usuário digitar algodão, então todos os itens cujo nome contém a string "algodão" devem ser listados. Essa pesquisa não deve ser sensível a maiúscula/minúscula, assim, se a pesquisa foi da string "algodão", mas no nome do item está armazenado "Algodão", esse item deve ser selecionado na pesquisa. Essa listagem deve ocorrer em ordem alfabética considerando a representação em string do item.

Mas, o método funciona apenas se a string pesquisada representa toda a string do nome.
expect "" listaItensPesquisa strPesquisada="agua"
Esse teste passa, mas não deveria, porque existe dois itens cadastrados com "agua" no nome.
listaItensPesquisa strPesquisada="agua mineral"
Assim retorna o item com o nome equivalente a "Agua Mineral"

US3 - Exception

Realizado testes de Exception da case 3
Retorno de mensagens de exceções não condizentes com a função e casos que não estão retornando exceções.

case3_exception já no repositório.

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.