@@ -172,7 +172,76 @@ func TestEventsForwarderService_ProduceEvent(t *testing.T) {
172172 })
173173
174174 t .Run ("should succeed when event is PlayerEvent" , func (t * testing.T ) {
175- eventsForwarderService , config , eventsForwarder , schedulerStorage , _ , instanceStorage , schedulerCache := testSetup (t )
175+ eventsForwarderService , config , eventsForwarder , schedulerStorage , roomStorage , instanceStorage , schedulerCache := testSetup (t )
176+
177+ event := & events.Event {
178+ Name : events .PlayerEvent ,
179+ SchedulerID : expectedScheduler .Name ,
180+ RoomID : "room" ,
181+ Attributes : map [string ]interface {}{
182+ "eventType" : "playerLeft" ,
183+ "playerId" : "player" ,
184+ },
185+ }
186+
187+ room := & game_room.GameRoom {
188+ ID : event .RoomID ,
189+ SchedulerID : event .SchedulerID ,
190+ IsValidationRoom : false ,
191+ }
192+
193+ schedulerCache .EXPECT ().GetScheduler (context .Background (), event .SchedulerID ).Return (nil , nil )
194+ schedulerStorage .EXPECT ().GetScheduler (context .Background (), event .SchedulerID ).Return (expectedScheduler , nil )
195+ instanceStorage .EXPECT ().GetInstance (context .Background (), event .SchedulerID , event .RoomID ).Return (expectedGameRoomInstance , nil ).Times (0 )
196+ schedulerCache .EXPECT ().SetScheduler (context .Background (), expectedScheduler , config .SchedulerCacheTtl ).Return (nil )
197+ eventsForwarder .EXPECT ().ForwardPlayerEvent (context .Background (), gomock .Any (), gomock .Any ()).Return (nil )
198+ roomStorage .EXPECT ().GetRoom (gomock .Any (), event .SchedulerID , event .RoomID ).Return (room , nil )
199+ roomStorage .EXPECT ().UpdateRoom (gomock .Any (), gomock .Any ()).Return (nil )
200+
201+ err := eventsForwarderService .ProduceEvent (context .Background (), event )
202+ require .NoError (t , err )
203+ require .Empty (t , event .Attributes ["ports" ])
204+ })
205+
206+ t .Run ("should increase player count for PlayerEvent" , func (t * testing.T ) {
207+ eventsForwarderService , config , eventsForwarder , schedulerStorage , roomStorage , instanceStorage , schedulerCache := testSetup (t )
208+
209+ event := & events.Event {
210+ Name : events .PlayerEvent ,
211+ SchedulerID : expectedScheduler .Name ,
212+ RoomID : "room" ,
213+ Attributes : map [string ]interface {}{
214+ "eventType" : "playerJoin" ,
215+ "playerId" : "player" ,
216+ },
217+ }
218+
219+ room := & game_room.GameRoom {
220+ ID : event .RoomID ,
221+ SchedulerID : event .SchedulerID ,
222+ IsValidationRoom : false ,
223+ Metadata : map [string ]interface {}{
224+ "players" : 5 ,
225+ },
226+ }
227+
228+ schedulerCache .EXPECT ().GetScheduler (context .Background (), event .SchedulerID ).Return (nil , nil )
229+ schedulerStorage .EXPECT ().GetScheduler (context .Background (), event .SchedulerID ).Return (expectedScheduler , nil )
230+ instanceStorage .EXPECT ().GetInstance (context .Background (), event .SchedulerID , event .RoomID ).Return (expectedGameRoomInstance , nil ).Times (0 )
231+ schedulerCache .EXPECT ().SetScheduler (context .Background (), expectedScheduler , config .SchedulerCacheTtl ).Return (nil )
232+ eventsForwarder .EXPECT ().ForwardPlayerEvent (context .Background (), gomock .Any (), gomock .Any ()).Return (nil )
233+ roomStorage .EXPECT ().GetRoom (gomock .Any (), event .SchedulerID , event .RoomID ).Return (room , nil )
234+
235+ room .Metadata ["players" ] = 6
236+ roomStorage .EXPECT ().UpdateRoom (gomock .Any (), room ).Return (nil )
237+
238+ err := eventsForwarderService .ProduceEvent (context .Background (), event )
239+ require .NoError (t , err )
240+ require .Empty (t , event .Attributes ["ports" ])
241+ })
242+
243+ t .Run ("should decrease player count for PlayerEvent" , func (t * testing.T ) {
244+ eventsForwarderService , config , eventsForwarder , schedulerStorage , roomStorage , instanceStorage , schedulerCache := testSetup (t )
176245
177246 event := & events.Event {
178247 Name : events .PlayerEvent ,
@@ -184,11 +253,56 @@ func TestEventsForwarderService_ProduceEvent(t *testing.T) {
184253 },
185254 }
186255
256+ room := & game_room.GameRoom {
257+ ID : event .RoomID ,
258+ SchedulerID : event .SchedulerID ,
259+ IsValidationRoom : true ,
260+ }
261+
187262 schedulerCache .EXPECT ().GetScheduler (context .Background (), event .SchedulerID ).Return (nil , nil )
188263 schedulerStorage .EXPECT ().GetScheduler (context .Background (), event .SchedulerID ).Return (expectedScheduler , nil )
189264 instanceStorage .EXPECT ().GetInstance (context .Background (), event .SchedulerID , event .RoomID ).Return (expectedGameRoomInstance , nil ).Times (0 )
190265 schedulerCache .EXPECT ().SetScheduler (context .Background (), expectedScheduler , config .SchedulerCacheTtl ).Return (nil )
191266 eventsForwarder .EXPECT ().ForwardPlayerEvent (context .Background (), gomock .Any (), gomock .Any ()).Return (nil )
267+ roomStorage .EXPECT ().GetRoom (gomock .Any (), event .SchedulerID , event .RoomID ).Return (room , nil )
268+ roomStorage .EXPECT ().UpdateRoom (gomock .Any (), room ).MaxTimes (0 )
269+
270+ err := eventsForwarderService .ProduceEvent (context .Background (), event )
271+ require .NoError (t , err )
272+ require .Empty (t , event .Attributes ["ports" ])
273+ })
274+
275+ t .Run ("should ignore player state update for PlayerEvent" , func (t * testing.T ) {
276+ eventsForwarderService , config , eventsForwarder , schedulerStorage , roomStorage , instanceStorage , schedulerCache := testSetup (t )
277+
278+ event := & events.Event {
279+ Name : events .PlayerEvent ,
280+ SchedulerID : expectedScheduler .Name ,
281+ RoomID : "room" ,
282+ Attributes : map [string ]interface {}{
283+ "eventType" : "playerLeft" ,
284+ "playerId" : "player" ,
285+ },
286+ }
287+
288+ room := & game_room.GameRoom {
289+ ID : event .RoomID ,
290+ SchedulerID : event .SchedulerID ,
291+ IsValidationRoom : false ,
292+ Metadata : map [string ]interface {}{
293+ "players" : 5 ,
294+ },
295+ }
296+
297+ schedulerCache .EXPECT ().GetScheduler (context .Background (), event .SchedulerID ).Return (nil , nil )
298+ schedulerStorage .EXPECT ().GetScheduler (context .Background (), event .SchedulerID ).Return (expectedScheduler , nil )
299+ instanceStorage .EXPECT ().GetInstance (context .Background (), event .SchedulerID , event .RoomID ).Return (expectedGameRoomInstance , nil ).Times (0 )
300+ schedulerCache .EXPECT ().SetScheduler (context .Background (), expectedScheduler , config .SchedulerCacheTtl ).Return (nil )
301+ eventsForwarder .EXPECT ().ForwardPlayerEvent (context .Background (), gomock .Any (), gomock .Any ()).Return (nil )
302+ roomStorage .EXPECT ().GetRoom (gomock .Any (), event .SchedulerID , event .RoomID ).Return (room , nil )
303+
304+ room .Metadata ["players" ] = 4
305+ roomStorage .EXPECT ().UpdateRoom (gomock .Any (), room ).Return (nil )
192306
193307 err := eventsForwarderService .ProduceEvent (context .Background (), event )
194308 require .NoError (t , err )
0 commit comments