public async Task Run_ShouldConnectToClient_WhenCalled() { var client = Substitute.For <IPaintBotClient>(); var heartBeatSender = Substitute.For <IHearBeatSender>(); var logger = Substitute.For <ILogger>(); var sut = new FakeBot(client, heartBeatSender, logger, _config); await sut.Run(CancellationToken.None); await client.Received(1).ConnectAsync(sut.GameMode, Arg.Any <CancellationToken>()); }
public async Task Run_ShouldRegisterPlayer_WhenCalled() { var client = Substitute.For <IPaintBotClient>(); var heartBeatSender = Substitute.For <IHearBeatSender>(); var logger = Substitute.For <ILogger>(); var sut = new FakeBot(client, heartBeatSender, logger, _config); await sut.Run(CancellationToken.None); await client.Received(1).SendAsync(Arg.Is <RegisterPlayer>(registerPlayer => registerPlayer.PlayerName == sut.Name), Arg.Any <CancellationToken>()); }
public async Task Run_ShouldReceiveEventsFromClient_WhenCalled() { var client = Substitute.For <IPaintBotClient>(); var logger = Substitute.For <ILogger>(); var heartBeatSender = Substitute.For <IHearBeatSender>(); var sut = new FakeBot(client, heartBeatSender, logger, _config); await sut.Run(CancellationToken.None); await foreach (var _ in client.Received(1).ReceiveEnumerableAsync <Response>(Arg.Any <CancellationToken>())) { } }
public async Task Run_ShouldLogExceptionAndCloseClient_WhenExceptionIsThrown() { var client = Substitute.For <IPaintBotClient>(); var heartBeatSender = Substitute.For <IHearBeatSender>(); var logger = Substitute.For <ILogger>(); client.ConnectAsync(Arg.Any <GameMode>(), Arg.Any <CancellationToken>()).Throws(new Exception()); var sut = new FakeBot(client, heartBeatSender, logger, _config); await sut.Run(CancellationToken.None); logger.Received(1).Error(Arg.Any <Exception>(), Arg.Any <string>()); client.Received(1).Close(); }
public async Task Run_ShouldLogWinner_WhenGameEndedAndGameModeIsTraining() { var client = Substitute.For <IPaintBotClient>(); var heartBeatSender = Substitute.For <IHearBeatSender>(); var logger = Substitute.For <ILogger>(); var sut = new FakeBot(client, heartBeatSender, logger, _config); var events = new List <Response> { _fixture.Create <GameEnded>() }; client.ReceiveEnumerableAsync <Response>(Arg.Any <CancellationToken>()).Returns(GetTestValues(events)); await sut.Run(CancellationToken.None); logger.Received(1).Information(Arg.Is <string>(s => s.Contains("won!"))); }
public async Task Run_ShouldNotLogGameResultEvent_WhenGameModeIsTournament() { var client = Substitute.For <IPaintBotClient>(); var heartBeatSender = Substitute.For <IHearBeatSender>(); var logger = Substitute.For <ILogger>(); var sut = new FakeBot(client, heartBeatSender, logger, new PaintBotConfig("testbot", GameMode.Tournament, 20)); var events = new List <Response> { _fixture.Create <GameResult>() }; client.ReceiveEnumerableAsync <Response>(Arg.Any <CancellationToken>()).Returns(GetTestValues(events)); await sut.Run(CancellationToken.None); logger.DidNotReceive().Information(Arg.Any <string>()); }
public async Task Run_ShouldSendHeartBeat_OnPlayerRegisteredEvent() { var client = Substitute.For <IPaintBotClient>(); var heartBeatSender = Substitute.For <IHearBeatSender>(); var logger = Substitute.For <ILogger>(); var sut = new FakeBot(client, heartBeatSender, logger, _config); var playerRegisteredEvent = _fixture.Create <PlayerRegistered>(); var events = new List <Response> { playerRegisteredEvent }; client.ReceiveEnumerableAsync <Response>(Arg.Any <CancellationToken>()).Returns(GetTestValues(events)); await sut.Run(CancellationToken.None); heartBeatSender.Received(1).SendHeartBeatFrom(playerRegisteredEvent.ReceivingPlayerId); }
public async Task Run_ShouldLogReason_OnInvalidPlayerEvent() { var client = Substitute.For <IPaintBotClient>(); var heartBeatSender = Substitute.For <IHearBeatSender>(); var logger = Substitute.For <ILogger>(); var sut = new FakeBot(client, heartBeatSender, logger, new PaintBotConfig("testbot", GameMode.Tournament, 20)); var invalidPlayerEvent = _fixture.Create <InvalidPlayerName>(); var events = new List <Response> { invalidPlayerEvent }; client.ReceiveEnumerableAsync <Response>(Arg.Any <CancellationToken>()).Returns(GetTestValues(events)); await sut.Run(CancellationToken.None); logger.Received(1).Information(Arg.Is <string>(s => s.Contains(invalidPlayerEvent.ReasonCode.ToString()))); }
public async Task Run_ShouldLogTournamentEndedAndCloseClient_OnTournamentEndedEvent() { var client = Substitute.For <IPaintBotClient>(); var heartBeatSender = Substitute.For <IHearBeatSender>(); var logger = Substitute.For <ILogger>(); var sut = new FakeBot(client, heartBeatSender, logger, new PaintBotConfig("testbot", GameMode.Tournament, 20)); var events = new List <Response> { _fixture.Create <TournamentEnded>() }; client.ReceiveEnumerableAsync <Response>(Arg.Any <CancellationToken>()).Returns(GetTestValues(events)); await sut.Run(CancellationToken.None); logger.Received(1).Information(Arg.Is <string>(s => s.Contains("The tournament has ended"))); client.Received(1).Close(); }
public async Task Run_ShouldLogCharacterStunnedEvent_OnCharacterStunnedEvent() { var client = Substitute.For <IPaintBotClient>(); var heartBeatSender = Substitute.For <IHearBeatSender>(); var logger = Substitute.For <ILogger>(); var sut = new FakeBot(client, heartBeatSender, logger, _config); var characterStunnedEvent = _fixture.Create <CharacterStunned>(); var events = new List <Response> { characterStunnedEvent }; client.ReceiveEnumerableAsync <Response>(Arg.Any <CancellationToken>()).Returns(GetTestValues(events)); await sut.Run(CancellationToken.None); logger.Received(1).Information(Arg.Is <string>(s => s.Contains(characterStunnedEvent.GameId.ToString()))); }
public async Task Run_ShouldSendBotMove_OnMapUpdatedEvent() { var client = Substitute.For <IPaintBotClient>(); var logger = Substitute.For <ILogger>(); var mapUpdatedEvent = _fixture.Create <MapUpdated>(); mapUpdatedEvent.ReceivingPlayerId = _fixture.Create <Guid>().ToString(); var events = new List <Response> { mapUpdatedEvent }; client.ReceiveEnumerableAsync <Response>(Arg.Any <CancellationToken>()).Returns(GetTestValues(events)); var heartBeatSender = Substitute.For <IHearBeatSender>(); var sut = new FakeBot(client, heartBeatSender, logger, _config); await sut.Run(CancellationToken.None); await client.Received(1).SendAsync(Arg.Is <RegisterMove>(registerMove => registerMove.ReceivingPlayerId.Value.ToString() == mapUpdatedEvent.ReceivingPlayerId && registerMove.GameId == mapUpdatedEvent.GameId && registerMove.GameTick == mapUpdatedEvent.GameTick), Arg.Any <CancellationToken>()); }