/// <inheritdoc/>
        public async Task RenderAsync(TextWriter output, Content parentContent, IContentPayload currentPayload, PropertyBag context)
        {
            if (!context.TryGet(PublicationStateContextKey, out PublicationStateToRender stateToRender))
            {
                throw new InvalidOperationException($"The context must contain the '{PublicationStateContextKey}' property");
            }

            if (currentPayload is PublicationWorkflowContentPayload payload)
            {
                ContentState contentState = await this.contentStore.GetContentStateForWorkflowAsync(payload.Slug, WellKnownWorkflowId.ContentPublication).ConfigureAwait(false);

                if (CanRender(contentState, stateToRender))
                {
                    Content content = await this.contentStore.GetContentAsync(contentState.ContentId, contentState.Slug).ConfigureAwait(false);

                    IContentRenderer renderer = this.contentRendererFactory.GetRendererFor(content.ContentPayload);
                    await renderer.RenderAsync(output, content, content.ContentPayload, context).ConfigureAwait(false);
                }
                else
                {
                    // TODO: How are we rendering error/invalid/missing states?
                }
            }
            else
            {
                throw new ArgumentException(nameof(currentPayload));
            }
        }
Exemple #2
0
 /// <inheritdoc/>
 public async Task RenderAsync(TextWriter output, Content parentContent, IContentPayload currentPayload, PropertyBag context)
 {
     if (currentPayload is CompoundPayload compoundPayload)
     {
         foreach (IContentPayload child in compoundPayload.Children)
         {
             IContentRenderer renderer = this.contentRendererFactory.GetRendererFor(child);
             await renderer.RenderAsync(output, parentContent, child, context).ConfigureAwait(false);
         }
     }
     else
     {
         throw new ArgumentException(nameof(currentPayload));
     }
 }
        public async Task WhenIRenderTheContentCalledToWithTheContext(string contentName, string outputName, string contextJson)
        {
            Content content = this.scenarioContext.Get <Content>(contentName);
            IContentRendererFactory rendererFactory = ContainerBindings.GetServiceProvider(this.featureContext).GetService <IContentRendererFactory>();
            IContentRenderer        renderer        = rendererFactory.GetRendererFor(content.ContentPayload);

            using var stream = new MemoryStream();
            using var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true);
            await renderer.RenderAsync(writer, content, content.ContentPayload, new PropertyBag(JObject.Parse("{" + contextJson + "}"))).ConfigureAwait(false);

            await writer.FlushAsync().ConfigureAwait(false);

            stream.Position  = 0;
            using var reader = new StreamReader(stream, Encoding.UTF8, true, 1024, true);
            this.scenarioContext.Set(await reader.ReadToEndAsync().ConfigureAwait(false), outputName);
        }
Exemple #4
0
        /// <inheritdoc/>
        public async Task RenderAsync(TextWriter output, Content parentContent, IContentPayload currentPayload, PropertyBag context)
        {
            if (!context.TryGet(AbTestIdContextKey, out string abTestId))
            {
                throw new InvalidOperationException($"The context must contain the '{AbTestIdContextKey}' property");
            }

            if (currentPayload is AbTestSetPayload testSet)
            {
                Content content = await testSet.GetContentForAbGroupAsync(abTestId).ConfigureAwait(false);

                IContentRenderer renderer = this.contentRendererFactory.GetRendererFor(content.ContentPayload);
                await renderer.RenderAsync(output, content, content.ContentPayload, context).ConfigureAwait(false);
            }
            else
            {
                throw new ArgumentException(nameof(currentPayload));
            }
        }
        public virtual async Task <GetRecommendationsResponse> Handle(GetRecommendationsRequest request, CancellationToken cancellationToken)
        {
            var scenario = _options.Scenarios.FirstOrDefault(x => x.Name.EqualsInvariant(request.Scenario ?? _options.DefaultScenario));

            if (scenario == null)
            {
                throw new OperationCanceledException($"scenario {request.Scenario} not found");
            }
            var content = await _contentRenderer.RenderAsync(scenario.Connection.RequestContentTemplate, request);

            var downsteamRequest = new DownstreamRequestBuilder().WithContentString(content, scenario.Connection.ContentType)
                                   .WithScenario(scenario)
                                   .WithUrl(scenario.Connection.Url)
                                   .WithMethod(scenario.Connection.Method ?? "GET")
                                   .WithHeaders(scenario.Connection.Headers)
                                   .Build();
            var response = await _sender.SendRequestAsync(downsteamRequest) as GetRecommendationsResponse;

            return(response);
        }