public async Task DeleteDiscountAsync__An_unexpected_internal_error_occurred__Should_throw_Exception()
        {
            _discountDbServiceMock.Setup(x => x.DeleteAsync(It.IsAny <string>())).ThrowsAsync(new Exception());
            var controller = new DiscountsController(_discountDbServiceMock.Object, _logger, _mapperMock.Object);

            Func <Task> result = async() => await controller.DeleteDiscountAsync("1");

            await result.Should().ThrowExactlyAsync <Exception>();
        }
        public async Task DeleteDiscountAsync__Delete_succeeded__Should_return_200OK_response()
        {
            _discountDbServiceMock.Setup(x => x.DeleteAsync(It.IsNotNull <string>()));
            var controller = new DiscountsController(_discountDbServiceMock.Object, _logger, _mapperMock.Object);

            var result = await controller.DeleteDiscountAsync("1");

            (result as ObjectResult).StatusCode.Should().Be(200);
            ((result as ObjectResult).Value as ResponseWrapper).Error.Should().BeEquivalentTo(new ApiError());
        }
        public async Task DeleteDiscountAsync__Argument_id_is_null_or_empty__Should_return_400BadRequest_response([Values(null, "")] string id)
        {
            _discountDbServiceMock.Setup(x => x.DeleteAsync(id)).ThrowsAsync(new ArgumentException());
            var controller = new DiscountsController(_discountDbServiceMock.Object, _logger, _mapperMock.Object);

            var result = await controller.DeleteDiscountAsync(id);

            (result as ObjectResult).StatusCode.Should().Be(400);
            ((result as ObjectResult).Value as ResponseWrapper).Error.Should().NotBeNull();
        }
        public async Task DeleteDiscountAsync__An_internal_error_reffered_to_the_database_occurred__Should_throw_InternalDbServiceException()
        {
            // Example of these errors: database does not exist, table does not exist etc.

            _discountDbServiceMock.Setup(x => x.DeleteAsync(It.IsAny <string>())).ThrowsAsync(new InternalDbServiceException());
            var controller = new DiscountsController(_discountDbServiceMock.Object, _logger, _mapperMock.Object);

            Func <Task> result = async() => await controller.DeleteDiscountAsync("1");

            await result.Should().ThrowExactlyAsync <InternalDbServiceException>();
        }
        public async Task DeleteDiscountAsync__Element_not_found__Should_return_404NotFound_response_with_error()
        {
            string id = "-1";

            _discountDbServiceMock.Setup(x => x.DeleteAsync(id)).ThrowsAsync(new InvalidOperationException());
            var controller = new DiscountsController(_discountDbServiceMock.Object, _logger, _mapperMock.Object);

            var result = await controller.DeleteDiscountAsync(id);

            (result as ObjectResult).StatusCode.Should().Be(404);
            ((result as ObjectResult).Value as ResponseWrapper).Error.Should().NotBeNull();
        }