public async Task ConfirmItHasAnDifficultyLevel()
        {
            // Arrange

            // Act
            var result = await sut.HasDifficultyLevel(DifficultyLevel.TEST);

            // Assert
            Assert.That(result, Is.True);
        }
        public async Task <IAnnonymousGameResult> CreateAnnonymousGame(DifficultyLevel difficultyLevel)
        {
            var result = new AnnonymousGameResult();

            try
            {
                if (await difficultiesRepository.HasDifficultyLevel(difficultyLevel))
                {
                    var game = new Game(new Difficulty {
                        DifficultyLevel = difficultyLevel
                    });

                    game.SudokuMatrix.GenerateSolution();

                    var sudokuMatrix = new List <List <int> >();

                    for (var i = 0; i < 73; i += 9)
                    {
                        result.SudokuMatrix.Add(game.SudokuMatrix.ToDisplayedIntList().GetRange(i, 9));
                    }

                    result.Success = true;
                    result.Message = GamesMessages.GameCreatedMessage;
                }
                else
                {
                    result.Success = false;
                    result.Message = DifficultiesMessages.DifficultyNotFoundMessage;
                }

                return(result);
            }
            catch (Exception exp)
            {
                result.Success = false;
                result.Message = exp.Message;

                return(result);
            }
        }
        public async Task <IDifficultyResult> CreateDifficulty(
            string name,
            string displayName,
            DifficultyLevel difficultyLevel)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            if (string.IsNullOrEmpty(displayName))
            {
                throw new ArgumentNullException(nameof(displayName));
            }

            var result = new DifficultyResult();

            try
            {
                if (!(await difficultiesRepository.HasDifficultyLevel(difficultyLevel)))
                {
                    var difficulty = new Difficulty()
                    {
                        Name            = name,
                        DisplayName     = displayName,
                        DifficultyLevel = difficultyLevel
                    };

                    var response = await difficultiesRepository.Add(difficulty);

                    if (response.Success)
                    {
                        result.Success    = response.Success;
                        result.Message    = DifficultiesMessages.DifficultyCreatedMessage;
                        result.Difficulty = (IDifficulty)response.Object;

                        return(result);
                    }
                    else if (!response.Success && response.Exception != null)
                    {
                        result.Success = response.Success;
                        result.Message = response.Exception.Message;

                        return(result);
                    }
                    else
                    {
                        result.Success = false;
                        result.Message = DifficultiesMessages.DifficultyNotCreatedMessage;

                        return(result);
                    }
                }
                else
                {
                    result.Success = false;
                    result.Message = DifficultiesMessages.DifficultyAlreadyExistsMessage;

                    return(result);
                }
            }
            catch (Exception exp)
            {
                result.Success = false;
                result.Message = exp.Message;

                return(result);
            }
        }