Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/Nest/Nest.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -1084,6 +1084,9 @@
<Compile Include="Search\SearchTemplate\DeleteSearchTemplate\DeleteSearchTemplateResponse.cs" />
<Compile Include="Search\SearchTemplate\DeleteSearchTemplate\ElasticClient-DeleteSearchTemplate.cs" />
<Compile Include="Search\SearchTemplate\ElasticClient-SearchTemplate.cs" />
<Compile Include="Search\SearchTemplate\RenderSearchTemplate\ElasticClient-RenderSearchTemplate.cs" />
<Compile Include="Search\SearchTemplate\RenderSearchTemplate\RenderSearchTemplateRequest.cs" />
<Compile Include="Search\SearchTemplate\RenderSearchTemplate\RenderSearchTemplateResponse.cs" />
<Compile Include="Search\SearchTemplate\GetSearchTemplate\ElasticClient-GetSearchTemplate.cs" />
<Compile Include="Search\SearchTemplate\GetSearchTemplate\GetSearchTemplateRequest.cs" />
<Compile Include="Search\SearchTemplate\GetSearchTemplate\GetSearchTemplateResponse.cs" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using System;
using System.Threading.Tasks;
using Elasticsearch.Net;

namespace Nest
{
public partial interface IElasticClient
{
/// <inheritdoc/>
IRenderSearchTemplateResponse RenderSearchTemplate(Func<RenderSearchTemplateDescriptor, IRenderSearchTemplateRequest> selector);

/// <inheritdoc/>
IRenderSearchTemplateResponse RenderSearchTemplate(IRenderSearchTemplateRequest request);

/// <inheritdoc/>
Task<IRenderSearchTemplateResponse> RenderSearchTemplateAsync(Func<RenderSearchTemplateDescriptor, IRenderSearchTemplateRequest> selector);

/// <inheritdoc/>
Task<IRenderSearchTemplateResponse> RenderSearchTemplateAsync(IRenderSearchTemplateRequest request);
}
public partial class ElasticClient
{
public IRenderSearchTemplateResponse RenderSearchTemplate(Func<RenderSearchTemplateDescriptor, IRenderSearchTemplateRequest> selector) =>
this.RenderSearchTemplate(selector.InvokeOrDefault(new RenderSearchTemplateDescriptor()));

public IRenderSearchTemplateResponse RenderSearchTemplate(IRenderSearchTemplateRequest request) =>
this.Dispatcher.Dispatch<IRenderSearchTemplateRequest, RenderSearchTemplateRequestParameters, RenderSearchTemplateResponse>(
request,
(p, d) => this.LowLevelDispatch.RenderSearchTemplateDispatch<RenderSearchTemplateResponse>(p, d)
);

public Task<IRenderSearchTemplateResponse> RenderSearchTemplateAsync(Func<RenderSearchTemplateDescriptor, IRenderSearchTemplateRequest> selector) =>
this.RenderSearchTemplateAsync(selector.InvokeOrDefault(new RenderSearchTemplateDescriptor()));

public Task<IRenderSearchTemplateResponse> RenderSearchTemplateAsync(IRenderSearchTemplateRequest request) =>
this.Dispatcher.DispatchAsync<IRenderSearchTemplateRequest, RenderSearchTemplateRequestParameters, RenderSearchTemplateResponse, IRenderSearchTemplateResponse>(
request,
(p, d) => this.LowLevelDispatch.RenderSearchTemplateDispatchAsync<RenderSearchTemplateResponse>(p, d)
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace Nest
{
public partial interface IRenderSearchTemplateRequest
{
[JsonProperty("inline")]
string Inline { get; set; }

[JsonProperty("file")]
string File { get; set; }

[JsonProperty("params")]
[JsonConverter(typeof(VerbatimDictionaryKeysJsonConverter))]
Dictionary<string, object> Params { get; set; }

}

public partial class RenderSearchTemplateRequest
{
public string Inline { get; set; }
public string File { get; set; }
public Dictionary<string, object> Params { get; set; }
}


public partial class RenderSearchTemplateDescriptor
{
string IRenderSearchTemplateRequest.Inline { get; set; }
string IRenderSearchTemplateRequest.File { get; set; }
Dictionary<string, object> IRenderSearchTemplateRequest.Params { get; set; }

public RenderSearchTemplateDescriptor Inline(string inline) => Assign(a => a.Inline = inline);

public RenderSearchTemplateDescriptor File(string file) => Assign(a => a.File = file);

public RenderSearchTemplateDescriptor Params(Dictionary<string, object> scriptParams) => Assign(a => a.Params = scriptParams);

public RenderSearchTemplateDescriptor Params(Func<FluentDictionary<string, object>, FluentDictionary<string, object>> paramsSelector) =>
Assign(a => a.Params = paramsSelector?.Invoke(new FluentDictionary<string, object>()));

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using Newtonsoft.Json;

namespace Nest
{
public interface IRenderSearchTemplateResponse : IResponse
{
ILazyDocument TemplateOutput { get; set; }
}

[JsonObject]
public class RenderSearchTemplateResponse : ResponseBase, IRenderSearchTemplateResponse
{
[JsonProperty("template_output")]
public ILazyDocument TemplateOutput { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Elasticsearch.Net;
using FluentAssertions;
using Nest;
using Tests.Framework;
using Tests.Framework.Integration;
using Xunit;

namespace Tests.Search.SearchTemplate.RenderSearchTemplate
{
[Collection(IntegrationContext.ReadOnly)]
public class RenderSearchTemplateApiTests : ApiIntegrationTestBase<IRenderSearchTemplateResponse, IRenderSearchTemplateRequest, RenderSearchTemplateDescriptor, RenderSearchTemplateRequest>
{
public RenderSearchTemplateApiTests(ReadOnlyCluster cluster, EndpointUsage usage) : base(cluster, usage) { }

protected override LazyResponses ClientUsage() => Calls(
fluent: (c, f) => c.RenderSearchTemplate(f),
fluentAsync: (c, f) => c.RenderSearchTemplateAsync(f),
request: (c, r) => c.RenderSearchTemplate(r),
requestAsync: (c, r) => c.RenderSearchTemplateAsync(r)
);

protected override HttpMethod HttpMethod => HttpMethod.POST;
protected override string UrlPath => $"/_render/template";
protected override int ExpectStatusCode => 200;
protected override bool ExpectIsValid => true;

private static string inlineSearchTemplate = @"
{
""query"": {
""terms"": {
""status"": [
""{{#status}}"",
""{{.}}"",
""{{/status}}""
]
}
}
}";
private string[] statusValues = new[] { "pending", "published" };

protected override Func<RenderSearchTemplateDescriptor, IRenderSearchTemplateRequest> Fluent => s=>s
.Inline(inlineSearchTemplate)
.Params(p=>p
.Add("status", statusValues)
);


protected override RenderSearchTemplateRequest Initializer => new RenderSearchTemplateRequest
{
Inline = inlineSearchTemplate,
Params = new Dictionary<string, object>
{
{ "status", statusValues }
}
};

[I] public Task AssertResponse() => this.AssertOnAllResponses(r =>
{
r.TemplateOutput.Should().NotBeNull();
var searchRequest = r.TemplateOutput.As<ISearchRequest>();
searchRequest.Should().NotBeNull();

searchRequest.Query.Should().NotBeNull();
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using System.Threading.Tasks;
using Nest;
using Tests.Framework;
using static Tests.Framework.UrlTester;

namespace Tests.Search.SearchTemplate.RenderSearchTemplate
{
public class RenderSearchTemplateUrlTests
{
[U] public async Task Urls()
{
var id = "the-id";
await POST("/_render/template/the-id")
.Fluent(c => c.RenderSearchTemplate(s=>s.Id(id)))
.Request(c=>c.RenderSearchTemplate(new RenderSearchTemplateRequest(id)))
.FluentAsync(c => c.RenderSearchTemplateAsync(s=>s.Id(id)))
.RequestAsync(c=>c.RenderSearchTemplateAsync(new RenderSearchTemplateRequest(id)))
;

await POST("/_render/template")
.Fluent(c => c.RenderSearchTemplate(s=>s.Inline("")))
.Request(c=>c.RenderSearchTemplate(new RenderSearchTemplateRequest { Inline = "" }))
.FluentAsync(c => c.RenderSearchTemplateAsync(s=>s.Inline("")))
.RequestAsync(c=>c.RenderSearchTemplateAsync(new RenderSearchTemplateRequest { Inline = "" }))
;
}
}
}
2 changes: 2 additions & 0 deletions src/Tests/Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,8 @@
<Compile Include="Search\Request\ProfileUsageTests.cs" />
<Compile Include="Indices\StatusManagement\ForceMerge\ForceMergeApiTests.cs" />
<Compile Include="Indices\StatusManagement\ForceMerge\ForceMergeUrlTests.cs" />
<Compile Include="Search\SearchTemplate\RenderSearchTemplate\RenderSearchTemplateApiTests.cs" />
<Compile Include="Search\SearchTemplate\RenderSearchTemplate\RenderSearchTemplateUrlTests.cs" />
<None Include="index.asciidoc" />
<None Include="paket.references" />
<None Include="tests.yaml" />
Expand Down