import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

class RoomsTest { //Testing Rooms class
    private Rooms rooms; // creating an object of Rooms

    @BeforeEach
    void setUp() {
        rooms = new Rooms(); // create initialize the object
    }

    @Test //single room avaliable [Should evealuate to true]
    void testCheckAvailabilitySingleRoomAvailable() {
        assertTrue(rooms.checkAvailability(false));
    }

    @Test //double room avaliavble [Should evealuate to true]
    void testCheckAvailabilityDoubleRoomAvailable() {
        assertTrue(rooms.checkAvailability(true));
    }
//
    @Test //if there is over than one room single room available
    void testGetAvailableRoomReturnsValidRoomNumberForSingle() {
        int roomNumber = rooms.getAvailableRoom(false);
        assertTrue(roomNumber > 0);
    }

    @Test
    void testGetAvailableRoomReturnsMinusOneWhenNoRoomsAvailable() {
        //test: occupy all single rooms
        for (int i = 0; i <  10 ; i++) { //number of single rooms 9
            rooms.getAvailableRoom(false);
        }
        assertEquals(-1, rooms.getAvailableRoom(false)); //will return -1 because no rooms was found
    }

    @Test
    void testFreeRoomWithValidRoomNumber() { //
        int roomNumber = rooms.getAvailableRoom(false);
        assertTrue(rooms.freeRoom(roomNumber)); //freeroom returns a string
    }

    @Test
    void testFreeRoomWithInvalidRoomNumber() {
        assertFalse(rooms.freeRoom(999)); //invalid
    }
    @Test
    void testFreeRoomAlreadyVacantRoom() {
        int roomNumber = rooms.getAvailableRoom(false);
        rooms.freeRoom(roomNumber);
        assertFalse(rooms.freeRoom(roomNumber)); //already all rooms are free so trying to free a free room will return [Invalid room number.]

    }
}