public void GetReadableAccessorAsync_GivenUnsupportedObjectProviderName_ShouldThrowException() { var expectedProviderName = "expected-provider"; var actualProviderName = "actual-provider"; var mockServiceProvider = new Mock <IServiceProvider>(); var mockInputObjectAccessorProvider = new Mock <IInputObjectAccessorProvider>(); var accessorProviderFactory = new NamedServiceFactory <IInputObjectAccessorProvider>( new Dictionary <string, Func <IServiceProvider, IInputObjectAccessorProvider> > { [expectedProviderName] = sp => mockInputObjectAccessorProvider.Object }); var accessorRequest = new InputObjectAccessorRequest { ExecutionMetadata = new ExecutionRequest { ExecutionId = Guid.NewGuid().ToString() }, ObjectMetadata = new ExtensionInputObject { Name = "InputObjectA" }, ObjectProviderName = actualProviderName }; var testAccessorProvider = new CompositeInputObjectAccessorProvider( mockServiceProvider.Object, accessorProviderFactory); Func <Task> act = async() => await testAccessorProvider.GetReadableAccessorAsync(accessorRequest); act.Should().Throw <NotSupportedException>(); }
public async Task RouteRequestAsync_ServiceWithGivenExecutionModelName_ShouldRouteSuccessfully() { const string modelName = "expected-model/v1"; var mockProcessor = new Mock<IExecutionProcessor>(); var mockServiceProvider = new Mock<IServiceProvider>(); var processorFactory = new NamedServiceFactory<IExecutionProcessor>( new Dictionary<string, Func<IServiceProvider, IExecutionProcessor>> { [modelName] = sp => mockProcessor.Object }); var execRequest = new ExecutionRequest { ExecutionId = Guid.NewGuid().ToString(), ExecutionModelName = modelName }; var execContext = new Core.Models.ExecutionContext { ExecutionId = execRequest.ExecutionId, Status = ExecutionStatus.Succeeded }; mockProcessor.Setup(ep => ep.ProcessRequestAsync(execRequest, CancellationToken.None)) .Returns(Task.FromResult(execContext)); var execRequestRouter = new ExecutionRequestRouter(processorFactory, mockServiceProvider.Object); var actualExecContext = await execRequestRouter.RouteRequestAsync(execRequest, CancellationToken.None); actualExecContext.Should().NotBeNull(); actualExecContext.Should().Be(execContext); }
public void RouteRequestAsync_NoServiceWithGivenExecutionModelName_ShouldThrowException() { const string actualModelName = "actual-model/v1"; const string expectedModelName = "expected-model/v1"; var mockProcessor = new Mock<IExecutionProcessor>(); var mockServiceProvider = new Mock<IServiceProvider>(); var processorFactory = new NamedServiceFactory<IExecutionProcessor>( new Dictionary<string, Func<IServiceProvider, IExecutionProcessor>> { [expectedModelName] = sp => mockProcessor.Object }); var execRequest = new ExecutionRequest { ExecutionId = Guid.NewGuid().ToString(), ExecutionModelName = actualModelName }; var execRequestRouter = new ExecutionRequestRouter(processorFactory, mockServiceProvider.Object); Func<Task> act = async () => await execRequestRouter.RouteRequestAsync(execRequest, CancellationToken.None); act.Should().Throw<NotSupportedException>(); }
public void RouteRequestAsync_NullExecutionRequest_ShouldThrowException() { var mockServiceProvider = new Mock<IServiceProvider>(); var processorFactory = new NamedServiceFactory<IExecutionProcessor>(); var execRequestRouter = new ExecutionRequestRouter(processorFactory, mockServiceProvider.Object); Func<Task> act = async () => await execRequestRouter.RouteRequestAsync(null, CancellationToken.None); act.Should().Throw<ArgumentNullException>(); }
public void GetReadableAccessorAsync_GivenNullInputObjectAccessorRequest_ShouldThrowException() { var mockServiceProvider = new Mock <IServiceProvider>(); var accessorProviderFactory = new NamedServiceFactory <IInputObjectAccessorProvider>(); var testAccessorProvider = new CompositeInputObjectAccessorProvider( mockServiceProvider.Object, accessorProviderFactory); Func <Task> act = async() => await testAccessorProvider.GetReadableAccessorAsync(null); act.Should().Throw <ArgumentNullException>(); }
public ServiceProviderCodecFactory(IServiceProvider serviceProvider) { this.serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); // Get the registered service collection, which can be used to get a list of registered types var serviceCollection = serviceProvider.GetService <IServiceCollection>(); // Retrieve a list of registered types that subclass Codec. Codecs must be registered by // their concrete type so we can differentiate between them later when calling GetService(). this.codecTypes = serviceCollection .Where(t => typeof(Codec).IsAssignableFrom(t.ServiceType)) .ToDictionary( t => NamedServiceFactory <Codec> .GetServiceName(t.ImplementationType), t => t.ImplementationType ); }
public BlockType(BlockService blockService, FieldTemplateService fieldTemplateService, NamedServiceFactory <IBlockDataBuilder> blockDataBuilderFactory, RouteInfoService routeInfoService) { Name = "Block"; Description = "Block data"; Field(p => p.SystemId, type: typeof(IdGraphType)).Description("The block Id"); Field <StringGraphType>(nameof(BlockModel.BlockType), "The block type", resolve: context => { var block = blockService.Get(context.Source.SystemId); var template = fieldTemplateService.Get <BlockFieldTemplate>(block.FieldTemplateSystemId); return(template.Id); }); FieldAsync <StringGraphType>(nameof(BlockModel.ValueAsJSON), "Value as JSON string", arguments: new QueryArguments( new QueryArgument <GlobalInputType> { Name = "global", Description = "The global object" } ), resolve: async context => { var block = blockService.Get(context.Source.SystemId); var template = fieldTemplateService.Get <BlockFieldTemplate>(block.FieldTemplateSystemId); // Special treatment for scoped services https://graphql-dotnet.github.io/docs/getting-started/dependency-injection/#scoped-services-with-a-singleton-schema-lifetime // and make sure it is thread safe https://graphql-dotnet.github.io/docs/getting-started/dependency-injection/#thread-safety-with-scoped-services using var scope = context.RequestServices.CreateScope(); var builder = scope.ServiceProvider.GetNamedService <IBlockDataBuilder>(template.Id); if (builder == null) { return(null); } var globalModel = context.GetArgument <GlobalModel>("global"); routeInfoService.Setup(globalModel, context.Source.PageSystemId); var buildMethod = builder.GetType().GetMethod(nameof(IBlockDataBuilder <IViewModel> .BuildAsync)); var value = await(dynamic) buildMethod.Invoke(builder, new object[] { scope, new Web.Models.Blocks.BlockModel(block, block.Fields) }); var jsonSerializerSettings = ApplicationConverter.JsonSerializerSettings(); // jsonSerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; return(JsonConvert.SerializeObject(value, jsonSerializerSettings)); }); }
public async Task GetReadableAccessorAsync_GivenSupportedObjectProviderName_ShouldReturnAccessor() { var providerName = "provider"; var mockServiceProvider = new Mock <IServiceProvider>(); var mockInputObjectAccessorProvider = new Mock <IInputObjectAccessorProvider>(); var objectMetadata = new ExtensionInputObject { Name = "InputObjectA" }; var accessorProviderFactory = new NamedServiceFactory <IInputObjectAccessorProvider>( new Dictionary <string, Func <IServiceProvider, IInputObjectAccessorProvider> > { [providerName] = sp => mockInputObjectAccessorProvider.Object }); var accessorRequest = new InputObjectAccessorRequest { ExecutionMetadata = new ExecutionRequest { ExecutionId = Guid.NewGuid().ToString() }, ObjectMetadata = objectMetadata, ObjectProviderName = providerName }; var expectedAccessor = JObject.FromObject(new InputObjectAccessor { ObjectAccessor = JObject.FromObject(accessorRequest), ObjectMetadata = objectMetadata }); mockInputObjectAccessorProvider.Setup(ap => ap.GetReadableAccessorAsync(accessorRequest)) .Returns(Task.FromResult(expectedAccessor)); var testAccessorProvider = new CompositeInputObjectAccessorProvider( mockServiceProvider.Object, accessorProviderFactory); var actualAccessor = await testAccessorProvider.GetReadableAccessorAsync(accessorRequest); actualAccessor.Should().NotBeNull(); actualAccessor.Should().BeEquivalentTo(expectedAccessor); }
/// <summary> /// Creates a new codec. /// <para/> /// The <see cref="Codec.Name"/> will be written into the index segment: in order for /// the segment to be read this class should be registered by subclassing <see cref="DefaultCodecFactory"/> and /// calling <see cref="DefaultCodecFactory.ScanForCodecs(System.Reflection.Assembly)"/> in the class constructor. /// The new <see cref="ICodecFactory"/> can be registered by calling <see cref="SetCodecFactory"/> at application startup.</summary> protected Codec() { name = NamedServiceFactory <Codec> .GetServiceName(this.GetType()); }
/// <summary> /// Creates a new docvalues format. /// <para/> /// The provided name will be written into the index segment in some configurations /// (such as when using <see cref="Codecs.PerField.PerFieldDocValuesFormat"/>): in such configurations, /// for the segment to be read this class should be registered by subclassing <see cref="DefaultDocValuesFormatFactory"/> and /// calling <see cref="DefaultDocValuesFormatFactory.ScanForDocValuesFormats(System.Reflection.Assembly)"/> in the class constructor. /// The new <see cref="IDocValuesFormatFactory"/> can be registered by calling <see cref="SetDocValuesFormatFactory(IDocValuesFormatFactory)"/> /// at application startup. /// </summary> protected DocValuesFormat() { this.name = NamedServiceFactory <DocValuesFormat> .GetServiceName(this.GetType()); }
/// <summary> /// Creates a new postings format. /// <para/> /// The provided name will be written into the index segment in some configurations /// (such as when using <see cref="PerField.PerFieldPostingsFormat"/>): in such configurations, /// for the segment to be read this class should be registered by subclassing <see cref="DefaultPostingsFormatFactory"/> and /// calling <see cref="DefaultPostingsFormatFactory.ScanForPostingsFormats(System.Reflection.Assembly)"/> in the class constructor. /// The new <see cref="IPostingsFormatFactory"/> can be registered by calling <see cref="SetPostingsFormatFactory(IPostingsFormatFactory)"/> at application startup.</summary> protected PostingsFormat() { this.name = NamedServiceFactory <PostingsFormat> .GetServiceName(this.GetType()); }
public ProductFieldViewModelBuilder(FieldDefinitionService fieldDefinitionService, NamedServiceFactory <FieldFormatter> fieldFormatterServiceFactory) { _fieldDefinitionService = fieldDefinitionService; _fieldFormatterServiceFactory = fieldFormatterServiceFactory; }