public void GetClientValidationRules_WithIClientModelValidator_CallsAttribute() { // Arrange var attribute = new TestableAttribute(); var validator = new DataAnnotationsModelValidator <TestableAttribute>(attribute); var metadata = _metadataProvider.GetMetadataForProperty( containerType: typeof(string), propertyName: nameof(string.Length)); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, _metadataProvider, requestServices); // Act var results = validator.GetClientValidationRules(context); // Assert var rule = Assert.Single(results); Assert.Equal("an error", rule.ErrorMessage); Assert.Empty(rule.ValidationParameters); Assert.Equal("testable", rule.ValidationType); }
public async Task Scan_Succeeds() { var startingPath = "/home/maarten"; var metadataLoadContext = this.mockRepository.Create <IMetadataLoadContext>(); var assemblyShim = this.mockRepository.Create <IAssemblyShim>(); var directoryTraverser = this.mockRepository.Create <IDirectoryTraverser>(); directoryTraverser.Setup(d => d.TraverseDirectories(startingPath)).Returns(new[] { "pathy/mcpathface" }); directoryTraverser.Setup(d => d.TraverseFiles(It.IsAny <string>(), It.IsAny <IEnumerable <string> >())).Returns(new[] { "filey.mcfile.face" }); var contract = TestableTypeBuilder.New() .WithName("IMyTestType") .WithNamespace("Test.Type") .Build(); var pluginAttributeTypedValue = new CustomAttributeTypedArgument(contract); var pluginAttribute = new TestableAttribute { _AttributeType = typeof(Prise.Plugin.PluginAttribute), _NamedArguments = new[] { new CustomAttributeNamedArgument(new TestableMemberInfo { _Name = "PluginType" }, pluginAttributeTypedValue) } }; var testableType = TestableTypeBuilder.New() .WithCustomAttributes(pluginAttribute) .WithName("MyTestType") .WithNamespace("Test.Type") .Build(); assemblyShim.Setup(a => a.Types).Returns(new[] { testableType }); metadataLoadContext.Setup(c => c.LoadFromAssemblyName(It.IsAny <string>())).Returns(assemblyShim.Object); var scanner = new DefaultAssemblyScanner( (s) => metadataLoadContext.Object, () => directoryTraverser.Object ); var types = await scanner.Scan(new AssemblyScannerOptions { StartingPath = startingPath, PluginType = contract }); var result = types.FirstOrDefault(); Assert.IsNotNull(result); Assert.AreEqual("MyTestType", result.PluginType.Name); Assert.AreEqual("Test.Type", result.PluginType.Namespace); }
public void Selecting_Plugin_Types_Works() { var assemblyShim = this.mockRepository.Create <IAssemblyShim>(); var contract = TestableTypeBuilder.New() .WithName("IMyTestType") .WithNamespace("Test.Type") .Build(); var pluginAttributeTypedValue = new CustomAttributeTypedArgument(contract); var pluginAttribute = new TestableAttribute { _AttributeType = typeof(Prise.Plugin.PluginAttribute), _NamedArguments = new[] { new CustomAttributeNamedArgument(new TestableMemberInfo { _Name = "PluginType" }, pluginAttributeTypedValue) } }; var testableType = TestableTypeBuilder.New() .WithCustomAttributes(pluginAttribute) .WithName("MyTestType") .WithNamespace("Test.Type") .Build(); var testableType2 = TestableTypeBuilder.New() .WithCustomAttributes(pluginAttribute) .WithName("MyTestType2") .WithNamespace("Test.Type") .Build(); assemblyShim.Setup(a => a.Types).Returns(new[] { testableType2, testableType, typeof(ITestPlugin) }); var selector = new DefaultPluginTypeSelector(); var pluginsTypes = selector.SelectPluginTypes(contract, assemblyShim.Object); Assert.AreEqual(2, pluginsTypes.Count()); Assert.AreEqual("MyTestType", pluginsTypes.First().Name); Assert.AreEqual("MyTestType2", pluginsTypes.ElementAt(1).Name); }
public async Task Compressed_NugetPackage_Must_Be_UnCompressed() { var package = "Prise.Plugin.Package.1.0.0.nupkg"; var startingPath = "/home/maarten"; var nugetUtilities = this.mockRepository.Create <INugetPackageUtilities>(); var metadataLoadContext = this.mockRepository.Create <IMetadataLoadContext>(); var assemblyShim = this.mockRepository.Create <IAssemblyShim>(); var directoryTraverser = this.mockRepository.Create <IDirectoryTraverser>(); var actualNugetUtilities = new DefaultNugetPackageUtilities(); nugetUtilities.Setup(n => n.FindAllNugetPackagesFiles(startingPath)).Returns(new[] { package }); // Call actual implementation here nugetUtilities.Setup(n => n.GetVersionFromPackageFile(It.IsAny <string>())).Returns <string>((s) => actualNugetUtilities.GetVersionFromPackageFile(s)); // Call actual implementation here nugetUtilities.Setup(n => n.GetPackageName(It.IsAny <string>())).Returns <string>((s) => actualNugetUtilities.GetPackageName(s)); nugetUtilities.Setup(n => n.HasAlreadyBeenExtracted(It.IsAny <string>())).Returns(false); nugetUtilities.Setup(n => n.UnCompressNugetPackage(It.IsAny <string>(), It.IsAny <string>())).Verifiable(); directoryTraverser.Setup(d => d.TraverseDirectories($"{startingPath}/_extracted")).Returns(new[] { "pathy/mcpathface" }); directoryTraverser.Setup(d => d.TraverseFiles(It.IsAny <string>(), It.IsAny <IEnumerable <string> >())).Returns(new[] { "filey.mcfile.face" }); var contract = TestableTypeBuilder.New() .WithName("IMyTestType") .WithNamespace("Test.Type") .Build(); var pluginAttributeTypedValue = new CustomAttributeTypedArgument(contract); var pluginAttribute = new TestableAttribute { _AttributeType = typeof(Prise.Plugin.PluginAttribute), _NamedArguments = new[] { new CustomAttributeNamedArgument(new TestableMemberInfo { _Name = "PluginType" }, pluginAttributeTypedValue) } }; var testableType = TestableTypeBuilder.New() .WithCustomAttributes(pluginAttribute) .WithName("MyTestType") .WithNamespace("Test.Type") .Build(); assemblyShim.Setup(a => a.Types).Returns(new[] { testableType }); metadataLoadContext.Setup(c => c.LoadFromAssemblyName(It.IsAny <string>())).Returns(assemblyShim.Object); var scanner = new DefaultNugetPackageAssemblyScanner( (s) => metadataLoadContext.Object, () => directoryTraverser.Object, () => nugetUtilities.Object ); var types = await scanner.Scan(new AssemblyScannerOptions { StartingPath = startingPath, PluginType = contract }); var result = types.FirstOrDefault(); Assert.IsNotNull(result); Assert.AreEqual("MyTestType", result.PluginType.Name); Assert.AreEqual("Test.Type", result.PluginType.Namespace); }
public void GetClientValidationRules_WithIClientModelValidator_CallsAttribute() { // Arrange var attribute = new TestableAttribute(); var validator = new DataAnnotationsModelValidator<TestableAttribute>(attribute); var metadata = _metadataProvider.GetMetadataForProperty( containerType: typeof(string), propertyName: nameof(string.Length)); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, _metadataProvider, requestServices); // Act var results = validator.GetClientValidationRules(context); // Assert var rule = Assert.Single(results); Assert.Equal("an error", rule.ErrorMessage); Assert.Empty(rule.ValidationParameters); Assert.Equal("testable", rule.ValidationType); }