Menu
CoddyTech

Pruebas e integración

Parte de la sección Programación orientada a objetos 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 varios archivos con una cobertura de pruebas completa. Trabajarás con tres archivos de solo lectura y un archivo editable que contiene comentarios detallados de TODO para guiar tu implementación:

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

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)
    
    # Prestar libros
    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)}")
    
    # Comprobar 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)
    
    # Prestar 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)
    
    # Prestar libros
    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 prestar un libro inexistente
    result = library.borrow_book("999999", "U001")
    print(result)
    
    # Intenta prestar para un usuario inexistente
    result = library.borrow_book("123456", "U999")
    print(result)
    
    # Presta un libro existente
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Intenta prestar el mismo libro de nuevo
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Intenta 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)
    
    # Añade 100 libros
    for i in range(1, 101):
        isbn = f"{i:03d}"  # Formatea 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 Programación orientada a objetos

Practica por tu cuenta: Compilador de Python online