from solution import Seat
def test_basic_lock_and_book():
print("Running basic lock & book tests...")
seat = Seat("A1", lock_duration=5)
assert seat.get_state() == "FREE"
assert seat.lock(10) is True
assert seat.get_state() == "LOCKED"
assert seat.book(12) is True
assert seat.get_state() == "BOOKED"
print("✅ Basic lock & book tests passed")
def test_lock_expiry():
print("Running lock expiry tests...")
seat = Seat("A2", lock_duration=5)
assert seat.lock(10) is True
assert seat.get_state() == "LOCKED"
# Time passes beyond expiry
assert seat.unlock_if_expired(16) is True
assert seat.get_state() == "FREE"
print("✅ Lock expiry tests passed")
def test_booking_after_expiry():
print("Running booking after expiry tests...")
seat = Seat("A3", lock_duration=5)
assert seat.lock(10) is True
assert seat.unlock_if_expired(16) is True
assert seat.book(17) is False
assert seat.get_state() == "FREE"
print("✅ Booking after expiry tests passed")
def test_invalid_transitions():
print("Running invalid transition tests...")
seat = Seat("A4", lock_duration=5)
assert seat.book(10) is False
assert seat.unlock_if_expired(10) is False
seat.lock(10)
assert seat.lock(11) is False
seat.book(12)
assert seat.lock(13) is False
assert seat.unlock_if_expired(20) is False
print("✅ Invalid transition tests passed")
if __name__ == "__main__":
test_basic_lock_and_book()
test_lock_expiry()
test_booking_after_expiry()
test_invalid_transitions()
print("\n🎉 ALL DAY 9 TESTS PASSED SUCCESSFULLY")