public async Task CreateValueProviderAsync_DoesNotAddValueProvider_IfFileCollectionIsEmpty()
        {
            // Arrange
            var factory = new FormFileValueProviderFactory();
            var context = CreateContext("multipart/form-data");

            // Act
            await factory.CreateValueProviderAsync(context);

            // Assert
            Assert.Empty(context.ValueProviders);
        }
        public async Task CreateValueProviderAsync_DoesNotAddValueProvider_IfRequestDoesNotHaveFormContent()
        {
            // Arrange
            var factory = new FormFileValueProviderFactory();
            var context = CreateContext("application/json");

            // Act
            await factory.CreateValueProviderAsync(context);

            // Assert
            Assert.Empty(context.ValueProviders);
        }
        public async Task GetValueProviderAsync_ThrowsOriginalException_IfReadingFormThrows()
        {
            // Arrange
            var exception            = new TimeZoneNotFoundException();
            var valueProviderContext = CreateThrowingContext(exception);

            var factory = new FormFileValueProviderFactory();

            // Act & Assert
            var ex = await Assert.ThrowsAsync <TimeZoneNotFoundException>(() => factory.CreateValueProviderAsync(valueProviderContext));

            Assert.Same(exception, ex);
        }
        public async Task GetValueProviderAsync_ThrowsValueProviderException_IfReadingFormThrowsInvalidOperationException()
        {
            // Arrange
            var exception            = new IOException();
            var valueProviderContext = CreateThrowingContext(exception);

            var factory = new FormFileValueProviderFactory();

            // Act & Assert
            var ex = await Assert.ThrowsAsync <ValueProviderException>(() => factory.CreateValueProviderAsync(valueProviderContext));

            Assert.Same(exception, ex.InnerException);
        }
        public async Task CreateValueProviderAsync_AddsValueProvider()
        {
            // Arrange
            var factory = new FormFileValueProviderFactory();
            var context = CreateContext("multipart/form-data; boundary=----WebKitFormBoundarymx2fSWqWSd0OxQqq");
            var files   = (FormFileCollection)context.ActionContext.HttpContext.Request.Form.Files;

            files.Add(new FormFile(Stream.Null, 0, 10, "some-name", "some-name"));

            // Act
            await factory.CreateValueProviderAsync(context);

            // Assert
            Assert.Collection(
                context.ValueProviders,
                v => Assert.IsType <FormFileValueProvider>(v));
        }