**Crie o teste em: ** tests/product/test_product.py
Ao analisar o código do projeto, você encontrará a classe do objeto produto já implementada neste arquivo: inventory_report/inventory/product.py, a classe Product.
Para termos confiança em continuar as implementações, precisamos que você implemente o teste, que certifique que o método __init__ da classe Product esta funcionando corretamente.
O nome deste teste deve ser test_cria_produto, ele deve verificar o correto preenchimento dos seguintes atributos:
- id (int)
- nome_da_empresa (string)
- nome_do_produto (string)
- data_de_fabricacao (string)
- data_de_validade (string)
- numero_de_serie (string)
- instrucoes_de_armazenamento (string)
🤖 O que será verificado pelo avaliador
- 1 - Deve criar um novo produto com todos os atributos corretamente preenchidos.
📌Como seu teste é avaliado
O teste da Trybe irá avaliar se o seu teste está passando conforme seu objetivo, e confirmará se ele está falhando em alguns casos que deve falhar. Para estes testes que esperemos que falhe, o requisito será considerado atendindo quando a resposta do Pytest forXFAIL(Expected Fail), ao invés de PASS ou FAIL.
Crie o teste em: tests/product_report/test_product_report.py
Boa novidade, o primeiro relatório já implementamos neste arquivo inventory_report/inventory/product.py. Formulamos uma frase construída com as informações do produto, que será muito útil para etiquetarmos o estoque.
Para desenvolver este relatório, utilizamos o recurso __repr__ do Python, que permite alterar a representatividade do objeto, para que sempre que usarmos um print nele, no lugar de endereço de memória, teremos uma String personalizada.
Dica: A reimplementação do __repr__ não faz o objeto retornar exatamente uma string, fazer um cast para string, pode te ajudar.
Exemplo da frase:
O produto
farinhafabricado em01-05-2021porFarininicom validade até02-06-2023precisa ser armazenadoao abrigo de luz.
Agora para mantermos uma boa cobertura de testes, precisamos que você implemente o teste.
O nome deste teste deve ser test_relatorio_produto, ele deve instanciar um objeto Product e verificar se acessá-lo a frase de retorno esta correta.
🤖 O que será verificado pelo avaliador
- 1 - Se seu código testa que o retorno padrão (
__repr__) de um objetoProductdeve ser um relatório sobre ele
📌Como seu teste é avaliado
O teste da Trybe irá avaliar se o seu teste está passando conforme seu objetivo, e confirmará se ele está falhando em alguns casos que deve falhar. Para estes testes que esperemos que falhe, o requisito será considerado atendindo quando a resposta do Pytest forXFAIL(Expected Fail), ao invés de PASS ou FAIL.
Crie a classe em: inventory_report/reports/simple_report.py
O relatório deve ser gerado através de um método de classe chamado generate escrito dentro da classe SimpleReport.
- Ao rodar os testes localmente, você terá um teste para cada validação de cada informação
- Deve ser possível executar o método
generatesem instanciar um objeto deSimpleReport - O método deve receber um parâmetro que representa uma
list(estrutura de dados), onde cada posição contém umdict(estrutura de dados).
Exemplo de formato de entrada
[
{
"id": 1,
"nome_do_produto": "CADEIRA",
"nome_da_empresa": "Forces of Nature",
"data_de_fabricacao": "2022-04-04",
"data_de_validade": "2023-02-09",
"numero_de_serie": "FR48",
"instrucoes_de_armazenamento": "Conservar em local fresco"
}
]- O método deverá retornar uma
stringde saída com o seguinte formato:Data de fabricação mais antiga: YYYY-MM-DD Data de validade mais próxima: YYYY-MM-DD Empresa com mais produtos: NOME DA EMPRESA
- A data de validade mais próxima, somente considera itens que ainda não venceram.
Dica: O módulo datetime pode te ajudar.
🤖 O que será verificado pelo avaliador
-
3.1 - O método generate da classe SimpleReport deve retornar todas informações do relatório simples. Informações necessárias:
- a data de fabricação mais antiga
- a validade mais próxima
- a empresa com maior número de produtos
-
3.2 - O método generate da classe SimpleReport deve retornar o formato correto do relatório simples
📌 Atente-se a espaçamentos e quebras de linhas
Crie em: inventory_report/reports/complete_report.py
O relatório deve ser gerado através de um método generate para a classe CompleteReport.
Ele deverá receber dados numa lista contendo estruturas do tipo dict e deverá retornar uma string formatada como um relatório.
-
A classe
CompleteReportdeve herdar o método (generate) da classeSimpleReport, de modo a especializar seu comportamento. -
Deve ser possível executar o método
generatesem instanciar um objeto deCompleteReport -
O método deve receber de parâmetro uma lista de dicionários no seguinte formato:
[ { "id": 1, "nome_do_produto": "MESA", "nome_da_empresa": "Forces of Nature", "data_de_fabricacao": "2022-05-04", "data_de_validade": "2023-02-09", "numero_de_serie": "FR48", "instrucoes_de_armazenamento": "Conservar ao abrigo de luz" } ] -
O método deverá retornar uma saída com o seguinte formato:
Data de fabricação mais antiga: YYYY-MM-DD
Data de validade mais próxima: YYYY-MM-DD
Empresa com mais produtos: NOME DA EMPRESA
Produtos estocados por empresa:
- Physicians Total Care, Inc.: QUANTIDADE
- Newton Laboratories, Inc.: QUANTIDADE
- Forces of Nature: QUANTIDADE🤖 O que será verificado pelo avaliador
- 2.1 - O método generate da classe CompleteReport deve retornar todas informações do relatório completo no formato correto. Informações necessárias:
- a data de fabricação mais antiga
- a validade mais próxima
- a empresa com maior estoque
- a quantidade de produtos por empresa, ordenado pela mesma ordem que as empresas aparecem na lista de entrada
Crie em: inventory_report/inventory/inventory.py
A importação do arquivo CSV deve ser realizada através do método import_data que você deve criar em uma classe chamada Inventory.
O método deve ser estático ou de classe, ou seja, deve ser possível chamá-lo sem instanciar um objeto da classe.
O método receberá como primeiro parâmetro uma string como caminho para o arquivo CSV e como segundo parâmetro uma string que representa o tipo de relatório a ser gerado. Tipos:
"simples""completo"
De acordo com os parâmetros recebidos, deve recuperar os dados do arquivo e chamar o método de gerar relatório correspondente à entrada passada. Ou seja, o método da classe Inventory deve chamar o método generate da classe que vai gerar o relatório (SimpleReport, CompleteReport).
🤖 O que será verificado pelo avaliador
- 3 - Ao importar um arquivo CSV, deve retornar o relatórios simples ou o completo conforme solicitado.
Incremente em:
inventory_report/inventory/inventory.py.
📌 Utilize o mesmo método do requisito anterior.
Altere o método import_data para que ele também seja capaz de carregar arquivos JSON.
Como no requisito anterior, o método ainda receberá como primeiro parâmetro uma string como caminho para o arquivo, e como segundo parâmetro uma string que representa o tipo de relatório a ser gerado. Tipos:
"simples""completo"
De acordo com os parâmetros recebidos, deve recuperar os dados do arquivo e chamar o método de gerar relatório correspondente à entrada passada. Ou seja, o método da classe Inventory deve chamar o método generate da classe que vai gerar o relatório (SimpleReport, CompleteReport).
🤖 O que será verificado pelo avaliador
- 4 - Ao importar um arquivo JSON, deve retornar o relatórios simples ou o completo conforme solicitado.
Incremente em:
inventory_report/inventory/inventory.py.
📌 Utilize o mesmo método do requisito anterior.
Altere o método import_data para que ele também seja capaz de carregar arquivos XML.
Como no requisito anterior, o método ainda receberá como primeiro parâmetro uma string como caminho para o arquivo, e como segundo parâmetro uma string que representa o tipo de relatório a ser gerado. Tipos:
"simples""completo"
De acordo com os parâmetros recebidos, deve recuperar os dados do arquivo e chamar o método de gerar relatório correspondente à entrada passada. Ou seja, o método da classe Inventory deve chamar o método generate da classe que vai gerar o relatório (SimpleReport, CompleteReport).
🤖 O que será verificado pelo avaliador
- 5 - Ao importar um arquivo XML, deve retornar o relatórios simples ou o completo conforme solicitado.