Menu
Coddy logo textTech

Pruebas e integración

Parte de la sección Object Oriented Programming del Journey de Python de Coddy — lección 60 de 64.

challenge icon

Desafío

Intermedio

En este desafío, implementarás un sistema de biblioteca de múltiples archivos con una cobertura de pruebas exhaustiva. Trabajarás con tres archivos de solo lectura y un archivo editable que contiene comentarios TODO detallados que guiarán tu implementación:

  • book.py - Contiene la definición de la clase Book
  • user.py - Contiene la clase User que necesitas implementar
  • library.py - Contiene la definición de la clase Library

Hoja de referencia

Este desafío consiste en implementar un sistema de biblioteca de archivos múltiples con tres componentes principales:

  • book.py - Definición de la clase Book
  • user.py - Implementación de la clase User
  • library.py - Definición de la clase Library

La implementación debe incluir una cobertura de pruebas exhaustiva y seguir los comentarios TODO proporcionados en cada archivo.

Pruébalo tú mismo

from book import Book
from user import User
from library import Library

# Manejador de casos de prueba
test_case = input()

if test_case == "create_user":
    user_id = "1"
    name = "Name"
    
    user = User(user_id, name)
    print(user)
    print(f"Books borrowed: {len(user.books_borrowed)}")

elif test_case == "borrow_and_return_all":
    library = Library("Community Library")
    
    # Agregar libros y usuarios
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    library.add_book(Book("1984", "George Orwell", "345678"))
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Tomar libros prestados
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U001")
    library.borrow_book("345678", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Devolver todos los libros
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")
    
    # Verificar si todos los libros están disponibles
    for book in library.books:
        print(f"Book {book.isbn} available: {book.available}")

elif test_case == "return_some_books":
    library = Library("Community Library")
    
    # Agregar libros y usuarios
    book1 = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    book2 = Book("To Kill a Mockingbird", "Harper Lee", "789012")
    library.add_book(book1)
    library.add_book(book2)
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Tomar prestado solo un libro
    library.borrow_book("123456", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Devolver todos los libros
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")

elif test_case == "empty_return":
    library = Library("Community Library")
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    print(f"Books borrowed: {len(user.books_borrowed)}")
    
    # Devolver todos los libros (debería ser 0)
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")

elif test_case == "multiple_users":
    library = Library("Community Library")
    
    # Agregar libros
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Agregar usuarios
    user1 = User("U001", "Alice")
    user2 = User("U002", "Bob")
    library.add_user(user1)
    library.add_user(user2)
    
    # Tomar libros prestados
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U002")
    
    print(user1)
    print(user2)
    
    # Devolver todos los libros para user1
    num_returned = user1.return_all_books(library)
    
    print(f"Books returned by {user1.name}: {num_returned}")
    
    print(user1)
    print(user2)

elif test_case == "error_handling":
    library = Library("Community Library")
    
    # Agregar libro y usuario
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Intentar tomar prestado un libro inexistente
    result = library.borrow_book("999999", "U001")
    print(result)
    
    # Intentar tomar prestado para un usuario inexistente
    result = library.borrow_book("123456", "U999")
    print(result)
    
    # Tomar prestado un libro existente
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Intentar tomar prestado el mismo libro de nuevo
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Intentar devolver un libro que no fue prestado
    result = library.return_book("789012", "U001")
    print(result)

elif test_case == "stress_test":
    library = Library("Community Library")
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Agregar 100 libros
    for i in range(1, 101):
        isbn = f"{i:03d}"  # Formatear como 001, 002, etc.
        library.add_book(Book(f"Book {i}", f"Author {i}", isbn))
        library.borrow_book(isbn, "U001")
    
    print(f"Books borrowed: {len(user.books_borrowed)}")
    
    # Devolver todos los libros
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")

Todas las lecciones de Object Oriented Programming