@@ -15,13 +15,18 @@ import (
1515)
1616
1717type mockRoomsRepository struct {
18- findRoomsFunc func (ctx context.Context , filter * models.RoomFilters , hotelID string , cursorRoomNumber int ) ([]* models.RoomWithOptionalGuestBooking , error )
18+ findRoomsFunc func (ctx context.Context , filter * models.RoomFilters , hotelID string , cursorRoomNumber int ) ([]* models.RoomWithOptionalGuestBooking , error )
19+ findFloorsFunc func (ctx context.Context , hotelID string ) ([]int , error )
1920}
2021
2122func (m * mockRoomsRepository ) FindRoomsWithOptionalGuestBookingsByFloor (ctx context.Context , filter * models.RoomFilters , hotelID string , cursorRoomNumber int ) ([]* models.RoomWithOptionalGuestBooking , error ) {
2223 return m .findRoomsFunc (ctx , filter , hotelID , cursorRoomNumber )
2324}
2425
26+ func (m * mockRoomsRepository ) FindAllFloors (ctx context.Context , hotelID string ) ([]int , error ) {
27+ return m .findFloorsFunc (ctx , hotelID )
28+ }
29+
2530var _ RoomsRepository = (* mockRoomsRepository )(nil )
2631
2732const testHotelID = "00000000-0000-0000-0000-000000000001"
@@ -260,3 +265,94 @@ func TestRoomsHandler_GetRoomsByFloor(t *testing.T) {
260265 assert .Equal (t , 500 , resp .StatusCode )
261266 })
262267}
268+
269+ func TestRoomsHandler_GetFloors (t * testing.T ) {
270+ t .Parallel ()
271+
272+ t .Run ("returns 200 with floors" , func (t * testing.T ) {
273+ t .Parallel ()
274+
275+ mock := & mockRoomsRepository {
276+ findFloorsFunc : func (ctx context.Context , hotelID string ) ([]int , error ) {
277+ return []int {1 , 2 , 3 }, nil
278+ },
279+ }
280+
281+ app := fiber .New (fiber.Config {ErrorHandler : errs .ErrorHandler })
282+ h := NewRoomsHandler (mock )
283+ app .Get ("/rooms/floors" , h .GetFloors )
284+
285+ req := httptest .NewRequest ("GET" , "/rooms/floors" , nil )
286+ req .Header .Set (hotelIDHeader , testHotelID )
287+ resp , err := app .Test (req )
288+ require .NoError (t , err )
289+
290+ assert .Equal (t , 200 , resp .StatusCode )
291+ body , _ := io .ReadAll (resp .Body )
292+ assert .Contains (t , string (body ), `1` )
293+ assert .Contains (t , string (body ), `2` )
294+ assert .Contains (t , string (body ), `3` )
295+ })
296+
297+ t .Run ("returns 400 when hotel_id header is missing" , func (t * testing.T ) {
298+ t .Parallel ()
299+
300+ mock := & mockRoomsRepository {
301+ findFloorsFunc : func (ctx context.Context , hotelID string ) ([]int , error ) {
302+ return []int {}, nil
303+ },
304+ }
305+
306+ app := fiber .New (fiber.Config {ErrorHandler : errs .ErrorHandler })
307+ h := NewRoomsHandler (mock )
308+ app .Get ("/rooms/floors" , h .GetFloors )
309+
310+ req := httptest .NewRequest ("GET" , "/rooms/floors" , nil )
311+ resp , err := app .Test (req )
312+ require .NoError (t , err )
313+
314+ assert .Equal (t , 400 , resp .StatusCode )
315+ })
316+
317+ t .Run ("returns 400 when hotel_id header is invalid" , func (t * testing.T ) {
318+ t .Parallel ()
319+
320+ mock := & mockRoomsRepository {
321+ findFloorsFunc : func (ctx context.Context , hotelID string ) ([]int , error ) {
322+ return []int {}, nil
323+ },
324+ }
325+
326+ app := fiber .New (fiber.Config {ErrorHandler : errs .ErrorHandler })
327+ h := NewRoomsHandler (mock )
328+ app .Get ("/rooms/floors" , h .GetFloors )
329+
330+ req := httptest .NewRequest ("GET" , "/rooms/floors" , nil )
331+ req .Header .Set (hotelIDHeader , "not-a-uuid" )
332+ resp , err := app .Test (req )
333+ require .NoError (t , err )
334+
335+ assert .Equal (t , 400 , resp .StatusCode )
336+ })
337+
338+ t .Run ("returns 500 when repository fails" , func (t * testing.T ) {
339+ t .Parallel ()
340+
341+ mock := & mockRoomsRepository {
342+ findFloorsFunc : func (ctx context.Context , hotelID string ) ([]int , error ) {
343+ return nil , errors .New ("db error" )
344+ },
345+ }
346+
347+ app := fiber .New (fiber.Config {ErrorHandler : errs .ErrorHandler })
348+ h := NewRoomsHandler (mock )
349+ app .Get ("/rooms/floors" , h .GetFloors )
350+
351+ req := httptest .NewRequest ("GET" , "/rooms/floors" , nil )
352+ req .Header .Set (hotelIDHeader , testHotelID )
353+ resp , err := app .Test (req )
354+ require .NoError (t , err )
355+
356+ assert .Equal (t , 500 , resp .StatusCode )
357+ })
358+ }
0 commit comments