public void IncrementDyanmite_EvenWhenInvalid()
        {
            int previousUsage = _dynamiteOnlyBot.DynamiteUsed;
            var fakeBot       = new FakeBot(Decision.Dynamite, 100);

            _roundRunner.RunRound(_dynamiteOnlyBot, fakeBot, _builder.WithDefaults().Build());
            _dynamiteOnlyBot.DynamiteUsed.Should().Be(previousUsage + 1);
            fakeBot.DynamiteUsed.Should().Be(101);
        }
        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>());
        }
示例#3
0
        public void Message_with_empty_GameState_survives_serialization_roundtrip()
        {
            var bot = new FakeBot(new Message
            {
                Type        = MessageType.NewGameState,
                JsonPayload = JsonConvert.SerializeObject(new GameState()),
            });

            var result = bot.Read <GameState>();

            Assert.NotNull(result);
        }
        public void IncrementDyanmite_EvenWhenInvalid()
        {
            int previousUsage = _dynamiteOnlyBot.DynamiteUsed;
            var fakeBot       = new FakeBot(Decision.Dynamite, 10);

            fakeBot.Competitor = new Competitor {
                Name = "test"
            };
            _roundRunner.RunRound(_dynamiteOnlyBot, fakeBot, _builder.WithDefaults().Build(), new FakeMetrics());
            _dynamiteOnlyBot.DynamiteUsed.Should().Be(previousUsage + 1);
            fakeBot.DynamiteUsed.Should().Be(11);
        }
        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>());
        }