diff --git a/src/Nest/Modules/Scripting/IStoredScript.cs b/src/Nest/Modules/Scripting/IStoredScript.cs index d5c0fdbce54..7425dac9d04 100644 --- a/src/Nest/Modules/Scripting/IStoredScript.cs +++ b/src/Nest/Modules/Scripting/IStoredScript.cs @@ -1,33 +1,50 @@ -using System.Collections.Generic; -using Elasticsearch.Net; +using Elasticsearch.Net; using Newtonsoft.Json; namespace Nest { + /// + /// A Stored script + /// [JsonObject(MemberSerialization = MemberSerialization.OptIn)] [JsonConverter(typeof(ReadAsTypeJsonConverter))] public interface IStoredScript { + /// + /// The script language + /// [JsonProperty("lang")] string Lang { get; set; } + /// + /// The script source + /// [JsonProperty("source")] string Source { get; set; } } + + /// public class StoredScript : IStoredScript { [JsonProperty("lang")] string IStoredScript.Lang { get; set; } + [JsonProperty("source")] string IStoredScript.Source { get; set; } //used for deserialization - internal StoredScript() { } + internal StoredScript() {} + /// + /// Instantiates a new instance of + /// + /// Script language + /// Script source protected StoredScript(string lang, string source) { - ((IStoredScript) this).Lang = lang; - ((IStoredScript) this).Source = source; + IStoredScript self = this; + self.Lang = lang; + self.Source = source; } } @@ -36,39 +53,28 @@ public class PainlessScript : StoredScript private static readonly string Lang = ScriptLang.Painless.GetStringValue(); public PainlessScript(string source) : base(Lang, source) { } } - public class GroovyScript : StoredScript - { - private static readonly string Lang = ScriptLang.Groovy.GetStringValue(); - public GroovyScript(string source) : base(Lang, source) { } - } - public class JavaScriptScript : StoredScript - { - private static readonly string Lang = ScriptLang.JS.GetStringValue(); - public JavaScriptScript(string source) : base(Lang, source) { } - } - public class PythonScript : StoredScript - { - private static readonly string Lang = ScriptLang.Python.GetStringValue(); - public PythonScript(string source) : base(Lang, source) { } - } + public class LuceneExpressionScript : StoredScript { private static readonly string Lang = ScriptLang.Expression.GetStringValue(); public LuceneExpressionScript(string source) : base(Lang, source) { } } + public class MustacheScript : StoredScript { private static readonly string Lang = ScriptLang.Mustache.GetStringValue(); - public MustacheScript(string source) : base(Lang, source) { } + public MustacheScript(string source) : base(Lang, source) { } } public class StoredScriptDescriptor : DescriptorBase, IStoredScript { - string IStoredScript.Lang { get; set; } string IStoredScript.Source { get; set; } + string IStoredScript.Lang { get; set; } + + public StoredScriptDescriptor Source(string source) => Assign(a => a.Source = source); public StoredScriptDescriptor Lang(string lang) => Assign(a => a.Lang = lang); - public StoredScriptDescriptor Source(string source) => Assign(a => a.Source = source); + public StoredScriptDescriptor Lang(ScriptLang lang) => Assign(a => a.Lang = lang.GetStringValue()); } } diff --git a/src/Nest/Modules/Scripting/PutScript/PutScriptRequest.cs b/src/Nest/Modules/Scripting/PutScript/PutScriptRequest.cs index cb764fa906e..9b90e037628 100644 --- a/src/Nest/Modules/Scripting/PutScript/PutScriptRequest.cs +++ b/src/Nest/Modules/Scripting/PutScript/PutScriptRequest.cs @@ -22,11 +22,19 @@ public partial class PutScriptDescriptor public PutScriptDescriptor Script(Func selector) => Assign(a => a.Script = selector?.Invoke(new StoredScriptDescriptor())); + /// + /// A Painless language script + /// public PutScriptDescriptor Painless(string source) => Assign(a => a.Script = new PainlessScript(source)); - public PutScriptDescriptor Groovy(string source) => Assign(a => a.Script = new GroovyScript(source)); - public PutScriptDescriptor JavaScript(string source) => Assign(a => a.Script = new JavaScriptScript(source)); - public PutScriptDescriptor Python(string source) => Assign(a => a.Script = new PythonScript(source)); + + /// + /// A Lucene expression language script + /// public PutScriptDescriptor LuceneExpression(string source) => Assign(a => a.Script = new LuceneExpressionScript(source)); + + /// + /// A Mustache template language script + /// public PutScriptDescriptor Mustache(string source) => Assign(a => a.Script = new MustacheScript(source)); } } diff --git a/src/Nest/Modules/Scripting/ScriptLang.cs b/src/Nest/Modules/Scripting/ScriptLang.cs index 96c1a2ee085..a4f7e141994 100644 --- a/src/Nest/Modules/Scripting/ScriptLang.cs +++ b/src/Nest/Modules/Scripting/ScriptLang.cs @@ -10,15 +10,6 @@ public enum ScriptLang [EnumMember(Value = "painless")] Painless, - [EnumMember(Value = "groovy")] - Groovy, - - [EnumMember(Value = "js")] - JS, - - [EnumMember(Value = "python")] - Python, - [EnumMember(Value = "expression")] Expression, diff --git a/src/Tests/Modules/Scripting/PutScript/PutScriptApiTests.cs b/src/Tests/Modules/Scripting/PutScript/PutScriptApiTests.cs index 5201cd7ac8e..f53342a0284 100644 --- a/src/Tests/Modules/Scripting/PutScript/PutScriptApiTests.cs +++ b/src/Tests/Modules/Scripting/PutScript/PutScriptApiTests.cs @@ -1,5 +1,6 @@ using System; using Elasticsearch.Net; +using FluentAssertions; using Nest; using Tests.Framework; using Tests.Framework.Integration; @@ -9,13 +10,12 @@ namespace Tests.Modules.Scripting.PutScript { public class PutScriptApiTests - : ApiTestBase + : ApiIntegrationTestBase { public PutScriptApiTests(ReadOnlyCluster cluster, EndpointUsage usage) : base(cluster, usage) { } private static readonly string _name = "scrpt1"; - protected override LazyResponses ClientUsage() => Calls( fluent: (client, f) => client.PutScript(_name, f), fluentAsync: (client, f) => client.PutScriptAsync(_name, f), @@ -25,12 +25,18 @@ protected override LazyResponses ClientUsage() => Calls( protected override HttpMethod HttpMethod => HttpMethod.PUT; protected override string UrlPath => $"/_scripts/{_name}"; + protected override int ExpectStatusCode => 200; + protected override bool ExpectIsValid => true; protected override bool SupportsDeserialization => false; - protected override object ExpectJson { get; } = new + protected override object ExpectJson => new { - script = new { lang = "painless", source = "1+1" } + script = new + { + lang = "painless", + source = "1+1" + } }; protected override PutScriptDescriptor NewDescriptor() => new PutScriptDescriptor(_name); @@ -42,5 +48,11 @@ protected override LazyResponses ClientUsage() => Calls( { Script = new PainlessScript("1+1") }; + + protected override void ExpectResponse(IPutScriptResponse response) + { + response.ShouldBeValid(); + response.Acknowledged.Should().BeTrue(); + } } }