diff --git a/src/Nest/Indices/IndexSettings/IndexTemplates/GetIndexTemplate/TemplateMapping.cs b/src/Nest/Indices/IndexSettings/IndexTemplates/GetIndexTemplate/TemplateMapping.cs index 7e4fec141be..5cf09c5d460 100644 --- a/src/Nest/Indices/IndexSettings/IndexTemplates/GetIndexTemplate/TemplateMapping.cs +++ b/src/Nest/Indices/IndexSettings/IndexTemplates/GetIndexTemplate/TemplateMapping.cs @@ -19,6 +19,9 @@ public interface ITemplateMapping [JsonProperty("aliases")] IAliases Aliases { get; set; } + + [JsonProperty("version")] + int? Version { get; set; } } public class TemplateMapping : ITemplateMapping @@ -32,5 +35,7 @@ public class TemplateMapping : ITemplateMapping public IMappings Mappings { get; set; } public IAliases Aliases { get; set; } + + public int? Version { get; set; } } } diff --git a/src/Nest/Indices/IndexSettings/IndexTemplates/PutIndexTemplate/PutIndexTemplateRequest.cs b/src/Nest/Indices/IndexSettings/IndexTemplates/PutIndexTemplate/PutIndexTemplateRequest.cs index 9499c412061..54332c15886 100644 --- a/src/Nest/Indices/IndexSettings/IndexTemplates/PutIndexTemplate/PutIndexTemplateRequest.cs +++ b/src/Nest/Indices/IndexSettings/IndexTemplates/PutIndexTemplate/PutIndexTemplateRequest.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Newtonsoft.Json; namespace Nest { @@ -14,6 +15,8 @@ public partial class PutIndexTemplateRequest public int? Order { get; set; } + public int? Version { get; set; } + public IIndexSettings Settings { get; set; } public IMappings Mappings { get; set; } @@ -26,17 +29,22 @@ public partial class PutIndexTemplateDescriptor { int? ITemplateMapping.Order { get; set; } + int? ITemplateMapping.Version { get; set; } + IIndexSettings ITemplateMapping.Settings { get; set; } IMappings ITemplateMapping.Mappings { get; set; } IAliases ITemplateMapping.Aliases { get; set; } - IReadOnlyCollection ITemplateMapping.IndexPatterns {get;set;} + IReadOnlyCollection ITemplateMapping.IndexPatterns { get; set; } public PutIndexTemplateDescriptor Order(int order) => Assign(a => a.Order = order); + public PutIndexTemplateDescriptor Version(int version) => Assign(a => a.Version = version); + public PutIndexTemplateDescriptor IndexPatterns(params string[] patterns)=> Assign(a => a.IndexPatterns = patterns); + public PutIndexTemplateDescriptor IndexPatterns(IEnumerable patterns)=> Assign(a => a.IndexPatterns = patterns?.ToArray()); public PutIndexTemplateDescriptor Settings(Func> settingsSelector) => diff --git a/src/Tests/Indices/IndexSettings/IndexTemplates/GetIndexTemplate/GetIndexTemplateApiTests.cs b/src/Tests/Indices/IndexSettings/IndexTemplates/GetIndexTemplate/GetIndexTemplateApiTests.cs index de24042cef0..2d8e6b769e2 100644 --- a/src/Tests/Indices/IndexSettings/IndexTemplates/GetIndexTemplate/GetIndexTemplateApiTests.cs +++ b/src/Tests/Indices/IndexSettings/IndexTemplates/GetIndexTemplate/GetIndexTemplateApiTests.cs @@ -1,5 +1,7 @@ using System; +using System.Linq; using Elasticsearch.Net; +using FluentAssertions; using Nest; using Tests.Framework; using Tests.Framework.Integration; @@ -9,7 +11,7 @@ namespace Tests.Indices.IndexSettings.IndexTemplates.GetIndexTemplate { public class GetIndexTemplateApiTests - : ApiTestBase + : ApiIntegrationTestBase { public GetIndexTemplateApiTests(WritableCluster cluster, EndpointUsage usage) : base(cluster, usage) { } protected override LazyResponses ClientUsage() => Calls( @@ -25,6 +27,46 @@ protected override LazyResponses ClientUsage() => Calls( protected override Func Fluent => d => d .Name(CallIsolatedValue); + protected override int ExpectStatusCode => 200; + + protected override bool ExpectIsValid => true; + protected override GetIndexTemplateRequest Initializer => new GetIndexTemplateRequest(CallIsolatedValue); + + protected override object ExpectJson => null; + + protected override void IntegrationSetup(IElasticClient client, CallUniqueValues values) + { + foreach (var callUniqueValue in values) + { + var putTemplateResponse = client.PutIndexTemplate(callUniqueValue.Value, d => + d.IndexPatterns("startingwiththis-*") + .Settings(s => s.NumberOfShards(2)) + .Version(1) + ); + + if (!putTemplateResponse.IsValid) + throw new Exception($"Problem putting index template for integration test: {putTemplateResponse.DebugInformation}"); + } + } + + protected override void ExpectResponse(IGetIndexTemplateResponse response) + { + response.ShouldBeValid(); + + response.TemplateMappings.Should().NotBeNull(); + response.TemplateMappings.Should().HaveCount(1); + + var responseTemplateMapping = response.TemplateMappings[CallIsolatedValue]; + + responseTemplateMapping.IndexPatterns.Should().NotBeNull(); + responseTemplateMapping.IndexPatterns.Should().HaveCount(1); + responseTemplateMapping.IndexPatterns.First().Should().Be("startingwiththis-*"); + + responseTemplateMapping.Version.Should().Be(1); + + responseTemplateMapping.Settings.Should().NotBeNull(); + responseTemplateMapping.Settings.NumberOfShards.Should().Be(2); + } } } diff --git a/src/Tests/Indices/IndexSettings/IndexTemplates/PutIndexTemplate/PutIndexTemplateApiTests.cs b/src/Tests/Indices/IndexSettings/IndexTemplates/PutIndexTemplate/PutIndexTemplateApiTests.cs index 588bb67bd03..657b973811f 100644 --- a/src/Tests/Indices/IndexSettings/IndexTemplates/PutIndexTemplate/PutIndexTemplateApiTests.cs +++ b/src/Tests/Indices/IndexSettings/IndexTemplates/PutIndexTemplate/PutIndexTemplateApiTests.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using Elasticsearch.Net; +using FluentAssertions; using Nest; using Tests.Framework; using Tests.Framework.Integration; @@ -10,7 +11,7 @@ namespace Tests.Indices.IndexSettings.IndexTemplates.PutIndexTemplate { public class PutIndexTemplateApiTests - : ApiTestBase + : ApiIntegrationTestBase { public PutIndexTemplateApiTests(WritableCluster cluster, EndpointUsage usage) : base(cluster, usage) { @@ -24,14 +25,15 @@ protected override LazyResponses ClientUsage() => Calls( ); protected override HttpMethod HttpMethod => HttpMethod.PUT; - protected override string UrlPath => $"/_template/{CallIsolatedValue}?create=false"; - protected override bool SupportsDeserialization => false; + protected override int ExpectStatusCode => 200; + protected override bool ExpectIsValid => true; protected override object ExpectJson { get; } = new { order = 1, + version = 2, index_patterns = new [] {"nestx-*" }, settings = new Dictionary { { "index.number_of_shards", 1 } }, mappings = new @@ -61,6 +63,7 @@ protected override LazyResponses ClientUsage() => Calls( protected override Func Fluent => d => d .Order(1) + .Version(2) .IndexPatterns("nestx-*") .Create(false) .Settings(p=>p.NumberOfShards(1)) @@ -80,9 +83,12 @@ protected override LazyResponses ClientUsage() => Calls( ) ); + + protected override PutIndexTemplateRequest Initializer => new PutIndexTemplateRequest(CallIsolatedValue) { Order = 1, + Version = 2, IndexPatterns = new[] { "nestx-*" }, Create = false, Settings = new Nest.IndexSettings @@ -110,5 +116,11 @@ protected override LazyResponses ClientUsage() => Calls( } } }; + + protected override void ExpectResponse(IPutIndexTemplateResponse response) + { + response.ShouldBeValid(); + response.Acknowledged.Should().BeTrue(); + } } }