public void ProgressReturnPlayerProgressWhenBetIsValid()
        {
            // Arrange
            var configuration = new ConfigurationBuilder()
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile("config.json")
                                .Build();

            _config = Options.Create(configuration.Get <QuestConfiguration>());

            var controller = new ProgressController(_fakePlayerRepository, _config);

            var bet = new PlayerBet
            {
                PlayerId      = "P01",
                PlayerLevel   = 2,
                ChipAmountBet = 10
            };

            var player         = _fakePlayerRepository.GetPlayer(bet.PlayerId);
            var expectedResult = CalculateProgress(_config.Value, player, bet);

            //Act
            var result = controller.Progress(bet);

            //Assert
            var okObjectResult = Assert.IsType <OkObjectResult>(result);
            var model          = Assert.IsType <PlayerProgress>(okObjectResult.Value);

            Assert.Equal(expectedResult.TotalQuestPercentCompleted, model.TotalQuestPercentCompleted);
            Assert.True(expectedResult.MilestonesCompleted.All(shouldItem => model.MilestonesCompleted.Any(isItem => isItem.MilestoneIndex == shouldItem.MilestoneIndex && isItem.ChipsAwarded == shouldItem.ChipsAwarded)));
            Assert.Equal(expectedResult.QuestPointsEarned, model.QuestPointsEarned);
        }
        public void ProgressReturnNotFoundWhenQuestConfigNotFound()
        {
            // Arrange
            var configuration = new ConfigurationBuilder()
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile("config.json")
                                .Build();

            _config             = Options.Create(configuration.Get <QuestConfiguration>());
            _config.Value.Quest = null;

            var controller = new ProgressController(_fakePlayerRepository, _config);

            var bet = new PlayerBet
            {
                PlayerId      = "P01",
                PlayerLevel   = 2,
                ChipAmountBet = 10
            };

            //Act
            var result = controller.Progress(bet);

            //Assert
            var notFoundObjectResult = Assert.IsType <NotFoundObjectResult>(result);

            Assert.Null(notFoundObjectResult.Value);
        }
        public void ProgressReturnBadRequestWhenBetIsNull()
        {
            // Arrange
            var configuration = new ConfigurationBuilder()
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile("config.json")
                                .Build();

            _config = Options.Create(configuration.Get <QuestConfiguration>());

            var controller = new ProgressController(_fakePlayerRepository, _config);

            //Act
            var result = controller.Progress(null);

            //Assert
            Assert.IsType <BadRequestResult>(result);
        }