public async Task Services_ParametersService_Should_Return_Parameter()
        {
            // Setup
            DbContextOptions <StackGameContext> options = GenerateDbContextOptions();
            Parameter parameter = new()
            {
                Id          = 988,
                Key         = "test_parameter",
                Description = "Test parameter in memory database",
                Value       = "Working!!!"
            };

            // Seed
            using (StackGameContext dbContext = new StackGameContext(options))
            {
                await dbContext.Parameters.AddAsync(parameter);

                await dbContext.SaveChangesAsync();
            }
            var _memoryCache = new MemoryCache(new MemoryCacheOptions());
            var _logger      = Mocks.MocksCreator.CreateLoggerMock <global::Services.ParametersService>();

            using var dbContext2 = new StackGameContext(options);
            var parametersService = new global::Services.ParametersService(_memoryCache, _logger.Object, dbContext2);

            var result = await parametersService.GetParameterAsync(parameter.Key);

            var parameterRetrived = result.Value;

            Assert.IsNotNull(result);
            Assert.IsTrue(result.IsSuccess);
            Assert.IsFalse(result.IsFailed);
            Assert.IsNotNull(parameterRetrived);

            Assert.AreEqual(parameter.Id, parameterRetrived.Id);
            Assert.AreEqual(parameter.Description, parameterRetrived.Description);
            Assert.AreEqual(parameter.Value, parameterRetrived.Value);
        }
        public async Task Services_ParametersService_Should_Return_Error_Result_When_Parameter_Key_Does_Not_Exists()
        {
            // Setup
            DbContextOptions <StackGameContext> options = GenerateDbContextOptions();
            var _memoryCache = new MemoryCache(new MemoryCacheOptions());
            var _logger      = Mocks.MocksCreator.CreateLoggerMock <global::Services.ParametersService>();

            using var dbContext = new StackGameContext(options);
            var parametersService = new global::Services.ParametersService(_memoryCache, _logger.Object, dbContext);
            var key    = "THIS_KEY_DOES_NOT_EXISTS";
            var result = await parametersService.GetParameterAsync(key);


            Assert.IsNotNull(result);
            Assert.IsTrue(result.IsFailed);
            Assert.IsFalse(result.IsSuccess);
            Assert.Throws <InvalidOperationException>(delegate { var _ = result.Value; });
            Assert.IsTrue(result.HasError <ParameterNotFoundError>());
            ParameterNotFoundError error = (ParameterNotFoundError)result.Errors.Find(x => x.GetType() == typeof(ParameterNotFoundError));

            Assert.IsNotNull(error);
            Assert.AreEqual(key, error.Key);
        }