PageRenderTime 48ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/Raven.Tests.Issues/RavenDB-3460.cs

http://github.com/ravendb/ravendb
C# | 140 lines | 113 code | 27 blank | 0 comment | 4 complexity | e082e35882d58b4c2306f6e2abf5bc45 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-2.1, MPL-2.0-no-copyleft-exception, Apache-2.0, BSD-3-Clause
  1. using System.Linq;
  2. using System.Net;
  3. using System.Text;
  4. using Raven.Client;
  5. using Raven.Client.Indexes;
  6. using Raven.Json.Linq;
  7. using Raven.Tests.Common.Attributes;
  8. using Raven.Tests.Helpers;
  9. using System.Collections.Generic;
  10. using Xunit;
  11. using FluentAssertions;
  12. namespace Raven.Tests.Issues
  13. {
  14. public class RavenDB_3460 : RavenTestBase
  15. {
  16. [Fact]
  17. public void SingleEncodingInHttpQueryShouldWork()
  18. {
  19. using (var store = NewRemoteDocumentStore())
  20. {
  21. var customers = SetupAndGetCustomers(store);
  22. customers.Should().NotBeEmpty();
  23. var url = string.Format("{0}/databases/{1}/indexes/CustomersIndex?query=Number%3A1", store.Url, store.DefaultDatabase);
  24. GetResults(url).Values().Should().NotBeEmpty();
  25. }
  26. }
  27. [TimeBombedFact(2016,9,1,"Edge-case for special character combination in a query. (This is not a regression, this case was not handled before)")]
  28. public void Can_query_for_special_percentage_character()
  29. {
  30. using (var store = NewRemoteDocumentStore())
  31. {
  32. using (var session = store.OpenSession())
  33. {
  34. session.Store(new RavenDB_1333.User
  35. {
  36. FirstName = "%2F"
  37. });
  38. session.SaveChanges();
  39. }
  40. WaitForIndexing(store);
  41. using (var session = store.OpenSession())
  42. {
  43. var queryResult = session.Query<RavenDB_1333.User>()
  44. .Where(x => x.FirstName == "%2F")
  45. .ToList();
  46. queryResult.Should().HaveCount(1);
  47. }
  48. }
  49. }
  50. [Fact]
  51. public void DoubleEncodingInHttpQueryShouldWork()
  52. {
  53. using (var store = NewRemoteDocumentStore())
  54. {
  55. var customers = SetupAndGetCustomers(store);
  56. customers.Should().NotBeEmpty();
  57. var url = string.Format("{0}/databases/{1}/indexes/CustomersIndex?query=Number%253A1", store.Url, store.DefaultDatabase);
  58. GetResults(url).Values().Should().NotBeEmpty();
  59. }
  60. }
  61. private IEnumerable<Customer> SetupAndGetCustomers(IDocumentStore store)
  62. {
  63. new CustomersIndex().Execute(store);
  64. using (var session = store.OpenSession())
  65. {
  66. session.Store(new Customer() { Number = 1 });
  67. session.SaveChanges();
  68. }
  69. using (var session = store.OpenSession())
  70. {
  71. var customers = session.Query<Customer, CustomersIndex>()
  72. .Customize(c => c.WaitForNonStaleResultsAsOfNow())
  73. .Where(x => x.Number == 1).ToList();
  74. return customers;
  75. }
  76. }
  77. private RavenJToken GetResults(string url)
  78. {
  79. var request = WebRequest.Create(url);
  80. using (var response = request.GetResponse())
  81. {
  82. using (var stream = response.GetResponseStream())
  83. {
  84. if (stream != null)
  85. {
  86. var bytes = new byte[10000];
  87. stream.Read(bytes, 0, 10000);
  88. var data = Encoding.UTF8.GetString(bytes);
  89. var o = RavenJObject.Parse(data);
  90. var results = o["Results"];
  91. return results;
  92. }
  93. }
  94. }
  95. return null;
  96. }
  97. }
  98. public class Customer
  99. {
  100. public int Number { get; set; }
  101. }
  102. public class CustomersIndex : AbstractIndexCreationTask<Customer>
  103. {
  104. public CustomersIndex()
  105. {
  106. Map = docs => from doc in docs
  107. select new
  108. {
  109. doc.Number
  110. };
  111. }
  112. }
  113. }