def test_find_spot():
    flr = "g-b(1,2)-l1"
    state = {}
    address, x, y = find_spot(flr, state)
    assert address is not None
    assert address == "{flr}-b({x},{y})".format(**locals())
    assert 0 <= x <= FLOOR_W
    assert 0 <= y <= FLOOR_H
def test_find_spot_next_free():
    flr = "g-b(1,2)-l1"
    pos_hints = {
        "next_free": True,
    }
    vacancies = [{}]*350 + [None]
    db = MagicMock()
    db.buildings.find_one = MagicMock(side_effect=vacancies)
    address, got_x, got_y = find_spot(flr, position_hints=pos_hints, db=db)
    expected_x, expected_y = 150, 1
    assert got_x == expected_x
    assert got_y == expected_y
    assert address is not None
    assert address == "{flr}-b({expected_x},{expected_y})".format(**locals())
def test_find_spot_near():
    flr = "g-b(1,2)-l1"
    near_x = 12
    near_y = 34
    pos_hints = {
        "near_x": near_x,
        "near_y": near_y
    }
    address, x, y = find_spot(flr, position_hints=pos_hints)
    assert address is not None
    assert address == "{flr}-b({x},{y})".format(**locals())
    assert 0 <= x <= FLOOR_W
    assert 0 <= y <= FLOOR_H
    assert abs(x - near_x) <= PROXIMITY
    assert abs(y - near_y) <= PROXIMITY