55 "errors"
66 "io"
77 "net/http/httptest"
8+ "strings"
89 "testing"
910
1011 "github.com/generate/selfserve/internal/errs"
@@ -31,7 +32,7 @@ var _ RoomsRepository = (*mockRoomsRepository)(nil)
3132
3233const testHotelID = "00000000-0000-0000-0000-000000000001"
3334
34- func TestRoomsHandler_GetRoomsByFloor (t * testing.T ) {
35+ func TestRoomsHandler_FilterRooms (t * testing.T ) {
3536 t .Parallel ()
3637
3738 t .Run ("returns 200 with rooms and no guests when rooms are vacant" , func (t * testing.T ) {
@@ -50,9 +51,10 @@ func TestRoomsHandler_GetRoomsByFloor(t *testing.T) {
5051
5152 app := fiber .New ()
5253 h := NewRoomsHandler (mock )
53- app .Get ("/rooms" , h .GetRoomsByFloor )
54+ app .Post ("/rooms" , h .FilterRooms )
5455
55- req := httptest .NewRequest ("GET" , "/rooms" , nil )
56+ req := httptest .NewRequest ("POST" , "/rooms" , strings .NewReader (`{}` ))
57+ req .Header .Set ("Content-Type" , "application/json" )
5658 req .Header .Set (hotelIDHeader , testHotelID )
5759 resp , err := app .Test (req )
5860 require .NoError (t , err )
@@ -94,9 +96,10 @@ func TestRoomsHandler_GetRoomsByFloor(t *testing.T) {
9496
9597 app := fiber .New ()
9698 h := NewRoomsHandler (mock )
97- app .Get ("/rooms" , h .GetRoomsByFloor )
99+ app .Post ("/rooms" , h .FilterRooms )
98100
99- req := httptest .NewRequest ("GET" , "/rooms?floors=2" , nil )
101+ req := httptest .NewRequest ("POST" , "/rooms" , strings .NewReader (`{"floors":[2]}` ))
102+ req .Header .Set ("Content-Type" , "application/json" )
100103 req .Header .Set (hotelIDHeader , testHotelID )
101104 resp , err := app .Test (req )
102105 require .NoError (t , err )
@@ -122,9 +125,10 @@ func TestRoomsHandler_GetRoomsByFloor(t *testing.T) {
122125
123126 app := fiber .New ()
124127 h := NewRoomsHandler (mock )
125- app .Get ("/rooms" , h .GetRoomsByFloor )
128+ app .Post ("/rooms" , h .FilterRooms )
126129
127- req := httptest .NewRequest ("GET" , "/rooms?floors=99" , nil )
130+ req := httptest .NewRequest ("POST" , "/rooms" , strings .NewReader (`{"floors":[99]}` ))
131+ req .Header .Set ("Content-Type" , "application/json" )
128132 req .Header .Set (hotelIDHeader , testHotelID )
129133 resp , err := app .Test (req )
130134 require .NoError (t , err )
@@ -154,9 +158,10 @@ func TestRoomsHandler_GetRoomsByFloor(t *testing.T) {
154158
155159 app := fiber .New ()
156160 h := NewRoomsHandler (mock )
157- app .Get ("/rooms" , h .GetRoomsByFloor )
161+ app .Post ("/rooms" , h .FilterRooms )
158162
159- req := httptest .NewRequest ("GET" , "/rooms?limit=5" , nil )
163+ req := httptest .NewRequest ("POST" , "/rooms" , strings .NewReader (`{"limit":5}` ))
164+ req .Header .Set ("Content-Type" , "application/json" )
160165 req .Header .Set (hotelIDHeader , testHotelID )
161166 resp , err := app .Test (req )
162167 require .NoError (t , err )
@@ -171,8 +176,6 @@ func TestRoomsHandler_GetRoomsByFloor(t *testing.T) {
171176 t .Run ("passes cursor, filter, and hotelID to repository" , func (t * testing.T ) {
172177 t .Parallel ()
173178
174- cursor := "200"
175-
176179 var capturedFilter * models.RoomFilters
177180 var capturedHotelID string
178181 var capturedCursor int
@@ -187,9 +190,10 @@ func TestRoomsHandler_GetRoomsByFloor(t *testing.T) {
187190
188191 app := fiber .New ()
189192 h := NewRoomsHandler (mock )
190- app .Get ("/rooms" , h .GetRoomsByFloor )
193+ app .Post ("/rooms" , h .FilterRooms )
191194
192- req := httptest .NewRequest ("GET" , "/rooms?cursor=" + cursor + "&limit=10" , nil )
195+ req := httptest .NewRequest ("POST" , "/rooms" , strings .NewReader (`{"cursor":"200","limit":10}` ))
196+ req .Header .Set ("Content-Type" , "application/json" )
193197 req .Header .Set (hotelIDHeader , testHotelID )
194198 resp , err := app .Test (req )
195199 require .NoError (t , err )
@@ -212,9 +216,10 @@ func TestRoomsHandler_GetRoomsByFloor(t *testing.T) {
212216
213217 app := fiber .New (fiber.Config {ErrorHandler : errs .ErrorHandler })
214218 h := NewRoomsHandler (mock )
215- app .Get ("/rooms" , h .GetRoomsByFloor )
219+ app .Post ("/rooms" , h .FilterRooms )
216220
217- req := httptest .NewRequest ("GET" , "/rooms" , nil )
221+ req := httptest .NewRequest ("POST" , "/rooms" , strings .NewReader (`{}` ))
222+ req .Header .Set ("Content-Type" , "application/json" )
218223 resp , err := app .Test (req )
219224 require .NoError (t , err )
220225
@@ -232,9 +237,10 @@ func TestRoomsHandler_GetRoomsByFloor(t *testing.T) {
232237
233238 app := fiber .New (fiber.Config {ErrorHandler : errs .ErrorHandler })
234239 h := NewRoomsHandler (mock )
235- app .Get ("/rooms" , h .GetRoomsByFloor )
240+ app .Post ("/rooms" , h .FilterRooms )
236241
237- req := httptest .NewRequest ("GET" , "/rooms" , nil )
242+ req := httptest .NewRequest ("POST" , "/rooms" , strings .NewReader (`{}` ))
243+ req .Header .Set ("Content-Type" , "application/json" )
238244 req .Header .Set (hotelIDHeader , "not-a-uuid" )
239245 resp , err := app .Test (req )
240246 require .NoError (t , err )
@@ -255,15 +261,38 @@ func TestRoomsHandler_GetRoomsByFloor(t *testing.T) {
255261
256262 app := fiber .New (fiber.Config {ErrorHandler : errs .ErrorHandler })
257263 h := NewRoomsHandler (mock )
258- app .Get ("/rooms" , h .GetRoomsByFloor )
264+ app .Post ("/rooms" , h .FilterRooms )
259265
260- req := httptest .NewRequest ("GET" , "/rooms" , nil )
266+ req := httptest .NewRequest ("POST" , "/rooms" , strings .NewReader (`{}` ))
267+ req .Header .Set ("Content-Type" , "application/json" )
261268 req .Header .Set (hotelIDHeader , testHotelID )
262269 resp , err := app .Test (req )
263270 require .NoError (t , err )
264271
265272 assert .Equal (t , 500 , resp .StatusCode )
266273 })
274+
275+ t .Run ("returns 400 when request body is invalid json" , func (t * testing.T ) {
276+ t .Parallel ()
277+
278+ mock := & mockRoomsRepository {
279+ findRoomsFunc : func (ctx context.Context , filter * models.RoomFilters , hotelID string , cursorRoomNumber int ) ([]* models.RoomWithOptionalGuestBooking , error ) {
280+ return nil , nil
281+ },
282+ }
283+
284+ app := fiber .New (fiber.Config {ErrorHandler : errs .ErrorHandler })
285+ h := NewRoomsHandler (mock )
286+ app .Post ("/rooms" , h .FilterRooms )
287+
288+ req := httptest .NewRequest ("POST" , "/rooms" , strings .NewReader (`{` ))
289+ req .Header .Set ("Content-Type" , "application/json" )
290+ req .Header .Set (hotelIDHeader , testHotelID )
291+ resp , err := app .Test (req )
292+ require .NoError (t , err )
293+
294+ assert .Equal (t , 400 , resp .StatusCode )
295+ })
267296}
268297
269298func TestRoomsHandler_GetFloors (t * testing.T ) {
0 commit comments