public async Task TryUpdateModelNonGeneric_PredicateOverload_ReturnsTrue_ModelBindsAndValidatesSuccessfully()
        {
            // Arrange
            var binders = new IModelBinder[]
            {
                new TypeConverterModelBinder(),
                new ComplexModelDtoModelBinder(),
                new MutableObjectModelBinder()
            };

            var validator = new DataAnnotationsModelValidatorProvider();
            var model     = new MyModel
            {
                MyProperty       = "Old-Value",
                IncludedProperty = "Old-IncludedPropertyValue",
                ExcludedProperty = "Old-ExcludedPropertyValue"
            };

            var modelStateDictionary = new ModelStateDictionary();
            var values = new Dictionary <string, object>
            {
                { "", null },
                { "MyProperty", "MyPropertyValue" },
                { "IncludedProperty", "IncludedPropertyValue" },
                { "ExcludedProperty", "ExcludedPropertyValue" }
            };

            Func <ModelBindingContext, string, bool> includePredicate =
                (context, propertyName) =>
                string.Equals(propertyName, "IncludedProperty", StringComparison.OrdinalIgnoreCase) ||
                string.Equals(propertyName, "MyProperty", StringComparison.OrdinalIgnoreCase);

            var valueProvider    = new TestValueProvider(values);
            var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();

            // Act
            var result = await ModelBindingHelper.TryUpdateModelAsync(
                model,
                model.GetType(),
                "",
                Mock.Of <HttpContext>(),
                modelStateDictionary,
                metadataProvider,
                GetCompositeBinder(binders),
                valueProvider,
                new List <IInputFormatter>(),
                new DefaultObjectValidator(
                    new IExcludeTypeValidationFilter[0],
                    metadataProvider),
                validator,
                includePredicate);

            // Assert
            Assert.True(result);
            Assert.Equal("MyPropertyValue", model.MyProperty);
            Assert.Equal("IncludedPropertyValue", model.IncludedProperty);
            Assert.Equal("Old-ExcludedPropertyValue", model.ExcludedProperty);
        }
示例#2
0
        public async void CheckExcelFile_Bool_ShouldBeReturnFalse(DateTime datetimeUtc, int flag, bool expected)
        {
            // Arrange
            var fileService = new FileService();
            var fileName    = TestValueProvider.GetValueStringByFlag(flag);

            // Act
            var result = await fileService.CheckExcelFile(datetimeUtc, fileName);

            // Assert
            Assert.Equal(expected, result);
        }
        public async void GetFromExcelFile_CountList_ShouldBeReturnListFromExcel(int fileNameFlag, int expected)
        {
            // Arange
            var fileName = TestValueProvider.GetValueStringByFlag(fileNameFlag);
            var courseScheduleFileService = new CourseScheduleFileService(_importDataExcelService);

            // Act
            var result = await courseScheduleFileService.GetFromExcelFile(fileName);

            // Assert
            Assert.Equal(result.Count, expected);
        }
示例#4
0
        public async void GetLastWriteTime_DateTime_ShouldBeReturnFalseLastAccessTimeUtc(int flag, DateTime expected)
        {
            // Arrange
            var fileService = new FileService();
            var fileName    = TestValueProvider.GetValueStringByFlag(flag);

            // Act
            var result = await fileService.GetLastWriteTime(fileName);

            // Assert
            Assert.NotEqual(expected.Date, result.Date);
        }
        public async Task TryUpdateModel_UsingIncludeExpressionOverload_ReturnsTrue_ModelBindsAndValidatesSuccessfully()
        {
            // Arrange
            var binders = new IModelBinder[]
            {
                new TypeConverterModelBinder(),
                new ComplexModelDtoModelBinder(),
                new MutableObjectModelBinder()
            };

            var validator = new DataAnnotationsModelValidatorProvider();
            var model     = new MyModel
            {
                MyProperty       = "Old-Value",
                IncludedProperty = "Old-IncludedPropertyValue",
                ExcludedProperty = "Old-ExcludedPropertyValue"
            };

            var modelStateDictionary = new ModelStateDictionary();
            var values = new Dictionary <string, object>
            {
                { "", null },
                { "MyProperty", "MyPropertyValue" },
                { "IncludedProperty", "IncludedPropertyValue" },
                { "ExcludedProperty", "ExcludedPropertyValue" }
            };

            var valueProvider    = new TestValueProvider(values);
            var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();

            // Act
            var result = await ModelBindingHelper.TryUpdateModelAsync(
                model,
                "",
                Mock.Of <HttpContext>(),
                modelStateDictionary,
                TestModelMetadataProvider.CreateDefaultProvider(),
                GetCompositeBinder(binders),
                valueProvider,
                new List <IInputFormatter>(),
                new DefaultObjectValidator(new IExcludeTypeValidationFilter[0], metadataProvider),
                validator,
                m => m.IncludedProperty,
                m => m.MyProperty);

            // Assert
            Assert.True(result);
            Assert.Equal("MyPropertyValue", model.MyProperty);
            Assert.Equal("IncludedPropertyValue", model.IncludedProperty);
            Assert.Equal("Old-ExcludedPropertyValue", model.ExcludedProperty);
        }
示例#6
0
        public async void GetLastWriteTime_DateTime_ShouldBeReturnTrueLastAccessTimeUtc(int urlFlag, int fileNameFlag)
        {
            // Arrange
            var dateTime    = DateTime.Now;
            var fileService = new FileService();
            var fileName    = TestValueProvider.GetValueStringByFlag(fileNameFlag);
            await fileService.DownloadByLinkAsync(new Uri(TestValueProvider.GetValueStringByFlag(urlFlag)), fileName, CancellationToken.None);

            // Act
            var result = await fileService.GetLastWriteTime(fileName);

            // Assert
            Assert.Equal(dateTime.Date, result.Date);
        }
        public async Task TryUpdateModel_UsingDefaultIncludeOverload_IncludesAllProperties()
        {
            // Arrange
            var binders = new IModelBinder[]
            {
                new TypeConverterModelBinder(),
                new ComplexModelDtoModelBinder(),
                new MutableObjectModelBinder()
            };

            var validator = new DataAnnotationsModelValidatorProvider();
            var model     = new MyModel
            {
                MyProperty       = "Old-Value",
                IncludedProperty = "Old-IncludedPropertyValue",
                ExcludedProperty = "Old-ExcludedPropertyValue"
            };

            var modelStateDictionary = new ModelStateDictionary();
            var values = new Dictionary <string, object>
            {
                { "", null },
                { "MyProperty", "MyPropertyValue" },
                { "IncludedProperty", "IncludedPropertyValue" },
                { "ExcludedProperty", "ExcludedPropertyValue" }
            };

            var valueProvider    = new TestValueProvider(values);
            var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();

            // Act
            var result = await ModelBindingHelper.TryUpdateModelAsync(
                model,
                "",
                Mock.Of <HttpContext>(),
                modelStateDictionary,
                metadataProvider,
                GetCompositeBinder(binders),
                valueProvider,
                new DefaultObjectValidator(Mock.Of <IValidationExcludeFiltersProvider>(), metadataProvider),
                validator);

            // Assert
            // Includes everything.
            Assert.True(result);
            Assert.Equal("MyPropertyValue", model.MyProperty);
            Assert.Equal("IncludedPropertyValue", model.IncludedProperty);
            Assert.Equal("ExcludedPropertyValue", model.ExcludedProperty);
        }
示例#8
0
        public async void DownloadByLinkAsync_DoneTask_ShouldBeDownloadFileByLink(int urlFlag, int fileNameFlag)
        {
            // Arrange
            var fileService = new FileService();
            var url         = TestValueProvider.GetValueStringByFlag(urlFlag);
            var fileName    = Path.Combine(TestValueProvider.GetValueStringByFlag(fileNameFlag) + ".xlsx");

            // Act
            await fileService.DownloadByLinkAsync(new Uri(url), fileName, CancellationToken.None);

            // Assert
            var result = File.Exists(fileName);

            Assert.True(result);
        }
        private static DefaultModelBindingContext CreateContext(ModelMetadata metadata, object model = null)
        {
            var valueProvider = new TestValueProvider(new Dictionary <string, object>());

            return(new DefaultModelBindingContext()
            {
                BinderModelName = metadata.BinderModelName,
                BindingSource = metadata.BindingSource,
                IsTopLevelObject = true,
                Model = model,
                ModelMetadata = metadata,
                ModelName = "theModel",
                ModelState = new ModelStateDictionary(),
                ValueProvider = valueProvider,
            });
        }
示例#10
0
        public async void CheckExcelFile_Bool_ShouldBeReturnTrue(int urlFlag, int fileNameFlag, bool expected)
        {
            // Arrange
            var dateTime    = DateTime.Now;
            var fileService = new FileService();
            var fileName    = TestValueProvider.GetValueStringByFlag(fileNameFlag);
            await fileService.DownloadByLinkAsync(new Uri(TestValueProvider.GetValueStringByFlag(urlFlag)), fileName, CancellationToken.None);

            // Act
            var result = await fileService.CheckExcelFile(dateTime, fileName);

            _testOutputHelper.WriteLine(result.ToString(CultureInfo.CurrentCulture));

            // Assert
            Assert.Equal(expected, result);
        }
        public async Task TryUpdateModelNonGeneric_ModelTypeOverload_ReturnsTrue_IfModelBindsAndValidatesSuccessfully()
        {
            // Arrange
            var binders = new IModelBinder[]
            {
                new TypeConverterModelBinder(),
                new ComplexModelDtoModelBinder(),
                new MutableObjectModelBinder()
            };

            var validator = new DataAnnotationsModelValidatorProvider();
            var model     = new MyModel {
                MyProperty = "Old-Value"
            };
            var modelStateDictionary = new ModelStateDictionary();
            var values = new Dictionary <string, object>
            {
                { "", null },
                { "MyProperty", "MyPropertyValue" }
            };
            var valueProvider    = new TestValueProvider(values);
            var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();

            // Act
            var result = await ModelBindingHelper.TryUpdateModelAsync(
                model,
                model.GetType(),
                "",
                Mock.Of <HttpContext>(),
                modelStateDictionary,
                TestModelMetadataProvider.CreateDefaultProvider(),
                GetCompositeBinder(binders),
                valueProvider,
                new DefaultObjectValidator(
                    Mock.Of <IValidationExcludeFiltersProvider>(),
                    metadataProvider),
                validator);

            // Assert
            Assert.True(result);
            Assert.Equal("MyPropertyValue", model.MyProperty);
        }
        public async Task TryUpdateModel_ReturnsFalse_IfModelValidationFails()
        {
            // Arrange
            var expectedMessage = TestPlatformHelper.IsMono ? "The field MyProperty is invalid." :
                                  "The MyProperty field is required.";
            var binders = new IModelBinder[]
            {
                new TypeConverterModelBinder(),
                new ComplexModelDtoModelBinder(),
                new MutableObjectModelBinder()
            };

            var validator            = new DataAnnotationsModelValidatorProvider();
            var model                = new MyModel();
            var modelStateDictionary = new ModelStateDictionary();
            var values               = new Dictionary <string, object>
            {
                { "", null }
            };
            var valueProvider         = new TestValueProvider(values);
            var modelMetadataProvider = TestModelMetadataProvider.CreateDefaultProvider();

            // Act
            var result = await ModelBindingHelper.TryUpdateModelAsync(
                model,
                "",
                Mock.Of <HttpContext>(),
                modelStateDictionary,
                modelMetadataProvider,
                GetCompositeBinder(binders),
                valueProvider,
                new List <IInputFormatter>(),
                new DefaultObjectValidator(new IExcludeTypeValidationFilter[0], modelMetadataProvider),
                validator);

            // Assert
            Assert.False(result);
            var error = Assert.Single(modelStateDictionary["MyProperty"].Errors);

            Assert.Equal(expectedMessage, error.ErrorMessage);
        }
示例#13
0
        public async void DownloadByLinkAsync_DoneTask_ShouldBeDownloadFile(int fileNameFlag)
        {
            // Arrange
            var fileService = new FileService();
            var fileName    = Path.Combine(TestValueProvider.GetValueStringByFlag(fileNameFlag));
            var downloadFileParametersModel = new DownloadFileParametersModel
            {
                //https://www.mirea.ru/upload/medialibrary/97d/KBiSP-4-kurs-2-sem-_1_.xlsx
                PathToFile     = string.Empty,
                RemoteUri      = new Uri("https://www.mirea.ru/upload/medialibrary/97d/"),
                FileNameLocal  = fileName,
                FileNameRemote = "KBiSP-4-kurs-2-sem-_1_",
                FileFormat     = "xlsx"
            };

            // Act
            await fileService.DownloadAsync(downloadFileParametersModel, CancellationToken.None);

            // Assert
            var result = File.Exists(fileName + ".xlsx");

            Assert.True(result);
        }
示例#14
0
 private static DefaultModelBindingContext CreateContext(ModelMetadata metadata, object model = null)
 {
     var valueProvider = new TestValueProvider(new Dictionary<string, object>());
     return new DefaultModelBindingContext()
     {
         BinderModelName = metadata.BinderModelName,
         BindingSource = metadata.BindingSource,
         IsTopLevelObject = true,
         Model = model,
         ModelMetadata = metadata,
         ModelName = "theModel",
         ModelState = new ModelStateDictionary(),
         ValueProvider = valueProvider,
     };
 }