Пример #1
0
        public async Task BotLogic_UpdateBots_Should_Update_Bots()
        {
            // Arrange
            var       randomHelper        = new Mock <IRandomHelper>();
            var       botRepository       = new Mock <IRepository <Bot> >();
            var       scriptRepository    = new Mock <IRepository <BotScript> >();
            var       playerRepository    = new Mock <IRepository <Player> >();
            var       botMapper           = new BotMapper();
            var       botToCreateMapper   = new BotToCreateMapper();
            var       arenaLogic          = new Mock <IArenaLogic>();
            var       configurationHelper = new Mock <IConfigurationHelper>();
            IBotLogic botLogic            = new BotLogic(
                randomHelper.Object, botRepository.Object, scriptRepository.Object, playerRepository.Object,
                botMapper, botToCreateMapper, arenaLogic.Object, configurationHelper.Object);

            var botDto = new BotDto();

            // Mock
            botRepository.Setup(x => x.Update(It.IsAny <IList <Bot> >())).Returns <IList <Bot> >(Task.FromResult);

            // Act
            await botLogic.UpdateBots(new[] { botDto }.ToList());

            // Assert
            botRepository.Verify(x => x.Update(It.IsAny <IList <Bot> >()), Times.Once);
        }
Пример #2
0
    public void BotLogic_CreateBot_Should_Not_Create_A_Bot_In_Rapid_Succession()
    {
        // Arrange
        var       randomHelper        = new Mock <IRandomHelper>();
        var       botRepository       = new Mock <IRepository <Bot> >();
        var       scriptRepository    = new Mock <IRepository <BotScript> >();
        var       playerRepository    = new Mock <IRepository <Player> >();
        var       botMapper           = new BotMapper();
        var       botToCreateMapper   = new BotToCreateMapper();
        var       arenaLogic          = new Mock <IArenaLogic>();
        var       configurationHelper = new Mock <IConfigurationHelper>();
        IBotLogic botLogic            = new BotLogic(
            randomHelper.Object, botRepository.Object, scriptRepository.Object, playerRepository.Object,
            botMapper, botToCreateMapper, arenaLogic.Object, configurationHelper.Object);

        var arenaDto = new ArenaDto(3, 3);
        var player   = new Player {
            Id = Guid.NewGuid(), LastDeployment = DateTime.UtcNow
        };
        var botToCreateDto = new BotToCreateDto(Guid.NewGuid(), "BotName", 100, 200, "BotScript");

        // Mock
        arenaLogic.Setup(x => x.GetArena()).ReturnsAsync(arenaDto);
        playerRepository.Setup(x => x.Single(Any.Predicate <Player>())).ReturnsAsync(player);
        configurationHelper.Setup(x => x.BotDeploymentLimit).Returns(1);

        // Act
        Func <Task> act = async() => await botLogic.CreateBot(botToCreateDto);

        // Assert
        act.Should().ThrowAsync <LogicException>().WithMessage("You are not allowed to create multiple robots in rapid succession!");
    }
Пример #3
0
    public async Task BotLogic_CreateBot_Should_Create_A_Bot()
    {
        // Arrange
        var       randomHelper        = new Mock <IRandomHelper>();
        var       botRepository       = new Mock <IRepository <Bot> >();
        var       scriptRepository    = new Mock <IRepository <BotScript> >();
        var       playerRepository    = new Mock <IRepository <Player> >();
        var       botMapper           = new BotMapper();
        var       botToCreateMapper   = new BotToCreateMapper();
        var       arenaLogic          = new Mock <IArenaLogic>();
        var       configurationHelper = new Mock <IConfigurationHelper>();
        IBotLogic botLogic            = new BotLogic(
            randomHelper.Object, botRepository.Object, scriptRepository.Object, playerRepository.Object,
            botMapper, botToCreateMapper, arenaLogic.Object, configurationHelper.Object);

        var arenaDto = new ArenaDto(4, 3);
        var player   = new Player {
            Id = Guid.NewGuid(), LastDeployment = DateTime.MinValue
        };
        var botToCreateDto = new BotToCreateDto(Guid.NewGuid(), "BotName", 100, 200, "BotScript");
        var botScripts     = new List <BotScript>
        {
            new BotScript
            {
                Id     = Guid.Empty,
                Script = botToCreateDto.Script
            }
        };

        // Mock
        randomHelper.Setup(x => x.Get <PossibleOrientations>()).Returns(PossibleOrientations.South);
        botRepository.Setup(x => x.Find(Any.Predicate <Bot>(), i => i.Player)).ReturnsAsync(new List <Bot>());
        randomHelper.Setup(x => x.Get(It.IsAny <int>())).Returns(5);
        arenaLogic.Setup(x => x.GetArena()).ReturnsAsync(arenaDto);
        botRepository.Setup(x => x.Create(It.IsAny <Bot>())).Returns <Bot>(Task.FromResult);
        playerRepository.Setup(x => x.Single(Any.Predicate <Player>())).ReturnsAsync(player);
        scriptRepository.Setup(x => x.Single(Any.Predicate <BotScript>()))
        .ReturnsAsync((Expression <Func <BotScript, bool> > predicate) => botScripts.SingleOrDefault(predicate.Compile()));
        scriptRepository.Setup(x => x.Update(It.IsAny <BotScript>())).Returns <BotScript>(Task.FromResult);

        // Act
        var result = await botLogic.CreateBot(botToCreateDto);

        // Assert
        result.Should().NotBeNull();
        result.Name.Should().Be(botToCreateDto.Name);
        result.Orientation.Should().Be(PossibleOrientations.South);
        result.X.Should().Be(1);
        result.Y.Should().Be(2);
        result.FromX.Should().Be(1);
        result.FromY.Should().Be(2);
        result.MaximumHealth.Should().Be(botToCreateDto.MaximumHealth);
        result.CurrentHealth.Should().Be(botToCreateDto.MaximumHealth);
        result.MaximumStamina.Should().Be(botToCreateDto.MaximumStamina);
        result.CurrentStamina.Should().Be(botToCreateDto.MaximumStamina);
        result.Memory.Should().NotBeNull();
        result.TimeOfDeath.Should().Be(DateTime.MaxValue);
    }
Пример #4
0
    public void BotMapper_Can_Map_BotModel_To_BotDto()
    {
        // Arrange
        var mapper   = new BotMapper();
        var botModel = new Bot
        {
            Id             = Guid.NewGuid(),
            Name           = "BotName",
            X              = 5,
            Y              = 6,
            FromX          = 7,
            FromY          = 8,
            Orientation    = PossibleOrientations.South,
            MaximumHealth  = 100,
            CurrentHealth  = 98,
            MaximumStamina = 200,
            CurrentStamina = 123,
            Move           = PossibleMoves.MeleeAttack,
            Player         = new Player {
                Name = "PlayerName"
            },
            LastAttackX = 1,
            LastAttackY = 2,
            TimeOfDeath = new DateTime(2000, 10, 1)
        };

        // Act
        var botDto = mapper.Map(botModel);

        // Assert
        botDto.Should().BeEquivalentTo(botModel,
                                       properties => properties
                                       .Including(x => x.Id)
                                       .Including(x => x.Name)
                                       .Including(x => x.X)
                                       .Including(x => x.Y)
                                       .Including(x => x.FromX)
                                       .Including(x => x.FromY)
                                       .Including(x => x.Orientation)
                                       .Including(x => x.MaximumHealth)
                                       .Including(x => x.CurrentHealth)
                                       .Including(x => x.MaximumStamina)
                                       .Including(x => x.CurrentStamina)
                                       .Including(x => x.Move)
                                       .Including(x => x.LastAttackX)
                                       .Including(x => x.LastAttackY)
                                       .Including(x => x.TimeOfDeath));
        botDto.PlayerName.Should().Be(botModel.Player.Name);
    }
Пример #5
0
        public async Task BotLogic_GetAllLiveBots_Should_Only_Return_Live_Bots()
        {
            // Arrange
            var       randomHelper        = new Mock <IRandomHelper>();
            var       botRepository       = new Mock <IRepository <Bot> >();
            var       scriptRepository    = new Mock <IRepository <BotScript> >();
            var       playerRepository    = new Mock <IRepository <Player> >();
            var       botMapper           = new BotMapper();
            var       botToCreateMapper   = new BotToCreateMapper();
            var       arenaLogic          = new Mock <IArenaLogic>();
            var       configurationHelper = new Mock <IConfigurationHelper>();
            IBotLogic botLogic            = new BotLogic(
                randomHelper.Object, botRepository.Object, scriptRepository.Object, playerRepository.Object,
                botMapper, botToCreateMapper, arenaLogic.Object, configurationHelper.Object);

            var bots = new List <Bot>
            {
                new Bot
                {
                    Name          = "BOT1",
                    CurrentHealth = 0
                },
                new Bot
                {
                    Name          = "BOT2",
                    CurrentHealth = 1
                },
                new Bot
                {
                    Name          = "BOT3",
                    CurrentHealth = 0
                }
            };

            // Mock
            botRepository.Setup(x => x.Find(Any.Predicate <Bot>(), Any.Include <Bot, Player>()))
            .ReturnsAsync((Expression <Func <Bot, bool> > predicate, Expression <Func <Bot, Player> > include) =>
                          (IList <Bot>)bots.Where(predicate.Compile()).ToList());

            // Act
            var result = await botLogic.GetAllLiveBots();

            // Assert
            result.Should().HaveCount(1);
            result.Should().Contain(x => x.Name == "BOT2");
        }
        public async Task BotLogic_GetAllActiveBots_Should_Only_Return_Recently_Died_Bots()
        {
            // Arrange
            var       randomHelper        = new Mock <IRandomHelper>();
            var       botRepository       = new Mock <IRepository <Bot> >();
            var       scriptRepository    = new Mock <IRepository <BotScript> >();
            var       botScriptRepository = new Mock <IRepository <Bot, BotScript> >();
            var       playerRepository    = new Mock <IRepository <Player> >();
            var       botMapper           = new BotMapper();
            var       botToCreateMapper   = new BotToCreateMapper();
            var       arenaLogic          = new Mock <IArenaLogic>();
            IBotLogic botLogic            = new BotLogic(
                randomHelper.Object, botRepository.Object, scriptRepository.Object, botScriptRepository.Object,
                playerRepository.Object, botMapper, botToCreateMapper, arenaLogic.Object);

            var bots = new List <Bot>
            {
                new Bot
                {
                    Name          = "BOT1",
                    CurrentHealth = 0,
                    TimeOfDeath   = DateTime.UtcNow.AddSeconds(-11)
                },
                new Bot
                {
                    Name          = "BOT2",
                    Id            = Guid.NewGuid(),
                    CurrentHealth = 0,
                    TimeOfDeath   = DateTime.UtcNow.AddSeconds(-1)
                }
            };

            // Mock
            botRepository.Setup(x => x.Find(Any.Predicate <Bot>(), Any.Include <Bot, Player>()))
            .ReturnsAsync((Expression <Func <Bot, Boolean> > predicate, Expression <Func <Bot, Player> > include) =>
                          (IList <Bot>)bots.Where(predicate.Compile()).ToList());

            // Act
            var result = await botLogic.GetAllActiveBots();

            // Assert
            result.Should().HaveCount(1);
            result.Should().Contain(x => x.Name == "BOT2");
        }
Пример #7
0
        public async Task BotLogic_GetBotScript_Should_Return_Correct_Script()
        {
            // Arrange
            var       randomHelper        = new Mock <IRandomHelper>();
            var       botRepository       = new Mock <IRepository <Bot> >();
            var       scriptRepository    = new Mock <IRepository <BotScript> >();
            var       playerRepository    = new Mock <IRepository <Player> >();
            var       botMapper           = new BotMapper();
            var       botToCreateMapper   = new BotToCreateMapper();
            var       arenaLogic          = new Mock <IArenaLogic>();
            var       configurationHelper = new Mock <IConfigurationHelper>();
            IBotLogic botLogic            = new BotLogic(
                randomHelper.Object, botRepository.Object, scriptRepository.Object, playerRepository.Object,
                botMapper, botToCreateMapper, arenaLogic.Object, configurationHelper.Object);

            var botId      = Guid.NewGuid();
            var script     = "BotScript!";
            var botScripts = new List <BotScript>
            {
                new BotScript
                {
                    Id     = botId,
                    Script = script
                }
            };

            // Mock
            scriptRepository.Setup(x => x.Single(Any.Predicate <BotScript>()))
            .ReturnsAsync((Expression <Func <BotScript, bool> > predicate) => botScripts.SingleOrDefault(predicate.Compile()));

            // Act
            var result = await botLogic.GetBotScript(botId);

            // Assert
            result.Should().Be(script);
        }
Пример #8
0
        public async Task BotLogic_CreateBot_Should_Create_A_Bot_And_Not_Overlap_With_Existing_Bots()
        {
            // Arrange
            var       randomHelper        = new Mock <IRandomHelper>();
            var       botRepository       = new Mock <IRepository <Bot> >();
            var       scriptRepository    = new Mock <IRepository <BotScript> >();
            var       playerRepository    = new Mock <IRepository <Player> >();
            var       botMapper           = new BotMapper();
            var       botToCreateMapper   = new BotToCreateMapper();
            var       arenaLogic          = new Mock <IArenaLogic>();
            var       configurationHelper = new Mock <IConfigurationHelper>();
            IBotLogic botLogic            = new BotLogic(
                randomHelper.Object, botRepository.Object, scriptRepository.Object, playerRepository.Object,
                botMapper, botToCreateMapper, arenaLogic.Object, configurationHelper.Object);

            var arenaDto = new ArenaDto {
                Width = 3, Height = 3
            };
            var player = new Player {
                Id = Guid.NewGuid(), LastDeployment = DateTime.MinValue
            };
            var botToCreateDto = new BotToCreateDto
            {
                Name           = "BotName",
                MaximumHealth  = 100,
                MaximumStamina = 200,
                Script         = "BotScript"
            };
            var otherBots = new List <Bot>
            {
                new Bot {
                    X = 0, Y = 0
                },
                new Bot {
                    X = 1, Y = 0
                },
                new Bot {
                    X = 2, Y = 0
                },
                new Bot {
                    X = 0, Y = 1
                },
                new Bot {
                    X = 2, Y = 1
                },
                new Bot {
                    X = 0, Y = 2
                },
                new Bot {
                    X = 1, Y = 2
                },
                new Bot {
                    X = 2, Y = 2
                },
            };
            var botScripts = new List <BotScript>
            {
                new BotScript
                {
                    Id     = Guid.Empty,
                    Script = botToCreateDto.Script
                }
            };

            // Mock
            randomHelper.Setup(x => x.Get <PossibleOrientations>()).Returns(PossibleOrientations.South);
            botRepository.Setup(x => x.Find(Any.Predicate <Bot>(), i => i.Player)).ReturnsAsync(otherBots);
            randomHelper.Setup(x => x.Get(It.IsAny <int>())).Returns(0);
            arenaLogic.Setup(x => x.GetArena()).ReturnsAsync(arenaDto);
            botRepository.Setup(x => x.Create(It.IsAny <Bot>())).Returns <Bot>(Task.FromResult);
            playerRepository.Setup(x => x.Single(Any.Predicate <Player>())).ReturnsAsync(player);
            scriptRepository.Setup(x => x.Single(Any.Predicate <BotScript>()))
            .ReturnsAsync((Expression <Func <BotScript, bool> > predicate) => botScripts.SingleOrDefault(predicate.Compile()));
            scriptRepository.Setup(x => x.Update(It.IsAny <BotScript>())).Returns <BotScript>(Task.FromResult);

            // Act
            var result = await botLogic.CreateBot(botToCreateDto);

            // Assert
            result.Should().NotBeNull();
            result.X.Should().Be(1);
            result.Y.Should().Be(1);
        }