public async Task CreateEffectAsync_ValidInput_ReturnSuccess()
        {
            var charProvider   = new MockCharacterProvider();
            var effectProvider = new MockEffectProvider();
            var statProvider   = new MockStatisticProvider();
            var controller     = new EffectController(charProvider, effectProvider, statProvider, new GeneralOptions());

            var result = await controller.CreateEffectAsync(1, "ValidInput");

            Assert.Equal(EffectResult.EffectCreatedSuccessfully(), result);
        }
        public async Task SetStatisticEffectAsync_InvalidEffectName_ReturnEffectNotFound()
        {
            // Arrange
            var charProvider   = new MockCharacterProvider();
            var effectProvider = new MockEffectProvider();
            var statProvider   = new MockStatisticProvider();

            var controller = new EffectController(charProvider, effectProvider, statProvider, null);

            var result = await controller.SetStatisticEffectAsync("DoesNotExist", "Strength", 1);

            Assert.Equal(EffectResult.EffectNotFound(), result);
        }
        public async Task CreateEffectAsync_AlreadyExists_ReturnNameAlreadyExists()
        {
            var charProvider   = new MockCharacterProvider();
            var effectProvider = new MockEffectProvider();
            var statProvider   = new MockStatisticProvider();
            var controller     = new EffectController(charProvider, effectProvider, statProvider, new GeneralOptions());

            await controller.CreateEffectAsync(1, "AlreadyExists");

            var result = await controller.CreateEffectAsync(1, "AlreadyExists");

            Assert.Equal(EffectResult.NameAlreadyExists(), result);
        }
        public async Task DeleteEffect_InvalidEffectName_ReturnNotFound()
        {
            // Arrange
            var charProvider   = new MockCharacterProvider();
            var statProvider   = new MockStatisticProvider();
            var effectProvider = new MockEffectProvider();
            var controller     = new EffectController(charProvider, effectProvider, statProvider, new GeneralOptions());

            // Act
            var result = await controller.DeleteEffectAsync("DoesNotExist");

            // Assert
            Assert.Equal(result, EffectResult.EffectNotFound());
        }
        public async Task SetStatisticEffectAsync_InvalidStatisticName_ReturnStatisticNotFound()
        {
            // Arrange
            var charProvider   = new MockCharacterProvider();
            var effectProvider = new MockEffectProvider();
            var statProvider   = new MockStatisticProvider();

            var controller = new EffectController(charProvider, effectProvider, statProvider, null);

            await effectProvider.CreateEffectAsync(1, "ValidInput");

            var result = await controller.SetStatisticEffectAsync("ValidInput", "DoesNotExist", 1);

            Assert.Equal(StatisticResult.StatisticNotFound(), result);
        }
        public async Task SetStatisticEffectAsync_ValidInput_ReturnSuccess()
        {
            // Arrange
            var charProvider   = new MockCharacterProvider();
            var effectProvider = new MockEffectProvider();
            var statProvider   = new MockStatisticProvider();

            var controller = new EffectController(charProvider, effectProvider, statProvider, null);

            await effectProvider.CreateEffectAsync(1, "ValidInput");

            var result = await controller.SetStatisticEffectAsync("ValidInput", "Strength", 1);

            Assert.Equal(EffectResult.EffectUpdatedSucessfully(), result);
        }
        public async Task DeleteEffect_ValidInput_ReturnSuccess()
        {
            // Arrange
            var charProvider   = new MockCharacterProvider();
            var statProvider   = new MockStatisticProvider();
            var effectProvider = new MockEffectProvider();
            var controller     = new EffectController(charProvider, effectProvider, statProvider, new GeneralOptions());

            // Act
            await effectProvider.CreateEffectAsync(1, "ValidInput");

            var result = await controller.DeleteEffectAsync("ValidInput");

            // Assert
            Assert.Equal(result, EffectResult.EffectDeletedSuccessfully());
        }
        public async Task AddEffectAsync_ValidInput_ReturnSuccess()
        {
            // Arrange
            var charProvider   = new MockCharacterProvider();
            var effectProvider = new MockEffectProvider();
            var statProvider   = new MockStatisticProvider();
            var controller     = new EffectController(charProvider, effectProvider, statProvider, new GeneralOptions());

            var effect = await effectProvider.CreateEffectAsync(1, "ValidInput");

            // Act
            await controller.AddEffectAsync(1, "ValidInput");

            // Assert
            var character = await charProvider.GetActiveCharacterAsync(1);

            Assert.True(character.Effects.Contains(effect));
        }