public void AtomicUpdate() { var xml = EmbeddedResource.GetEmbeddedString(GetType(), "Resources.response.xml"); var connection = new MSolrConnection(); connection.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => { string text = new StreamReader(content, Encoding.UTF8).ReadToEnd(); Assert.Equal("/update", url); Assert.Equal("commitWithin", ((KeyValuePair <string, string>[])param)[0].Key); Assert.Equal("4343", ((KeyValuePair <string, string>[])param)[0].Value); Assert.Equal("[{\"id\":\"0\",\"animal\":{\"set\":\"squirrel\"},\"food\":{\"add\":[\"nuts\",\"seeds\"]},\"count\":{\"inc\":3},\"colour\":{\"remove\":\"pink\"},\"habitat\":{\"removeregex\":[\"tree.*\",\"river.+\"]}}]", text); return(xml); }); var headerParser = new MSolrHeaderResponseParser(); headerParser.parse += _ => null; var basic = new SolrBasicServer <TestDocumentWithUniqueKey>(connection, null, null, null, headerParser, null, null, null); var ops = new SolrServer <TestDocumentWithUniqueKey>(basic, new AttributesMappingManager(), null); var parameters = new AtomicUpdateParameters { CommitWithin = 4343 }; var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("animal", AtomicUpdateType.Set, "squirrel"), new AtomicUpdateSpec("food", AtomicUpdateType.Add, new string[] { "nuts", "seeds" }), new AtomicUpdateSpec("count", AtomicUpdateType.Inc, 3), new AtomicUpdateSpec("colour", AtomicUpdateType.Remove, "pink"), new AtomicUpdateSpec("habitat", AtomicUpdateType.RemoveRegex, new string[] { "tree.*", "river.+" }) }; ops.AtomicUpdate(new TestDocumentWithUniqueKey(), updateSpecs, parameters); Assert.Equal(1, connection.postStream.Calls); }
public void AtomicUpdate() { var solr = ServiceLocator.Current.GetInstance <ISolrOperations <Product> >(); solr.Delete(SolrQuery.All); solr.Commit(); AddSampleDocs(); var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("features", AtomicUpdateType.Add, new string[] { "Feature 3", "Feature 4" }), new AtomicUpdateSpec("price", AtomicUpdateType.Inc, "1"), new AtomicUpdateSpec("manu", AtomicUpdateType.Set, "MyCo"), new AtomicUpdateSpec("cat", AtomicUpdateType.RemoveRegex, "hard.*") }; AtomicUpdateParameters parameters = new AtomicUpdateParameters(); parameters.CommitWithin = 1; solr.AtomicUpdate("SP2514N", updateSpecs, parameters); solr.Commit(); Product productAfterUpdate = solr.Query("id:SP2514N")[0]; Assert.True(productAfterUpdate.Features.Contains("Feature 3")); Assert.True(productAfterUpdate.Features.Contains("Feature 4")); Assert.Equal("MyCo", productAfterUpdate.Manufacturer); Assert.Equal(93, productAfterUpdate.Price); Assert.False(productAfterUpdate.Features.Contains("hard drive")); }
public void AtomicUpdateAdd() { var conn = new Mocks.MSolrConnection(); conn.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => { string text = new StreamReader(content, Encoding.UTF8).ReadToEnd(); Assert.Equal("/update", url); Assert.Equal("[{\"id\":\"0\",\"food\":{\"add\":\"nuts\"}}]", text); testOutputHelper.WriteLine(text); return(null); }); var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("food", AtomicUpdateType.Add, "nuts") }; var cmd = new AtomicUpdateCommand("id", "0", updateSpecs, null); cmd.Execute(conn); Assert.Equal(1, conn.postStream.Calls); }
public void AtomicUpdateSetEmptyArray() { var conn = new Mocks.MSolrConnection(); conn.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => { string text = new StreamReader(content, Encoding.UTF8).ReadToEnd(); Assert.Equal("/update", url); Assert.Equal("[{\"id\":\"0\",\"animal\":{\"set\":[]}}]", text); Console.WriteLine(text); return(null); }); var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("animal", AtomicUpdateType.Set, new string[] {}) }; var cmd = new AtomicUpdateCommand("id", "0", updateSpecs, null); cmd.Execute(conn); Assert.Equal(1, conn.postStream.Calls); }
public void AtomicUpdateCommandNameInvariantCulture() { var conn = new Mocks.MSolrConnection(); conn.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => { string text = new StreamReader(content, Encoding.UTF8).ReadToEnd(); Assert.Equal("/update", url); Assert.Equal("[{\"id\":\"0\",\"count\":{\"inc\":1}}]", text); Console.WriteLine(text); return(null); }); var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("count", AtomicUpdateType.Inc, 1) }; var cmd = new AtomicUpdateCommand("id", "0", updateSpecs, null); cmd.Execute(conn); Assert.Equal(1, conn.postStream.Calls); }
public void AtomicUpdateRemoveRegexArray() { var conn = new Mocks.MSolrConnection(); conn.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => { string text = new StreamReader(content, Encoding.UTF8).ReadToEnd(); Assert.Equal("/update", url); Assert.Equal("[{\"id\":\"0\",\"food\":{\"removeregex\":[\"nu.*\",\"seeds\",\"berr.+\"]}}]", text); Console.WriteLine(text); return(null); }); var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("food", AtomicUpdateType.RemoveRegex, new string[] { "nu.*", "seeds", "berr.+" }) }; var cmd = new AtomicUpdateCommand("id", "0", updateSpecs, null); cmd.Execute(conn); Assert.Equal(1, conn.postStream.Calls); }
public void AtomicUpdateWithParameter() { var conn = new Mocks.MSolrConnection(); conn.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => { string text = new StreamReader(content, Encoding.UTF8).ReadToEnd(); Assert.Equal("/update", url); Assert.Equal("commitwithin", ((KeyValuePair <string, string>[])param)[0].Key); Assert.Equal("4343", ((KeyValuePair <string, string>[])param)[0].Value); Assert.Equal("[{\"id\":\"0\",\"count\":{\"inc\":3}}]", text); testOutputHelper.WriteLine(text); return(null); }); var parameters = new AtomicUpdateParameters { CommitWithin = 4343 }; var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("count", AtomicUpdateType.Inc, 3) }; var cmd = new AtomicUpdateCommand("id", "0", updateSpecs, parameters); cmd.Execute(conn); Assert.Equal(1, conn.postStream.Calls); }
public void AtomicUpdateSerialization() { var conn = new Mocks.MSolrConnection(); conn.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => { string text = new StreamReader(content, Encoding.UTF8).ReadToEnd(); Assert.Equal("/update", url); Assert.Equal("[{" + "\"id\":\"0\"," + "\"quote\":{\"set\":\"\\\"quoted\\\"\"}," + "\"backslashInText\":{\"set\":\"y\\\\n\"}," + "\"newLineInText\":{\"set\":\"line1\\nline2\"}" + "}]", text); testOutputHelper.WriteLine(text); return(null); }); /* This document is equivalent to: * { * id = 0; * quote = "quoted"; * backslashInText = y\n; * newLineInText = line1 * line2; * } */ var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("quote", AtomicUpdateType.Set, "\"quoted\""), new AtomicUpdateSpec("backslashInText", AtomicUpdateType.Set, "y\\n"), new AtomicUpdateSpec("newLineInText", AtomicUpdateType.Set, "line1\nline2") }; var cmd = new AtomicUpdateCommand("id", "0", updateSpecs, null); cmd.Execute(conn); Assert.Equal(1, conn.postStream.Calls); }
public void AtomicUpdateNullIdHandledGracefully() { var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("count", AtomicUpdateType.Inc, "3") }; Assert.Throws <ArgumentNullException>(() => new AtomicUpdateCommand("id", null, updateSpecs, null)); }