Desenvolva a disponibilidade de livros em Python
Esta é uma nova funcionalidade em uma aplicação existente, não uma solicitação para regenerar toda a biblioteca. Acompanhe a alteração desde a entrada do menu até o resultado observado.
Resumo do laboratório

Ilustração conceitual original (SVG)
| Em resumo | Sua rota |
|---|---|
| Nível e tempo | 200; 70 minutos (estimativa de facilitação) |
| Ação inicial | Use datas controladas e teste uma cópia disponível e uma emprestada. |
| Materiais do aluno | Baixe 03-python.zip |
| Workspace | Abra a raiz do kit extraído; execute a baseline de library relativa a essa raiz |
| Verificação inicial esperada | Os testes unittest existentes são descobertos e passam. |
| Ajuda de configuração | Baixe, extraia, Git local e GitHub opcional |
[!NOTE] Um helper aprovado ainda está incompleto até o menu de console alcançá-lo.
Conceitos · Primeira tarefa · Lista de evidências · Redefinir
Objetivos de aprendizagem
- Defina a semântica de busca e disponibilidade antes da implementação.
- Use as interfaces e a raiz de importação reais do Python.
- Conecte uma funcionalidade testada às ações existentes do console.
Antes de começar
Prepare 03-python usando a configuração comum e abra somente a
cópia. Execute os comandos a seguir a partir do diretório library dela. A
fixture da funcionalidade incluída
usa dados JSON sintéticos.
Conceitos e casos de uso
A busca normaliza a entrada para correspondência, não necessariamente para armazenamento. A disponibilidade
pertence a um book_item, não a todos os exemplares de um book.
Um empréstimo ativo é aquele sem data de devolução; uma data de vencimento no passado não o devolve.
Cenário do exercício
A pessoa bibliotecária solicita busca parcial por título e disponibilidade por exemplar. Novos empréstimos, reservas, contas e alterações de persistência estão fora do escopo.
Tarefa 1 - Inspecione o fluxo e a linha de base
python -m unittest discover -s tests -p "test_*.py" -v
- Registre a descoberta de testes e os resultados.
- Leia
console/common_actions.py,console/console_app.py, as entidades e os métodos dos repositórios JSON. - Peça um rastreamento da busca existente de usuários e dos pontos propostos de inserção da busca de livros. Verifique os nomes dos métodos nesta fixture Python.
- Inspecione como os empréstimos são vinculados a
book_itemepatron.
Tarefa 2 - Estabeleça o contrato
| ID | Caso | Comportamento esperado |
|---|---|---|
| BOOK-1 | Mistura de maiúsculas e minúsculas e espaços nas extremidades | Correspondência parcial normalizada conforme definido |
| BOOK-2 | Entrada em branco | Solicitação/erro explícito; sem alternativa silenciosa |
| BOOK-3 | Título inexistente | Mensagem de ausência de resultados |
| BOOK-4 | Dois exemplares, um emprestado | Disponibilidade separada para cada exemplar |
| BOOK-5 | Empréstimo histórico devolvido | Não bloqueia a disponibilidade |
| BOOK-6 | Empréstimo vencido não devolvido | Continua indisponível |
Construa esses cenários nos testes com datas controladas. Escolha explicitamente a ordenação
dos resultados. Não alegue que lower() e casefold() têm comportamento idêntico para todas as
strings Unicode; registre a normalização escolhida para a funcionalidade.
Tarefa 3 - Planeje antes de editar
Plan the book-availability feature in the current Python library. Reuse the
existing input loop and repository contracts. Map BOOK-1..6 to tests, distinguish
Book from BookItem, and keep search read-only. Do not implement loans/reservations.
Inspecione o acesso a dados, as junções de empréstimos ativos e a conexão com o menu. Um projeto que relacione um empréstimo a um título em vez de um exemplar não consegue atender a BOOK-4.
Tarefa 4 - Implemente e teste
- Escreva o teste de regressão de dois exemplares antes da implementação.
- Peça a Agent que implemente um recorte revisado, sem limpeza sem relação com a tarefa.
- Conecte a nova ação à solicitação de entrada, ao mapeamento de entrada e ao despacho.
- Adicione testes de limite e execute toda a pequena suíte da fixture.
- Execute
python console/main.pye exercite a busca manualmente. - Compare os arquivos JSON antes/depois da busca; ela não deve persistir alterações.
- Temporariamente, trate toda data de vencimento passada como devolução. Confirme que BOOK-6 falha e restaure a implementação correta.
Verifique seu trabalho
- O menu alcança a funcionalidade.
- O comportamento da busca e a ordenação são explícitos.
- A disponibilidade é calculada para cada exemplar físico.
- Uma mutação negativa é detectada.
- Empréstimos, associações e testes existentes permanecem inalterados.
Solução de problemas
Execute a partir de library para as importações. Diferencie uma resposta sem resultados de uma falha
do carregador. Se todos os testes fornecidos passarem antes de a funcionalidade existir, adicione o teste de regressão
ausente em vez de presumir que eles cobrem o novo comportamento.
Prática independente
Adicione um filtro por autor como uma funcionalidade especificada separadamente. Preserve a normalização existente dos títulos e declare como os filtros combinados se comportam.
Restauração
Pare o console, salve as evidências e restaure somente os arquivos nomeados da funcionalidade/testes na cópia descartável. Não altere os dados originais nem publique um repositório automaticamente.