/test/SlowTests/Issues/RavenDB-4041.cs

https://github.com/fitzchak/ravendb · C# · 593 lines · 489 code · 104 blank · 0 comment · 4 complexity · 9e2235aede51260ef15b391f1f42fad2 MD5 · raw file

  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using FastTests;
  5. using Raven.Client;
  6. using Raven.Client.Documents;
  7. using Raven.Client.Documents.Indexes;
  8. using Raven.Client.Extensions;
  9. using Xunit;
  10. namespace SlowTests.Issues
  11. {
  12. public class RavenDB_4041 : RavenTestBase
  13. {
  14. [Fact]
  15. public void streaming_returns_metadata()
  16. {
  17. using (var store = GetDocumentStore())
  18. {
  19. var index = new Customers_ByName();
  20. index.Execute(store);
  21. using (var session = store.OpenSession())
  22. {
  23. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  24. session.SaveChanges();
  25. }
  26. WaitForIndexing(store);
  27. using (var session = store.OpenSession())
  28. {
  29. var enumerator = session.Advanced.Stream<Customer>(startsWith:"customers/");
  30. while (enumerator.MoveNext())
  31. {
  32. Assert.NotNull(enumerator.Current.Document.Id);
  33. Assert.Equal("John", enumerator.Current.Document.Name);
  34. Assert.Equal("Tel Aviv", enumerator.Current.Document.Address);
  35. Assert.NotNull(enumerator.Current.Id);
  36. Assert.NotNull(enumerator.Current.ChangeVector);
  37. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.RavenClrType]);
  38. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.Collection]);
  39. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.LastModified]);
  40. }
  41. }
  42. }
  43. }
  44. [Fact]
  45. public async Task streaming_returns_metadata_async()
  46. {
  47. using (var store = GetDocumentStore())
  48. {
  49. var index = new Customers_ByName();
  50. index.Execute(store);
  51. using (var session = store.OpenSession())
  52. {
  53. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  54. session.SaveChanges();
  55. }
  56. WaitForIndexing(store);
  57. using (var session = store.OpenAsyncSession())
  58. {
  59. var enumerator = await session.Advanced.StreamAsync<Customer>(startsWith:"customers/");
  60. while (await enumerator.MoveNextAsync())
  61. {
  62. Assert.NotNull(enumerator.Current.Document.Id);
  63. Assert.Equal("John", enumerator.Current.Document.Name);
  64. Assert.Equal("Tel Aviv", enumerator.Current.Document.Address);
  65. Assert.NotNull(enumerator.Current.Id);
  66. Assert.NotNull(enumerator.Current.ChangeVector);
  67. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.RavenClrType]);
  68. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.Collection]);
  69. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.LastModified]);
  70. }
  71. }
  72. }
  73. }
  74. [Fact]
  75. public void streaming_query_returns_metadata()
  76. {
  77. using (var store = GetDocumentStore())
  78. {
  79. var index = new Customers_ByName();
  80. index.Execute(store);
  81. using (var session = store.OpenSession())
  82. {
  83. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  84. session.SaveChanges();
  85. }
  86. WaitForIndexing(store);
  87. using (var session = store.OpenSession())
  88. {
  89. var query = session.Query<Customer>(index.IndexName);
  90. var enumerator = session.Advanced.Stream(query);
  91. while (enumerator.MoveNext())
  92. {
  93. Assert.NotNull(enumerator.Current.Document.Id);
  94. Assert.Equal("John", enumerator.Current.Document.Name);
  95. Assert.Equal("Tel Aviv", enumerator.Current.Document.Address);
  96. Assert.NotNull(enumerator.Current.Id);
  97. Assert.NotNull(enumerator.Current.ChangeVector);
  98. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.RavenClrType]);
  99. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.Collection]);
  100. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.IndexScore]);
  101. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.LastModified]); ;
  102. }
  103. }
  104. }
  105. }
  106. [Fact]
  107. public async Task streaming_query_returns_metadata_async()
  108. {
  109. using (var store = GetDocumentStore())
  110. {
  111. var index = new Customers_ByName();
  112. index.Execute(store);
  113. using (var session = store.OpenSession())
  114. {
  115. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  116. session.SaveChanges();
  117. }
  118. WaitForIndexing(store);
  119. using (var session = store.OpenAsyncSession())
  120. {
  121. var query = session.Query<Customer>(index.IndexName);
  122. var enumerator = await session.Advanced.StreamAsync(query);
  123. while (await enumerator.MoveNextAsync())
  124. {
  125. Assert.NotNull(enumerator.Current.Document.Id);
  126. Assert.Equal("John", enumerator.Current.Document.Name);
  127. Assert.Equal("Tel Aviv", enumerator.Current.Document.Address);
  128. Assert.NotNull(enumerator.Current.Id);
  129. Assert.NotNull(enumerator.Current.ChangeVector);
  130. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.RavenClrType]);
  131. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.Collection]);
  132. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.IndexScore]);
  133. Assert.NotNull(enumerator.Current.Metadata[Constants.Documents.Metadata.LastModified]);
  134. }
  135. }
  136. }
  137. }
  138. [Fact]
  139. public void returns_metadata()
  140. {
  141. using (var store = GetDocumentStore())
  142. {
  143. var index = new Customers_ByName();
  144. index.Execute(store);
  145. using (var session = store.OpenSession())
  146. {
  147. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  148. session.SaveChanges();
  149. }
  150. WaitForIndexing(store);
  151. using (var session = store.OpenSession())
  152. {
  153. var customer = session.Query<Customer>().FirstOrDefault();
  154. Assert.NotNull(customer);
  155. Assert.NotNull(customer.Id);
  156. Assert.Equal(customer.Name, "John");
  157. Assert.Equal(customer.Address, "Tel Aviv");
  158. var metadata = session.Advanced.GetMetadataFor(customer);
  159. Assert.NotNull(metadata[Constants.Documents.Metadata.ChangeVector]);
  160. Assert.NotNull(metadata[Constants.Documents.Metadata.RavenClrType]);
  161. Assert.NotNull(metadata[Constants.Documents.Metadata.Collection]);
  162. Assert.NotNull(metadata[Constants.Documents.Metadata.LastModified]);
  163. }
  164. }
  165. }
  166. [Fact]
  167. public void returns_metadata_async()
  168. {
  169. using (var store = GetDocumentStore())
  170. {
  171. var index = new Customers_ByName();
  172. index.Execute(store);
  173. using (var session = store.OpenSession())
  174. {
  175. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  176. session.SaveChanges();
  177. }
  178. WaitForIndexing(store);
  179. using (var session = store.OpenAsyncSession())
  180. {
  181. var customerAsync = session.Query<Customer>().FirstOrDefaultAsync();
  182. Assert.NotNull(customerAsync);
  183. var customer = customerAsync.Result;
  184. Assert.NotNull(customer.Id);
  185. Assert.Equal(customer.Name, "John");
  186. Assert.Equal(customer.Address, "Tel Aviv");
  187. var metadata = session.Advanced.GetMetadataFor(customer);
  188. Assert.NotNull(metadata[Constants.Documents.Metadata.ChangeVector]);
  189. Assert.NotNull(metadata[Constants.Documents.Metadata.RavenClrType]);
  190. Assert.NotNull(metadata[Constants.Documents.Metadata.Collection]);
  191. Assert.NotNull(metadata[Constants.Documents.Metadata.LastModified]);
  192. }
  193. }
  194. }
  195. [Fact]
  196. public void load_returns_metadata()
  197. {
  198. using (var store = GetDocumentStore())
  199. {
  200. var index = new Customers_ByName();
  201. index.Execute(store);
  202. using (var session = store.OpenSession())
  203. {
  204. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  205. session.SaveChanges();
  206. }
  207. WaitForIndexing(store);
  208. using (var session = store.OpenSession())
  209. {
  210. var customer = session.Load<Customer>("customers/1-A");
  211. Assert.NotNull(customer);
  212. Assert.NotNull(customer.Id);
  213. Assert.Equal(customer.Name, "John");
  214. Assert.Equal(customer.Address, "Tel Aviv");
  215. var metadata = session.Advanced.GetMetadataFor(customer);
  216. Assert.NotNull(metadata[Constants.Documents.Metadata.ChangeVector]);
  217. Assert.NotNull(metadata[Constants.Documents.Metadata.RavenClrType]);
  218. Assert.NotNull(metadata[Constants.Documents.Metadata.Collection]);
  219. Assert.NotNull(metadata[Constants.Documents.Metadata.LastModified]);
  220. }
  221. }
  222. }
  223. [Fact]
  224. public async Task load_returns_metadata_async()
  225. {
  226. using (var store = GetDocumentStore())
  227. {
  228. var index = new Customers_ByName();
  229. index.Execute(store);
  230. using (var session = store.OpenSession())
  231. {
  232. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  233. session.SaveChanges();
  234. }
  235. WaitForIndexing(store);
  236. using (var session = store.OpenAsyncSession())
  237. {
  238. var customer = await session.LoadAsync<Customer>("customers/1-A");
  239. Assert.NotNull(customer);
  240. Assert.NotNull(customer.Id);
  241. Assert.Equal(customer.Name, "John");
  242. Assert.Equal(customer.Address, "Tel Aviv");
  243. var metadata = session.Advanced.GetMetadataFor(customer);
  244. Assert.NotNull(metadata[Constants.Documents.Metadata.ChangeVector]);
  245. Assert.NotNull(metadata[Constants.Documents.Metadata.RavenClrType]);
  246. Assert.NotNull(metadata[Constants.Documents.Metadata.Collection]);
  247. Assert.NotNull(metadata[Constants.Documents.Metadata.LastModified]);
  248. }
  249. }
  250. }
  251. [Fact]
  252. public void load_with_big_key_returns_metadata()
  253. {
  254. using (var store = GetDocumentStore())
  255. {
  256. var index = new Customers_ByName();
  257. index.Execute(store);
  258. var id = new string('a', 130);
  259. using (var session = store.OpenSession())
  260. {
  261. session.Store(new Customer { Name = "John", Address = "Tel Aviv" }, id);
  262. session.SaveChanges();
  263. }
  264. WaitForIndexing(store);
  265. using (var commands = store.Commands())
  266. {
  267. var customer = commands.Get(id);
  268. Assert.NotNull(customer);
  269. var metadata = customer.BlittableJson.GetMetadata();
  270. var key = metadata.GetId();
  271. Assert.NotNull(key);
  272. dynamic customerDynamic = customer;
  273. Assert.Equal(customerDynamic.Name.ToString(), "John");
  274. Assert.Equal(customerDynamic.Address.ToString(), "Tel Aviv");
  275. Assert.NotNull(metadata.GetChangeVector());
  276. Assert.NotNull(metadata.GetLastModified());
  277. object _;
  278. Assert.NotNull(metadata.TryGetMember(Constants.Documents.Metadata.RavenClrType, out _));
  279. Assert.NotNull(metadata.TryGetMember(Constants.Documents.Metadata.Collection, out _));
  280. Assert.NotNull(metadata.TryGetMember(Constants.Documents.Metadata.LastModified, out _));
  281. }
  282. }
  283. }
  284. [Fact]
  285. public async Task load_with_big_key_returns_metadata_async()
  286. {
  287. using (var store = GetDocumentStore())
  288. {
  289. var index = new Customers_ByName();
  290. index.Execute(store);
  291. var id = new string('a', 130);
  292. using (var session = store.OpenSession())
  293. {
  294. session.Store(new Customer { Name = "John", Address = "Tel Aviv" }, id);
  295. session.SaveChanges();
  296. }
  297. WaitForIndexing(store);
  298. using (var commands = store.Commands())
  299. {
  300. var customer = await commands.GetAsync(id);
  301. Assert.NotNull(customer);
  302. var metadata = customer.BlittableJson.GetMetadata();
  303. var key = metadata.GetId();
  304. Assert.NotNull(key);
  305. dynamic customerDynamic = customer;
  306. Assert.Equal(customerDynamic.Name.ToString(), "John");
  307. Assert.Equal(customerDynamic.Address.ToString(), "Tel Aviv");
  308. Assert.NotNull(metadata.GetChangeVector());
  309. Assert.NotNull(metadata.GetLastModified());
  310. object _;
  311. Assert.NotNull(metadata.TryGetMember(Constants.Documents.Metadata.RavenClrType, out _));
  312. Assert.NotNull(metadata.TryGetMember(Constants.Documents.Metadata.Collection, out _));
  313. Assert.NotNull(metadata.TryGetMember(Constants.Documents.Metadata.LastModified, out _));
  314. }
  315. }
  316. }
  317. [Fact]
  318. public void multi_load_returns_metadata()
  319. {
  320. using (var store = GetDocumentStore())
  321. {
  322. var index = new Customers_ByName();
  323. index.Execute(store);
  324. using (var session = store.OpenSession())
  325. {
  326. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  327. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  328. session.SaveChanges();
  329. }
  330. WaitForIndexing(store);
  331. using (var session = store.OpenSession())
  332. {
  333. var customers = session.Load<Customer>(new List<string> { "customers/1-A", "customers/2-A" });
  334. foreach (var customer in customers.Values)
  335. {
  336. Assert.NotNull(customer);
  337. Assert.NotNull(customer.Id);
  338. Assert.Equal(customer.Name, "John");
  339. Assert.Equal(customer.Address, "Tel Aviv");
  340. var metadata = session.Advanced.GetMetadataFor(customer);
  341. Assert.NotNull(metadata[Constants.Documents.Metadata.ChangeVector]);
  342. Assert.NotNull(metadata[Constants.Documents.Metadata.RavenClrType]);
  343. Assert.NotNull(metadata[Constants.Documents.Metadata.Collection]);
  344. Assert.NotNull(metadata[Constants.Documents.Metadata.LastModified]);
  345. }
  346. }
  347. }
  348. }
  349. [Fact]
  350. public void load_lazily_returns_metadata()
  351. {
  352. using (var store = GetDocumentStore())
  353. {
  354. var index = new Customers_ByName();
  355. index.Execute(store);
  356. using (var session = store.OpenSession())
  357. {
  358. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  359. session.SaveChanges();
  360. }
  361. WaitForIndexing(store);
  362. using (var session = store.OpenSession())
  363. {
  364. var customerLazy = session.Advanced.Lazily.Load<Customer>("customers/1-A");
  365. var customer = customerLazy.Value;
  366. Assert.NotNull(customer);
  367. Assert.NotNull(customer.Id);
  368. Assert.Equal(customer.Name, "John");
  369. Assert.Equal(customer.Address, "Tel Aviv");
  370. var metadata = session.Advanced.GetMetadataFor(customer);
  371. Assert.NotNull(metadata[Constants.Documents.Metadata.ChangeVector]);
  372. Assert.NotNull(metadata[Constants.Documents.Metadata.RavenClrType]);
  373. Assert.NotNull(metadata[Constants.Documents.Metadata.Collection]);
  374. Assert.NotNull(metadata[Constants.Documents.Metadata.LastModified]);
  375. }
  376. }
  377. }
  378. [Fact]
  379. public void load_lazily_returns_metadata_async()
  380. {
  381. using (var store = GetDocumentStore())
  382. {
  383. var index = new Customers_ByName();
  384. index.Execute(store);
  385. using (var session = store.OpenSession())
  386. {
  387. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  388. session.SaveChanges();
  389. }
  390. WaitForIndexing(store);
  391. using (var session = store.OpenAsyncSession())
  392. {
  393. var customerLazy = session.Advanced.Lazily.LoadAsync<Customer>("customers/1-A");
  394. var customer = customerLazy.Value.Result;
  395. Assert.NotNull(customer);
  396. Assert.NotNull(customer.Id);
  397. Assert.Equal(customer.Name, "John");
  398. Assert.Equal(customer.Address, "Tel Aviv");
  399. var metadata = session.Advanced.GetMetadataFor(customer);
  400. Assert.NotNull(metadata[Constants.Documents.Metadata.ChangeVector]);
  401. Assert.NotNull(metadata[Constants.Documents.Metadata.RavenClrType]);
  402. Assert.NotNull(metadata[Constants.Documents.Metadata.Collection]);
  403. Assert.NotNull(metadata[Constants.Documents.Metadata.LastModified]);
  404. }
  405. }
  406. }
  407. [Fact]
  408. public void get_returns_metadata()
  409. {
  410. using (var store = GetDocumentStore())
  411. {
  412. var index = new Customers_ByName();
  413. index.Execute(store);
  414. using (var session = store.OpenSession())
  415. {
  416. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  417. session.SaveChanges();
  418. }
  419. WaitForIndexing(store);
  420. using (var commands = store.Commands())
  421. {
  422. var customer = commands.Get("customers/1-A");
  423. Assert.NotNull(customer);
  424. var metadata = customer.BlittableJson.GetMetadata();
  425. var id = metadata.GetId();
  426. Assert.NotNull(id);
  427. dynamic customerDynamic = customer;
  428. Assert.Equal(customerDynamic.Name.ToString(), "John");
  429. Assert.Equal(customerDynamic.Address.ToString(), "Tel Aviv");
  430. Assert.NotNull(metadata.GetChangeVector());
  431. Assert.NotNull(metadata.GetLastModified());
  432. object _;
  433. Assert.NotNull(metadata.TryGetMember(Constants.Documents.Metadata.RavenClrType, out _));
  434. Assert.NotNull(metadata.TryGetMember(Constants.Documents.Metadata.Collection, out _));
  435. Assert.NotNull(metadata.TryGetMember(Constants.Documents.Metadata.LastModified, out _));
  436. }
  437. }
  438. }
  439. [Fact]
  440. public async Task get_returns_metadata_async()
  441. {
  442. using (var store = GetDocumentStore())
  443. {
  444. var index = new Customers_ByName();
  445. index.Execute(store);
  446. using (var session = store.OpenSession())
  447. {
  448. session.Store(new Customer { Name = "John", Address = "Tel Aviv" });
  449. session.SaveChanges();
  450. }
  451. WaitForIndexing(store);
  452. using (var commands = store.Commands())
  453. {
  454. var customer = await commands.GetAsync("customers/1-A");
  455. Assert.NotNull(customer);
  456. var metadata = customer.BlittableJson.GetMetadata();
  457. var id = metadata.GetId();
  458. Assert.NotNull(id);
  459. dynamic customerDynamic = customer;
  460. Assert.Equal(customerDynamic.Name.ToString(), "John");
  461. Assert.Equal(customerDynamic.Address.ToString(), "Tel Aviv");
  462. Assert.NotNull(metadata.GetChangeVector());
  463. Assert.NotNull(metadata.GetLastModified());
  464. object _;
  465. Assert.NotNull(metadata.TryGetMember(Constants.Documents.Metadata.RavenClrType, out _));
  466. Assert.NotNull(metadata.TryGetMember(Constants.Documents.Metadata.Collection, out _));
  467. Assert.NotNull(metadata.TryGetMember(Constants.Documents.Metadata.LastModified, out _));
  468. }
  469. }
  470. }
  471. private class Customer
  472. {
  473. public string Id { get; set; }
  474. public string Name { get; set; }
  475. public string Address { get; set; }
  476. }
  477. private class Customers_ByName : AbstractIndexCreationTask<Customer>
  478. {
  479. public Customers_ByName()
  480. {
  481. Map = customers => from customer in customers
  482. select new
  483. {
  484. customer.Name
  485. };
  486. }
  487. }
  488. }
  489. }