/ToMigrate/Raven.Tests.Issues/1379/RavenDB_1379.cs

https://github.com/fitzchak/ravendb · C# · 357 lines · 306 code · 51 blank · 0 comment · 0 complexity · 0bbfe132d0ebd522892d38d59b3b9241 MD5 · raw file

  1. using System.Linq;
  2. using System.Threading;
  3. using Raven.Json.Linq;
  4. using Raven.Tests.Common;
  5. using Xunit;
  6. using Xunit.Extensions;
  7. namespace Raven.Tests.Issues
  8. {
  9. public class RavenDB_1379 : RavenTest
  10. {
  11. [Theory]
  12. [PropertyData("Storages")]
  13. public void PagingWithoutFilters(string requestedStorage)
  14. {
  15. using (var documentStore = NewDocumentStore(requestedStorage: requestedStorage))
  16. {
  17. documentStore.SystemDatabase.Documents.Put("FooBar1", null, new RavenJObject(), new RavenJObject(), null);
  18. documentStore.SystemDatabase.Documents.Put("BarFoo2", null, new RavenJObject(), new RavenJObject(), null);
  19. documentStore.SystemDatabase.Documents.Put("FooBar3", null, new RavenJObject(), new RavenJObject(), null);
  20. documentStore.SystemDatabase.Documents.Put("FooBar11", null, new RavenJObject(), new RavenJObject(), null);
  21. documentStore.SystemDatabase.Documents.Put("FooBar12", null, new RavenJObject(), new RavenJObject(), null);
  22. documentStore.SystemDatabase.Documents.Put("FooBar21", null, new RavenJObject(), new RavenJObject(), null);
  23. documentStore.SystemDatabase.Documents.Put("FooBar5", null, new RavenJObject(), new RavenJObject(), null);
  24. documentStore.SystemDatabase.Documents.Put("BarFoo7", null, new RavenJObject(), new RavenJObject(), null);
  25. documentStore.SystemDatabase.Documents.Put("FooBar111", null, new RavenJObject(), new RavenJObject(), null);
  26. documentStore.SystemDatabase.Documents.Put("BarFoo6", null, new RavenJObject(), new RavenJObject(), null);
  27. documentStore.SystemDatabase.Documents.Put("FooBar6", null, new RavenJObject(), new RavenJObject(), null);
  28. documentStore.SystemDatabase.Documents.Put("FooBar8", null, new RavenJObject(), new RavenJObject(), null);
  29. int nextPageStart = 0;
  30. var fetchedDocuments = documentStore
  31. .SystemDatabase
  32. .Documents
  33. .GetDocumentsWithIdStartingWith("FooBar", string.Empty, string.Empty, 0, 4, CancellationToken.None, ref nextPageStart)
  34. .ToList();
  35. var foundDocKeys = fetchedDocuments.Select(doc => doc.Value<RavenJObject>("@metadata"))
  36. .Select(doc => doc.Value<string>("@id"))
  37. .ToList();
  38. Assert.Equal(4, foundDocKeys.Count);
  39. Assert.Equal(4, nextPageStart);
  40. Assert.Contains("FooBar1", foundDocKeys);
  41. Assert.Contains("FooBar11", foundDocKeys);
  42. Assert.Contains("FooBar111", foundDocKeys);
  43. Assert.Contains("FooBar12", foundDocKeys);
  44. nextPageStart = 0;
  45. fetchedDocuments = documentStore
  46. .SystemDatabase
  47. .Documents
  48. .GetDocumentsWithIdStartingWith("FooBar", string.Empty, string.Empty, 4, 4, CancellationToken.None, ref nextPageStart)
  49. .ToList();
  50. foundDocKeys = fetchedDocuments.Select(doc => doc.Value<RavenJObject>("@metadata"))
  51. .Select(doc => doc.Value<string>("@id"))
  52. .ToList();
  53. Assert.Equal(4, foundDocKeys.Count);
  54. Assert.Equal(8, nextPageStart);
  55. Assert.Contains("FooBar21", foundDocKeys);
  56. Assert.Contains("FooBar3", foundDocKeys);
  57. Assert.Contains("FooBar5", foundDocKeys);
  58. Assert.Contains("FooBar6", foundDocKeys);
  59. nextPageStart = 0;
  60. fetchedDocuments = documentStore
  61. .SystemDatabase
  62. .Documents
  63. .GetDocumentsWithIdStartingWith("FooBar", string.Empty, string.Empty, 8, 4, CancellationToken.None, ref nextPageStart)
  64. .ToList();
  65. foundDocKeys = fetchedDocuments.Select(doc => doc.Value<RavenJObject>("@metadata"))
  66. .Select(doc => doc.Value<string>("@id"))
  67. .ToList();
  68. Assert.Equal(1, foundDocKeys.Count);
  69. Assert.Equal(8, nextPageStart);
  70. Assert.Contains("FooBar8", foundDocKeys);
  71. }
  72. }
  73. [Theory]
  74. [PropertyData("Storages")]
  75. public void PagingWithoutFiltersWithNextPageStart(string requestedStorage)
  76. {
  77. using (var documentStore = NewDocumentStore(requestedStorage: requestedStorage))
  78. {
  79. documentStore.SystemDatabase.Documents.Put("FooBar1", null, new RavenJObject(), new RavenJObject(), null);
  80. documentStore.SystemDatabase.Documents.Put("BarFoo2", null, new RavenJObject(), new RavenJObject(), null);
  81. documentStore.SystemDatabase.Documents.Put("FooBar3", null, new RavenJObject(), new RavenJObject(), null);
  82. documentStore.SystemDatabase.Documents.Put("FooBar11", null, new RavenJObject(), new RavenJObject(), null);
  83. documentStore.SystemDatabase.Documents.Put("FooBar12", null, new RavenJObject(), new RavenJObject(), null);
  84. documentStore.SystemDatabase.Documents.Put("FooBar21", null, new RavenJObject(), new RavenJObject(), null);
  85. documentStore.SystemDatabase.Documents.Put("FooBar5", null, new RavenJObject(), new RavenJObject(), null);
  86. documentStore.SystemDatabase.Documents.Put("BarFoo7", null, new RavenJObject(), new RavenJObject(), null);
  87. documentStore.SystemDatabase.Documents.Put("FooBar111", null, new RavenJObject(), new RavenJObject(), null);
  88. documentStore.SystemDatabase.Documents.Put("BarFoo6", null, new RavenJObject(), new RavenJObject(), null);
  89. documentStore.SystemDatabase.Documents.Put("FooBar6", null, new RavenJObject(), new RavenJObject(), null);
  90. documentStore.SystemDatabase.Documents.Put("FooBar8", null, new RavenJObject(), new RavenJObject(), null);
  91. int nextPageStart = 0;
  92. var fetchedDocuments = documentStore
  93. .SystemDatabase
  94. .Documents
  95. .GetDocumentsWithIdStartingWith("FooBar", string.Empty, string.Empty, nextPageStart, 4, CancellationToken.None, ref nextPageStart)
  96. .ToList();
  97. var foundDocKeys = fetchedDocuments.Select(doc => doc.Value<RavenJObject>("@metadata"))
  98. .Select(doc => doc.Value<string>("@id"))
  99. .ToList();
  100. Assert.Equal(4, foundDocKeys.Count);
  101. Assert.Equal(4, nextPageStart);
  102. Assert.Contains("FooBar1", foundDocKeys);
  103. Assert.Contains("FooBar11", foundDocKeys);
  104. Assert.Contains("FooBar111", foundDocKeys);
  105. Assert.Contains("FooBar12", foundDocKeys);
  106. fetchedDocuments = documentStore
  107. .SystemDatabase
  108. .Documents
  109. .GetDocumentsWithIdStartingWith("FooBar", string.Empty, string.Empty, nextPageStart, 4, CancellationToken.None, ref nextPageStart)
  110. .ToList();
  111. foundDocKeys = fetchedDocuments.Select(doc => doc.Value<RavenJObject>("@metadata"))
  112. .Select(doc => doc.Value<string>("@id"))
  113. .ToList();
  114. Assert.Equal(4, foundDocKeys.Count);
  115. Assert.Equal(8, nextPageStart);
  116. Assert.Contains("FooBar21", foundDocKeys);
  117. Assert.Contains("FooBar3", foundDocKeys);
  118. Assert.Contains("FooBar5", foundDocKeys);
  119. Assert.Contains("FooBar6", foundDocKeys);
  120. fetchedDocuments = documentStore
  121. .SystemDatabase
  122. .Documents
  123. .GetDocumentsWithIdStartingWith("FooBar", string.Empty, string.Empty, nextPageStart, 4, CancellationToken.None, ref nextPageStart)
  124. .ToList();
  125. foundDocKeys = fetchedDocuments.Select(doc => doc.Value<RavenJObject>("@metadata"))
  126. .Select(doc => doc.Value<string>("@id"))
  127. .ToList();
  128. Assert.Equal(1, foundDocKeys.Count);
  129. Assert.Equal(8, nextPageStart);
  130. Assert.Contains("FooBar8", foundDocKeys);
  131. }
  132. }
  133. [Theory]
  134. [PropertyData("Storages")]
  135. public void PagingWithExcludes(string requestedStorage)
  136. {
  137. using (var documentStore = NewDocumentStore(requestedStorage: requestedStorage))
  138. {
  139. documentStore.SystemDatabase.Documents.Put("FooBar1", null, new RavenJObject(), new RavenJObject(), null);
  140. documentStore.SystemDatabase.Documents.Put("BarFoo2", null, new RavenJObject(), new RavenJObject(), null);
  141. documentStore.SystemDatabase.Documents.Put("FooBar3", null, new RavenJObject(), new RavenJObject(), null);
  142. documentStore.SystemDatabase.Documents.Put("FooBar11", null, new RavenJObject(), new RavenJObject(), null);
  143. documentStore.SystemDatabase.Documents.Put("FooBar12", null, new RavenJObject(), new RavenJObject(), null);
  144. documentStore.SystemDatabase.Documents.Put("FooBar21", null, new RavenJObject(), new RavenJObject(), null);
  145. documentStore.SystemDatabase.Documents.Put("FooBar5", null, new RavenJObject(), new RavenJObject(), null);
  146. documentStore.SystemDatabase.Documents.Put("BarFoo7", null, new RavenJObject(), new RavenJObject(), null);
  147. documentStore.SystemDatabase.Documents.Put("FooBar111", null, new RavenJObject(), new RavenJObject(), null);
  148. documentStore.SystemDatabase.Documents.Put("BarFoo6", null, new RavenJObject(), new RavenJObject(), null);
  149. documentStore.SystemDatabase.Documents.Put("FooBar6", null, new RavenJObject(), new RavenJObject(), null);
  150. documentStore.SystemDatabase.Documents.Put("FooBar8", null, new RavenJObject(), new RavenJObject(), null);
  151. int nextPageStart = 0;
  152. var fetchedDocuments = documentStore
  153. .SystemDatabase
  154. .Documents
  155. .GetDocumentsWithIdStartingWith("FooBar", string.Empty, "1*", 0, 2, CancellationToken.None, ref nextPageStart)
  156. .ToList();
  157. var foundDocKeys = fetchedDocuments.Select(doc => doc.Value<RavenJObject>("@metadata"))
  158. .Select(doc => doc.Value<string>("@id"))
  159. .ToList();
  160. Assert.Equal(2, foundDocKeys.Count);
  161. Assert.Equal(6, nextPageStart);
  162. Assert.Contains("FooBar21", foundDocKeys);
  163. Assert.Contains("FooBar3", foundDocKeys);
  164. nextPageStart = 0;
  165. fetchedDocuments = documentStore
  166. .SystemDatabase
  167. .Documents
  168. .GetDocumentsWithIdStartingWith("FooBar", string.Empty, "1*", 2, 2, CancellationToken.None, ref nextPageStart)
  169. .ToList();
  170. foundDocKeys = fetchedDocuments.Select(doc => doc.Value<RavenJObject>("@metadata"))
  171. .Select(doc => doc.Value<string>("@id"))
  172. .ToList();
  173. Assert.Equal(2, foundDocKeys.Count);
  174. Assert.Equal(8, nextPageStart);
  175. Assert.Contains("FooBar5", foundDocKeys);
  176. Assert.Contains("FooBar6", foundDocKeys);
  177. nextPageStart = 0;
  178. fetchedDocuments = documentStore
  179. .SystemDatabase
  180. .Documents
  181. .GetDocumentsWithIdStartingWith("FooBar", string.Empty, "1*", 4, 2, CancellationToken.None, ref nextPageStart)
  182. .ToList();
  183. foundDocKeys = fetchedDocuments.Select(doc => doc.Value<RavenJObject>("@metadata"))
  184. .Select(doc => doc.Value<string>("@id"))
  185. .ToList();
  186. Assert.Equal(1, foundDocKeys.Count);
  187. Assert.Equal(4, nextPageStart);
  188. Assert.Contains("FooBar8", foundDocKeys);
  189. }
  190. }
  191. [Theory]
  192. [PropertyData("Storages")]
  193. public void PagingWithMatches(string requestedStorage)
  194. {
  195. using (var documentStore = NewDocumentStore(requestedStorage: requestedStorage))
  196. {
  197. documentStore.SystemDatabase.Documents.Put("FooBar1", null, new RavenJObject(), new RavenJObject(), null);
  198. documentStore.SystemDatabase.Documents.Put("BarFoo2", null, new RavenJObject(), new RavenJObject(), null);
  199. documentStore.SystemDatabase.Documents.Put("FooBar3", null, new RavenJObject(), new RavenJObject(), null);
  200. documentStore.SystemDatabase.Documents.Put("FooBar11", null, new RavenJObject(), new RavenJObject(), null);
  201. documentStore.SystemDatabase.Documents.Put("FooBar12", null, new RavenJObject(), new RavenJObject(), null);
  202. documentStore.SystemDatabase.Documents.Put("FooBar21", null, new RavenJObject(), new RavenJObject(), null);
  203. documentStore.SystemDatabase.Documents.Put("FooBar5", null, new RavenJObject(), new RavenJObject(), null);
  204. documentStore.SystemDatabase.Documents.Put("BarFoo7", null, new RavenJObject(), new RavenJObject(), null);
  205. documentStore.SystemDatabase.Documents.Put("FooBar111", null, new RavenJObject(), new RavenJObject(), null);
  206. documentStore.SystemDatabase.Documents.Put("BarFoo6", null, new RavenJObject(), new RavenJObject(), null);
  207. documentStore.SystemDatabase.Documents.Put("FooBar6", null, new RavenJObject(), new RavenJObject(), null);
  208. documentStore.SystemDatabase.Documents.Put("FooBar8", null, new RavenJObject(), new RavenJObject(), null);
  209. int nextPageStart = 0;
  210. var fetchedDocuments = documentStore
  211. .SystemDatabase
  212. .Documents
  213. .GetDocumentsWithIdStartingWith("FooBar", "1*", string.Empty, 0, 2, CancellationToken.None, ref nextPageStart)
  214. .ToList();
  215. var foundDocKeys = fetchedDocuments.Select(doc => doc.Value<RavenJObject>("@metadata"))
  216. .Select(doc => doc.Value<string>("@id"))
  217. .ToList();
  218. Assert.Equal(2, foundDocKeys.Count);
  219. Assert.Contains("FooBar1", foundDocKeys);
  220. Assert.Contains("FooBar11", foundDocKeys);
  221. nextPageStart = 0;
  222. fetchedDocuments = documentStore
  223. .SystemDatabase
  224. .Documents
  225. .GetDocumentsWithIdStartingWith("FooBar", "1*", string.Empty, 2, 1, CancellationToken.None, ref nextPageStart)
  226. .ToList();
  227. foundDocKeys = fetchedDocuments.Select(doc => doc.Value<RavenJObject>("@metadata"))
  228. .Select(doc => doc.Value<string>("@id"))
  229. .ToList();
  230. Assert.Equal(1, foundDocKeys.Count);
  231. Assert.Contains("FooBar111", foundDocKeys);
  232. nextPageStart = 0;
  233. fetchedDocuments = documentStore
  234. .SystemDatabase
  235. .Documents
  236. .GetDocumentsWithIdStartingWith("FooBar", "1*", string.Empty, 3, 10, CancellationToken.None, ref nextPageStart)
  237. .ToList();
  238. foundDocKeys = fetchedDocuments.Select(doc => doc.Value<RavenJObject>("@metadata"))
  239. .Select(doc => doc.Value<string>("@id"))
  240. .ToList();
  241. Assert.Equal(1, foundDocKeys.Count);
  242. Assert.Contains("FooBar12", foundDocKeys);
  243. }
  244. }
  245. [Theory]
  246. [PropertyData("Storages")]
  247. public void GetDocumentsWithIdStartingWith_Should_Not_Count_Excluded_Docs(string requestedStorage)
  248. {
  249. using(var documentStore = NewDocumentStore(requestedStorage: requestedStorage))
  250. {
  251. documentStore.SystemDatabase.Documents.Put("FooBar1", null, new RavenJObject(), new RavenJObject(), null);
  252. documentStore.SystemDatabase.Documents.Put("BarFoo2", null, new RavenJObject(), new RavenJObject(), null);
  253. documentStore.SystemDatabase.Documents.Put("FooBar3", null, new RavenJObject(), new RavenJObject(), null);
  254. documentStore.SystemDatabase.Documents.Put("FooBar11", null, new RavenJObject(), new RavenJObject(), null);
  255. documentStore.SystemDatabase.Documents.Put("FooBar12", null, new RavenJObject(), new RavenJObject(), null);
  256. documentStore.SystemDatabase.Documents.Put("FooBar21", null, new RavenJObject(), new RavenJObject(), null);
  257. documentStore.SystemDatabase.Documents.Put("FooBar5", null, new RavenJObject(), new RavenJObject(), null);
  258. documentStore.SystemDatabase.Documents.Put("BarFoo7", null, new RavenJObject(), new RavenJObject(), null);
  259. documentStore.SystemDatabase.Documents.Put("FooBar111", null, new RavenJObject(), new RavenJObject(), null);
  260. documentStore.SystemDatabase.Documents.Put("BarFoo6", null, new RavenJObject(), new RavenJObject(), null);
  261. documentStore.SystemDatabase.Documents.Put("FooBar6", null, new RavenJObject(), new RavenJObject(), null);
  262. documentStore.SystemDatabase.Documents.Put("FooBar8", null, new RavenJObject(), new RavenJObject(), null);
  263. int nextPageStart = 0;
  264. var fetchedDocuments = documentStore.SystemDatabase.Documents.GetDocumentsWithIdStartingWith("FooBar", string.Empty, "1*", 0, 4, CancellationToken.None, ref nextPageStart);
  265. var documentsList = fetchedDocuments.ToList();
  266. var foundDocKeys = documentsList.Select(doc => doc.Value<RavenJObject>("@metadata"))
  267. .Select(doc => doc.Value<string>("@id"))
  268. .ToList();
  269. Assert.Equal(4,foundDocKeys.Count);
  270. Assert.Contains("FooBar3", foundDocKeys);
  271. Assert.Contains("FooBar21", foundDocKeys);
  272. Assert.Contains("FooBar5", foundDocKeys);
  273. Assert.Contains("FooBar6", foundDocKeys);
  274. }
  275. }
  276. [Theory]
  277. [PropertyData("Storages")]
  278. public void GetDocumentsWithIdStartingWith_Should_Not_Count_Excluded_Docs_WithNonZeroStart(string requestedStorage)
  279. {
  280. using (var documentStore = NewDocumentStore(requestedStorage: requestedStorage))
  281. {
  282. documentStore.SystemDatabase.Documents.Put("FooBarAA", null, new RavenJObject(), new RavenJObject(), null);
  283. documentStore.SystemDatabase.Documents.Put("FooBarBB", null, new RavenJObject(), new RavenJObject(), null);
  284. documentStore.SystemDatabase.Documents.Put("FooBarCC", null, new RavenJObject(), new RavenJObject(), null);
  285. documentStore.SystemDatabase.Documents.Put("FooBarDD", null, new RavenJObject(), new RavenJObject(), null);
  286. documentStore.SystemDatabase.Documents.Put("FooBarDA", null, new RavenJObject(), new RavenJObject(), null);
  287. documentStore.SystemDatabase.Documents.Put("FooBarEE", null, new RavenJObject(), new RavenJObject(), null);
  288. documentStore.SystemDatabase.Documents.Put("FooBarFF", null, new RavenJObject(), new RavenJObject(), null);
  289. documentStore.SystemDatabase.Documents.Put("FooBarGG", null, new RavenJObject(), new RavenJObject(), null);
  290. documentStore.SystemDatabase.Documents.Put("FooBarHH", null, new RavenJObject(), new RavenJObject(), null);
  291. documentStore.SystemDatabase.Documents.Put("FooBarKK", null, new RavenJObject(), new RavenJObject(), null);
  292. int nextPageStart = 0;
  293. var fetchedDocuments = documentStore.SystemDatabase.Documents.GetDocumentsWithIdStartingWith("FooBar", string.Empty, "*A", 2, 4, CancellationToken.None, ref nextPageStart);
  294. var documentsList = fetchedDocuments.ToList();
  295. var foundDocKeys = documentsList.Select(doc => doc.Value<RavenJObject>("@metadata"))
  296. .Select(doc => doc.Value<string>("@id"))
  297. .ToList();
  298. Assert.Equal(4, foundDocKeys.Count);
  299. Assert.Contains("FooBarDD", foundDocKeys);
  300. Assert.Contains("FooBarEE", foundDocKeys);
  301. Assert.Contains("FooBarFF", foundDocKeys);
  302. Assert.Contains("FooBarGG", foundDocKeys);
  303. }
  304. }
  305. }
  306. }