public void SetPosition_WhenHighValueSquareIsAvalibleThatCanMake2Rows_ThisSquareIsUsed(int expected, int alreadyPopulatedA, int alreadyPopulatedB, int alreadyPopulatedC)
        {
            // Arrange
            var           mockLogger     = new Mock <ILogger <ComputerMoveMedium> >();
            IComputerMove classUnderTest = new ComputerMoveMedium(mockLogger.Object);
            var           mockFallback   = new Mock <IEnumerable <IComputerMove> >();
            var           game           = new Game();
            var           player         = Player.O;

            // assume square 5 was already taken (can make 4 rows)
            game.SetPosition(Player.X, 5);

            // assume squares 1, 3, 7, 9 are already taken (can make 3 rows)
            game.SetPosition(Player.X, 1);
            game.SetPosition(Player.X, 3);
            game.SetPosition(Player.X, 7);
            game.SetPosition(Player.X, 9);

            game.SetPosition(Player.X, alreadyPopulatedA);
            game.SetPosition(Player.X, alreadyPopulatedB);
            game.SetPosition(Player.X, alreadyPopulatedC);

            // Act
            var actual = classUnderTest.SetPosition(player, game.GetCurrentBoard(), mockFallback.Object);

            // Assert
            Assert.AreEqual(expected, actual);
        }
        public void IsMatch_GivenComputerLevel_MatchesGivenExpected(ComputerLevel computerLevel, bool expected)
        {
            // Arrange
            var           mockLogger     = new Mock <ILogger <ComputerMoveMedium> >();
            IComputerMove classUnderTest = new ComputerMoveMedium(mockLogger.Object);

            // Act
            var actual = classUnderTest.IsMatch(computerLevel);

            // Assert
            Assert.AreEqual(expected, actual);
        }
        public void SetPosition_WhenHighValueSquareIsAvalibleThatCanMake4Rows_ThisSquareIsUsed()
        {
            // Arrange
            var           mockLogger     = new Mock <ILogger <ComputerMoveMedium> >();
            IComputerMove classUnderTest = new ComputerMoveMedium(mockLogger.Object);
            var           mockFallback   = new Mock <IEnumerable <IComputerMove> >();
            var           game           = new Game();
            var           player         = Player.O;
            var           expected       = 5; // Only square 5 can make 4 rows

            // Act
            var actual = classUnderTest.SetPosition(player, game.GetCurrentBoard(), mockFallback.Object);

            // Assert
            Assert.AreEqual(expected, actual);
        }