SevdanurGenc's picture
Upload 300 files
9438a57 verified
Raw History Blame Contribute Delete
2.03 kB
import pytest
from solution import BookingError, Room
@pytest.fixture
def room():
return Room("Mavi")
def test_defaults_and_invalid_hours():
r = Room("Kırmızı")
assert (r.open_at, r.close_at, r.bookings) == (540, 1080, [])
with pytest.raises(BookingError):
Room("X", open_at=600, close_at=600)
def test_book_returns_count_and_keeps_sorted(room):
assert room.book(720, 780, "b") == 1
assert room.book(600, 660, "a") == 2
assert [b[2] for b in room.bookings] == ["a", "b"]
def test_adjacent_bookings_do_not_conflict(room):
room.book(600, 660, "a")
room.book(660, 720, "b")
room.book(540, 600, "c")
assert len(room.bookings) == 3
def test_overlap_rejected(room):
room.book(600, 660, "a")
for s, e in [(630, 690), (570, 610), (600, 660), (610, 620)]:
with pytest.raises(BookingError):
room.book(s, e, "x")
def test_invalid_interval_and_hours(room):
with pytest.raises(BookingError):
room.book(700, 700, "x")
with pytest.raises(BookingError):
room.book(500, 560, "x")
with pytest.raises(BookingError):
room.book(1050, 1090, "x")
def test_is_free(room):
room.book(600, 660, "a")
assert room.is_free(660, 700) and room.is_free(540, 600)
assert not room.is_free(650, 700)
def test_cancel_removes_all_of_owner(room):
room.book(600, 660, "a")
room.book(700, 760, "a")
room.book(800, 860, "b")
assert room.cancel("a") == 2
assert room.cancel("zz") == 0
assert [b[2] for b in room.bookings] == ["b"]
def test_free_slots_with_unordered_bookings(room):
room.book(900, 960, "b")
room.book(600, 660, "a")
assert room.free_slots() == [(540, 600), (660, 900), (960, 1080)]
def test_free_slots_min_length_inclusive(room):
room.book(570, 1050, "a")
assert room.free_slots(min_length=30) == [(540, 570), (1050, 1080)]
assert room.free_slots(min_length=31) == []
def test_free_slots_empty_room(room):
assert room.free_slots() == [(540, 1080)]