/ToMigrate/Raven.Tests.Issues/RavenDB_1333.cs

https://github.com/fitzchak/ravendb · C# · 463 lines · 379 code · 79 blank · 5 comment · 0 complexity · bcfab68d2d65de054c2fbf77e5ad3829 MD5 · raw file

  1. // -----------------------------------------------------------------------
  2. // <copyright file="RavenDB_1333.cs" company="Hibernating Rhinos LTD">
  3. // Copyright (c) Hibernating Rhinos LTD. All rights reserved.
  4. // </copyright>
  5. // -----------------------------------------------------------------------
  6. using Raven.Tests.Common;
  7. namespace Raven.Tests.Issues
  8. {
  9. using System;
  10. using System.Collections.Concurrent;
  11. using Raven.Abstractions.Data;
  12. using Raven.Client.Document;
  13. using Xunit;
  14. public class RavenDB_1333 : RavenTest
  15. {
  16. internal class Person
  17. {
  18. public int Id { get; set; }
  19. public string FirstName { get; set; }
  20. }
  21. internal class User
  22. {
  23. public int Id { get; set; }
  24. public string FirstName { get; set; }
  25. }
  26. [Fact]
  27. public void ForDocumentsInCollectionEmbedded1()
  28. {
  29. using (var store = NewDocumentStore())
  30. {
  31. var list = new BlockingCollection<DocumentChangeNotification>();
  32. store.Changes().Task.Result
  33. .ForDocumentsInCollection("users").Task.Result
  34. .Subscribe(list.Add);
  35. using (var session = store.OpenSession())
  36. {
  37. session.Store(new Person());
  38. session.Store(new User());
  39. session.SaveChanges();
  40. }
  41. DocumentChangeNotification documentChangeNotification;
  42. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(2)));
  43. Assert.Equal("users/1", documentChangeNotification.Id);
  44. Assert.Equal("Users", documentChangeNotification.CollectionName);
  45. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Put);
  46. }
  47. }
  48. [Fact]
  49. public void ForDocumentsInCollectionEmbedded2()
  50. {
  51. using (var store = NewDocumentStore())
  52. {
  53. var list = new BlockingCollection<DocumentChangeNotification>();
  54. store.Changes().Task.Result
  55. .ForDocumentsInCollection<Person>().Task.Result
  56. .Subscribe(list.Add);
  57. using (var session = store.OpenSession())
  58. {
  59. session.Store(new Person());
  60. session.Store(new User());
  61. session.SaveChanges();
  62. }
  63. DocumentChangeNotification documentChangeNotification;
  64. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(2)));
  65. Assert.Equal("people/1", documentChangeNotification.Id);
  66. Assert.Equal("People", documentChangeNotification.CollectionName);
  67. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Put);
  68. }
  69. }
  70. [Fact]
  71. public void ForDocumentsInCollectionEmbedded3()
  72. {
  73. using (var store = NewDocumentStore())
  74. {
  75. var person = new Person();
  76. using (var session = store.OpenSession())
  77. {
  78. session.Store(person);
  79. session.Store(new User());
  80. session.SaveChanges();
  81. }
  82. var list = new BlockingCollection<DocumentChangeNotification>();
  83. store.Changes().Task.Result
  84. .ForDocumentsInCollection<Person>().Task.Result
  85. .Subscribe(list.Add);
  86. using (var session = store.OpenSession())
  87. {
  88. session.Delete(session.Load<Person>(person.Id));
  89. session.SaveChanges();
  90. }
  91. DocumentChangeNotification documentChangeNotification;
  92. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(2)));
  93. Assert.Equal("people/1", documentChangeNotification.Id);
  94. Assert.Equal("People", documentChangeNotification.CollectionName);
  95. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Delete);
  96. }
  97. }
  98. [Fact]
  99. public void ForDocumentsInCollectionRemote1()
  100. {
  101. using (var store = NewRemoteDocumentStore())
  102. {
  103. var list = new BlockingCollection<DocumentChangeNotification>();
  104. var taskObservable = store.Changes();
  105. taskObservable.Task.Wait();
  106. var observableWithTask = taskObservable.ForDocumentsInCollection("users");
  107. observableWithTask.Task.Wait();
  108. observableWithTask.Subscribe(list.Add);
  109. using (var session = store.OpenSession())
  110. {
  111. session.Store(new Person());
  112. session.Store(new User());
  113. session.SaveChanges();
  114. }
  115. DocumentChangeNotification documentChangeNotification;
  116. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(3)));
  117. Assert.Equal("users/1", documentChangeNotification.Id);
  118. Assert.Equal("Users", documentChangeNotification.CollectionName);
  119. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Put);
  120. }
  121. }
  122. [Fact]
  123. public void ForDocumentsInCollectionRemote2()
  124. {
  125. using (var store = NewRemoteDocumentStore())
  126. {
  127. var list = new BlockingCollection<DocumentChangeNotification>();
  128. var taskObservable = store.Changes();
  129. taskObservable.Task.Wait();
  130. var observableWithTask = taskObservable.ForDocumentsInCollection<Person>();
  131. observableWithTask.Task.Wait();
  132. observableWithTask.Subscribe(list.Add);
  133. using (var session = store.OpenSession())
  134. {
  135. session.Store(new Person());
  136. session.Store(new User());
  137. session.SaveChanges();
  138. }
  139. DocumentChangeNotification documentChangeNotification;
  140. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(3)));
  141. Assert.Equal("people/1", documentChangeNotification.Id);
  142. Assert.Equal("People", documentChangeNotification.CollectionName);
  143. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Put);
  144. }
  145. }
  146. [Fact]
  147. public void ForDocumentsInCollectionRemote3()
  148. {
  149. var user = new User();
  150. using (var store = NewRemoteDocumentStore())
  151. {
  152. using (var session = store.OpenSession())
  153. {
  154. session.Store(new Person());
  155. session.Store(user);
  156. session.SaveChanges();
  157. }
  158. var list = new BlockingCollection<DocumentChangeNotification>();
  159. var taskObservable = store.Changes();
  160. taskObservable.Task.Wait();
  161. var observableWithTask = taskObservable.ForDocumentsInCollection("users");
  162. observableWithTask.Task.Wait();
  163. observableWithTask.Subscribe(list.Add);
  164. using (var session = store.OpenSession())
  165. {
  166. var userToDelete = session.Load<User>(user.Id);
  167. session.Delete(userToDelete);
  168. session.SaveChanges();
  169. }
  170. DocumentChangeNotification documentChangeNotification;
  171. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(3)));
  172. Assert.Equal("users/1", documentChangeNotification.Id);
  173. Assert.Equal("Users", documentChangeNotification.CollectionName);
  174. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Delete);
  175. }
  176. }
  177. [Fact]
  178. public void ForDocumentsOfTypeEmbedded1()
  179. {
  180. using (var store = NewDocumentStore())
  181. {
  182. var list = new BlockingCollection<DocumentChangeNotification>();
  183. store.Changes().Task.Result
  184. .ForDocumentsOfType(ReflectionUtil.GetFullNameWithoutVersionInformation(typeof(User))).Task.Result
  185. .Subscribe(list.Add);
  186. using (var session = store.OpenSession())
  187. {
  188. session.Store(new Person());
  189. session.Store(new User());
  190. session.SaveChanges();
  191. }
  192. DocumentChangeNotification documentChangeNotification;
  193. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(2)));
  194. Assert.Equal("users/1", documentChangeNotification.Id);
  195. Assert.Equal("Users", documentChangeNotification.CollectionName);
  196. Assert.Equal(ReflectionUtil.GetFullNameWithoutVersionInformation(typeof(User)), documentChangeNotification.TypeName);
  197. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Put);
  198. }
  199. }
  200. [Fact]
  201. public void ForDocumentsOfTypeEmbedded2()
  202. {
  203. using (var store = NewDocumentStore())
  204. {
  205. var list = new BlockingCollection<DocumentChangeNotification>();
  206. store.Changes().Task.Result
  207. .ForDocumentsOfType(typeof(User)).Task.Result
  208. .Subscribe(list.Add);
  209. using (var session = store.OpenSession())
  210. {
  211. session.Store(new Person());
  212. session.Store(new User());
  213. session.SaveChanges();
  214. }
  215. DocumentChangeNotification documentChangeNotification;
  216. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(2)));
  217. Assert.Equal("users/1", documentChangeNotification.Id);
  218. Assert.Equal("Users", documentChangeNotification.CollectionName);
  219. Assert.Equal(ReflectionUtil.GetFullNameWithoutVersionInformation(typeof(User)), documentChangeNotification.TypeName);
  220. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Put);
  221. }
  222. }
  223. [Fact]
  224. public void ForDocumentsOfTypeEmbedded3()
  225. {
  226. using (var store = NewDocumentStore())
  227. {
  228. var list = new BlockingCollection<DocumentChangeNotification>();
  229. store.Changes().Task.Result
  230. .ForDocumentsOfType<Person>().Task.Result
  231. .Subscribe(list.Add);
  232. using (var session = store.OpenSession())
  233. {
  234. session.Store(new Person());
  235. session.Store(new User());
  236. session.SaveChanges();
  237. }
  238. DocumentChangeNotification documentChangeNotification;
  239. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(2)));
  240. Assert.Equal("people/1", documentChangeNotification.Id);
  241. Assert.Equal("People", documentChangeNotification.CollectionName);
  242. Assert.Equal(ReflectionUtil.GetFullNameWithoutVersionInformation(typeof(Person)), documentChangeNotification.TypeName);
  243. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Put);
  244. }
  245. }
  246. [Fact]
  247. public void ForDocumentsOfTypeEmbedded4()
  248. {
  249. using (var store = NewDocumentStore())
  250. {
  251. var person = new Person();
  252. using (var session = store.OpenSession())
  253. {
  254. session.Store(person);
  255. session.Store(new User());
  256. session.SaveChanges();
  257. }
  258. var list = new BlockingCollection<DocumentChangeNotification>();
  259. store.Changes().Task.Result
  260. .ForDocumentsOfType<Person>().Task.Result
  261. .Subscribe(list.Add);
  262. using (var session = store.OpenSession())
  263. {
  264. var personToDelete = session.Load<Person>(person.Id);
  265. session.Delete(personToDelete);
  266. session.SaveChanges();
  267. }
  268. DocumentChangeNotification documentChangeNotification;
  269. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(2)));
  270. Assert.Equal("people/1", documentChangeNotification.Id);
  271. Assert.Equal("People", documentChangeNotification.CollectionName);
  272. Assert.Equal(ReflectionUtil.GetFullNameWithoutVersionInformation(typeof(Person)), documentChangeNotification.TypeName);
  273. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Delete);
  274. }
  275. }
  276. [Fact]
  277. public void ForDocumentsOfTypeRemote1()
  278. {
  279. using (var store = NewRemoteDocumentStore(requestedStorage:"esent",fiddler:true))
  280. {
  281. var list = new BlockingCollection<DocumentChangeNotification>();
  282. var taskObservable = store.Changes();
  283. taskObservable.Task.Wait();
  284. var observableWithTask = taskObservable.ForDocumentsOfType(ReflectionUtil.GetFullNameWithoutVersionInformation(typeof(User)));
  285. observableWithTask.Task.Wait();
  286. observableWithTask.Subscribe(list.Add);
  287. using (var session = store.OpenSession())
  288. {
  289. session.Store(new Person());
  290. session.Store(new User());
  291. session.SaveChanges();
  292. }
  293. DocumentChangeNotification documentChangeNotification;
  294. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(2)));
  295. Assert.Equal("users/1", documentChangeNotification.Id);
  296. Assert.Equal("Users", documentChangeNotification.CollectionName);
  297. Assert.Equal(ReflectionUtil.GetFullNameWithoutVersionInformation(typeof(User)), documentChangeNotification.TypeName);
  298. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Put);
  299. }
  300. }
  301. [Fact]
  302. public void ForDocumentsOfTypeRemote2()
  303. {
  304. using (var store = NewRemoteDocumentStore())
  305. {
  306. var list = new BlockingCollection<DocumentChangeNotification>();
  307. var taskObservable = store.Changes();
  308. taskObservable.Task.Wait();
  309. var observableWithTask = taskObservable.ForDocumentsOfType(typeof(User));
  310. observableWithTask.Task.Wait();
  311. observableWithTask.Subscribe(list.Add);
  312. using (var session = store.OpenSession())
  313. {
  314. session.Store(new Person());
  315. session.Store(new User());
  316. session.SaveChanges();
  317. }
  318. DocumentChangeNotification documentChangeNotification;
  319. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(2)));
  320. Assert.Equal("users/1", documentChangeNotification.Id);
  321. Assert.Equal("Users", documentChangeNotification.CollectionName);
  322. Assert.Equal(ReflectionUtil.GetFullNameWithoutVersionInformation(typeof(User)), documentChangeNotification.TypeName);
  323. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Put);
  324. }
  325. }
  326. [Fact]
  327. public void ForDocumentsOfTypeRemote3()
  328. {
  329. using (var store = NewRemoteDocumentStore())
  330. {
  331. var list = new BlockingCollection<DocumentChangeNotification>();
  332. var taskObservable = store.Changes();
  333. taskObservable.Task.Wait();
  334. var observableWithTask = taskObservable.ForDocumentsOfType<Person>();
  335. observableWithTask.Task.Wait();
  336. observableWithTask.Subscribe(list.Add);
  337. using (var session = store.OpenSession())
  338. {
  339. session.Store(new Person());
  340. session.Store(new User());
  341. session.SaveChanges();
  342. }
  343. DocumentChangeNotification documentChangeNotification;
  344. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(2)));
  345. Assert.Equal("people/1", documentChangeNotification.Id);
  346. Assert.Equal("People", documentChangeNotification.CollectionName);
  347. Assert.Equal(ReflectionUtil.GetFullNameWithoutVersionInformation(typeof(Person)), documentChangeNotification.TypeName);
  348. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Put);
  349. }
  350. }
  351. [Fact]
  352. public void ForDocumentsOfTypeRemote4()
  353. {
  354. using (var store = NewRemoteDocumentStore())
  355. {
  356. var person = new Person();
  357. using (var session = store.OpenSession())
  358. {
  359. session.Store(person);
  360. session.Store(new User());
  361. session.SaveChanges();
  362. }
  363. var list = new BlockingCollection<DocumentChangeNotification>();
  364. var taskObservable = store.Changes();
  365. taskObservable.Task.Wait();
  366. var observableWithTask = taskObservable.ForDocumentsOfType<Person>();
  367. observableWithTask.Task.Wait();
  368. observableWithTask.Subscribe(list.Add);
  369. using (var session = store.OpenSession())
  370. {
  371. var personToDelete = session.Load<Person>(person.Id);
  372. session.Delete(personToDelete);
  373. session.SaveChanges();
  374. }
  375. DocumentChangeNotification documentChangeNotification;
  376. Assert.True(list.TryTake(out documentChangeNotification, TimeSpan.FromSeconds(2)));
  377. Assert.Equal("people/1", documentChangeNotification.Id);
  378. Assert.Equal("People", documentChangeNotification.CollectionName);
  379. Assert.Equal(ReflectionUtil.GetFullNameWithoutVersionInformation(typeof(Person)), documentChangeNotification.TypeName);
  380. Assert.Equal(documentChangeNotification.Type, DocumentChangeTypes.Delete);
  381. }
  382. }
  383. }
  384. }