Skip to content

Commit 1fb3bd6

Browse files
Mpdreamzgmarz
authored andcommitted
Fix #860 GetMany() nullifies _index and _type
1 parent 665be12 commit 1fb3bd6

File tree

5 files changed

+67
-7
lines changed

5 files changed

+67
-7
lines changed

Diff for: src/Elasticsearch.Net/Connection/InMemoryConnection.cs

+17-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Diagnostics;
34
using System.IO;
45
using System.Net;
56
using System.Text;
@@ -13,23 +14,27 @@ public class InMemoryConnection : HttpConnection
1314
private byte[] _fixedResultBytes = Encoding.UTF8.GetBytes("{ \"USING NEST IN MEMORY CONNECTION\" : null }");
1415
private int _statusCode;
1516

16-
public InMemoryConnection()
17-
: base(new ConnectionConfiguration())
17+
public List<Tuple<string, Uri, byte[]>> Requests = new List<Tuple<string, Uri, byte[]>>();
18+
19+
public bool RecordRequests { get; set;}
20+
21+
public InMemoryConnection() : base(new ConnectionConfiguration())
1822
{
1923

2024
}
21-
public InMemoryConnection(IConnectionConfigurationValues settings)
22-
: base(settings)
25+
public InMemoryConnection(IConnectionConfigurationValues settings) : base(settings)
2326
{
2427
_statusCode = 200;
2528
}
2629

27-
public InMemoryConnection(IConnectionConfigurationValues settings, string fixedResult, int statusCode = 200)
28-
: this(settings)
30+
public InMemoryConnection(IConnectionConfigurationValues settings, string fixedResult, int statusCode = 200) : this(settings)
2931
{
3032
_fixedResultBytes = Encoding.UTF8.GetBytes(fixedResult);
3133
_statusCode = statusCode;
3234
}
35+
36+
37+
3338

3439
protected override ElasticsearchResponse<Stream> DoSynchronousRequest(HttpWebRequest request, byte[] data = null, IRequestConfiguration requestSpecificConfig = null)
3540
{
@@ -45,6 +50,12 @@ private ElasticsearchResponse<Stream> ReturnConnectionStatus(HttpWebRequest requ
4550
cs.Response = new MemoryStream(_fixedResultBytes);
4651
if (this.ConnectionSettings.ConnectionStatusHandler != null)
4752
this.ConnectionSettings.ConnectionStatusHandler(cs);
53+
54+
if (this.RecordRequests)
55+
{
56+
this.Requests.Add(Tuple.Create(method, request.RequestUri, data));
57+
}
58+
4859
return cs;
4960
}
5061

Diff for: src/Nest/DSL/MultiGet/MultiGetOperationDescriptor.cs

+3
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public MultiGetOperationDescriptor()
5353
/// </summary>
5454
public MultiGetOperationDescriptor<T> Index(string index)
5555
{
56+
if (index.IsNullOrEmpty()) return this;
5657
Self.Index = index;
5758
return this;
5859
}
@@ -62,6 +63,7 @@ public MultiGetOperationDescriptor<T> Index(string index)
6263
/// </summary>
6364
public MultiGetOperationDescriptor<T> Type(string type)
6465
{
66+
if (type.IsNullOrEmpty()) return this;
6567
Self.Type = type;
6668
return this;
6769
}
@@ -71,6 +73,7 @@ public MultiGetOperationDescriptor<T> Type(string type)
7173
/// </summary>
7274
public MultiGetOperationDescriptor<T> Type(Type type)
7375
{
76+
if (type == null) return this;
7477
Self.Type = type;
7578
return this;
7679
}

Diff for: src/Tests/Nest.Tests.Unit/BaseJsonTests.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ public class BaseJsonTests
2929
public BaseJsonTests()
3030
{
3131
this._settings = new ConnectionSettings(UnitTestDefaults.Uri, UnitTestDefaults.DefaultIndex)
32+
.DisablePing()
3233
.ExposeRawResponse();
33-
this._connection = new InMemoryConnection(this._settings);
34+
var connection = new InMemoryConnection(this._settings);
35+
this._connection = connection;
3436
this._client = new ElasticClient(this._settings, this._connection);
3537
}
3638

Diff for: src/Tests/Nest.Tests.Unit/Nest.Tests.Unit.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,7 @@
363363
<Compile Include="QueryParsers\Visitor\VisitorTests.cs" />
364364
<Compile Include="Reproduce\Reproduce646Tests.cs" />
365365
<Compile Include="Reproduce\Reproduce579Tests.cs" />
366+
<Compile Include="Reproduce\Reproduce860Tests.cs" />
366367
<Compile Include="Reproduce\Reproduce806Tests.cs" />
367368
<Compile Include="Search\Fields\FieldsTests.cs" />
368369
<Compile Include="Search\Filter\Modes\ConditionlessFilterJson.cs" />
+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System.IO;
2+
using Elasticsearch.Net;
3+
using Elasticsearch.Net.Connection;
4+
using Elasticsearch.Net.Connection.Configuration;
5+
using FluentAssertions;
6+
using Nest.Tests.MockData.Domain;
7+
using NUnit.Framework;
8+
using System;
9+
using System.Collections.Generic;
10+
using System.Linq;
11+
using System.Text;
12+
using System.Threading.Tasks;
13+
14+
namespace Nest.Tests.Unit.Reproduce
15+
{
16+
17+
[TestFixture]
18+
public class Reproduce860Tests : BaseJsonTests
19+
{
20+
[Test]
21+
public void ConvenienceExtensionShouldGenerateExactBodyAsMethodOnClient()
22+
{
23+
var connection = new InMemoryConnection(this._settings) { RecordRequests = true };
24+
var client = new ElasticClient(this._settings, connection);
25+
26+
var response = client.GetMany<ElasticsearchProject>(new[] { "123" });
27+
var response2 = client.MultiGet(s => s.GetMany<ElasticsearchProject>(new[] { "123" }));
28+
29+
connection.Requests.Should().NotBeEmpty().And.HaveCount(2);
30+
31+
var getManyRequest = connection.Requests[0];
32+
var multiGetRequest = connection.Requests[1];
33+
34+
getManyRequest.Item3.Should().NotBeNull()
35+
.And.BeEquivalentTo(multiGetRequest.Item3);
36+
37+
getManyRequest.Item3.Utf8String().Should().Contain("_index\":");
38+
getManyRequest.Item3.Utf8String().Should().Contain("_type\":");
39+
40+
41+
}
42+
}
43+
}

0 commit comments

Comments
 (0)