Menu
Coddy logo textTech

Testes e Integração

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy — lição 87 de 91.

challenge icon

Desafio

Fácil

Parabéns por construir um Sistema de Gerenciamento de Biblioteca completo! Agora é hora de reunir todos os seus componentes e verificar se tudo funciona perfeitamente. Você criará um teste de integração abrangente que exercita todo o fluxo de trabalho da sua biblioteca.

Você organizará seu código em cinco arquivos:

  • Book.php — Sua classe Book com propriedades readonly (isbn, title, author), uma propriedade privada $isAvailable e os métodos: isAvailable(), markAsBorrowed() e markAsReturned().
  • User.php — Inclua o arquivo Book. Sua classe User com propriedades readonly (id, name), um array privado $borrowedBooks, uma constante MAX_BOOKS de 3 e todos os métodos de usuário.
  • Library.php — Inclua o arquivo User. Sua classe Library com gerenciamento de livros, funcionalidade de empréstimo/devolução, métodos de busca e o método removeBook().
  • Admin.php — Inclua o arquivo Library. Sua classe Admin estendendo User com os métodos addBookToLibrary() e removeBookFromLibrary().
  • main.php — Inclua o arquivo Admin. É aqui que você executará seu teste de integração. Você receberá duas entradas: um nome de usuário e uma palavra-chave de autor para busca.

    Configure seu sistema de biblioteca:

    • Crie uma Library
    • Crie um Admin com ID 1 e nome "LibraryAdmin"
    • Crie um User com ID 2 e o nome de usuário fornecido

    Faça o admin adicionar estes três livros:

    • ISBN: "978-0", Title: "PHP Fundamentals", Author: "Sarah Johnson"
    • ISBN: "978-1", Title: "OOP Patterns", Author: "Mike Chen"
    • ISBN: "978-2", Title: "Web Security", Author: "Sarah Johnson"

    Em seguida, execute esta sequência de teste de integração, imprimindo cada resultado em uma nova linha:

    1. Faça o usuário pegar emprestado "978-0"
    2. Faça o usuário pegar emprestado "978-1"
    3. Busque por autor usando a segunda entrada e imprima a contagem: "Books by author: [count]"
    4. Obtenha os livros disponíveis e imprima: "Available: [count]"
    5. Faça o usuário devolver "978-0"
    6. Obtenha os livros disponíveis novamente e imprima: "Available after return: [count]"
    7. Faça o admin remover "978-0"
    8. Faça o admin tentar remover "978-0" novamente

Este desafio final valida que todo o seu sistema funciona em conjunto — admins gerenciando o inventário, usuários pegando emprestado dentro dos limites, buscas retornando resultados precisos e a disponibilidade sendo atualizada corretamente durante todo o fluxo de trabalho.

Experimente você mesmo

<?php

require_once 'Admin.php';

// Ler entradas
$userName = trim(fgets(STDIN));
$searchAuthor = trim(fgets(STDIN));

// TODO: Criar uma Biblioteca (Library)

// TODO: Criar um Administrador (Admin) com ID 1 e nome "LibraryAdmin"

// TODO: Criar um Usuário (User) com ID 2 e o nome de usuário fornecido

// TODO: Fazer o administrador adicionar três livros:
// - ISBN: "978-0", Título: "PHP Fundamentals", Autor: "Sarah Johnson"
// - ISBN: "978-1", Título: "OOP Patterns", Autor: "Mike Chen"
// - ISBN: "978-2", Título: "Web Security", Autor: "Sarah Johnson"

// TODO: Sequência de teste de integração:
// 1. Fazer o usuário emprestar "978-0"
// 2. Fazer o usuário emprestar "978-1"
// 3. Pesquisar por autor usando $searchAuthor e imprimir: "Books by author: [count]"
// 4. Obter livros disponíveis e imprimir: "Available: [count]"
// 5. Fazer o usuário devolver "978-0"
// 6. Obter livros disponíveis novamente e imprimir: "Available after return: [count]"
// 7. Fazer o administrador remover "978-0"
// 8. Fazer o administrador tentar remover "978-0" novamente

?>

Todas as lições de Programação Orientada a Objetos