PageRenderTime 38ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/DriverUnitTests/Core/MongoDBRefTests.cs

http://github.com/mongodb/mongo-csharp-driver
C# | 271 lines | 226 code | 31 blank | 14 comment | 30 complexity | 6bbaa54aca65ff628e8af060000980e5 MD5 | raw file
Possible License(s): Apache-2.0
  1. /* Copyright 2010-2012 10gen Inc.
  2. *
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License.
  14. */
  15. using System;
  16. using System.Collections.Generic;
  17. using System.Linq;
  18. using System.Text;
  19. using NUnit.Framework;
  20. using MongoDB.Bson;
  21. using MongoDB.Bson.Serialization;
  22. using MongoDB.Driver;
  23. namespace MongoDB.DriverUnitTests
  24. {
  25. [TestFixture]
  26. public class MongoDBRefTests
  27. {
  28. public class C
  29. {
  30. public ObjectId Id;
  31. public MongoDBRef DBRef;
  32. }
  33. [Test]
  34. public void TestNull()
  35. {
  36. var id = ObjectId.GenerateNewId();
  37. var obj = new C { Id = id, DBRef = null };
  38. var json = obj.ToJson();
  39. var expected = "{ '_id' : ObjectId('#id'), 'DBRef' : null }";
  40. expected = expected.Replace("#id", id.ToString());
  41. expected = expected.Replace("'", "\"");
  42. Assert.AreEqual(expected, json);
  43. var bson = obj.ToBson();
  44. var rehydrated = BsonSerializer.Deserialize<C>(bson);
  45. Assert.IsTrue(bson.SequenceEqual(rehydrated.ToBson()));
  46. }
  47. [Test]
  48. public void TestDateTimeRefId()
  49. {
  50. var id = ObjectId.GenerateNewId();
  51. var dateTime = BsonConstants.UnixEpoch; ;
  52. var dbRef = new MongoDBRef("collection", dateTime);
  53. var obj = new C { Id = id, DBRef = dbRef };
  54. var json = obj.ToJson();
  55. var expected = "{ '_id' : ObjectId('#id'), 'DBRef' : { '$ref' : 'collection', '$id' : ISODate('1970-01-01T00:00:00Z') } }";
  56. expected = expected.Replace("#id", id.ToString());
  57. expected = expected.Replace("'", "\"");
  58. Assert.AreEqual(expected, json);
  59. var bson = obj.ToBson();
  60. var rehydrated = BsonSerializer.Deserialize<C>(bson);
  61. Assert.IsTrue(bson.SequenceEqual(rehydrated.ToBson()));
  62. }
  63. [Test]
  64. public void TestDocumentRefId()
  65. {
  66. var id = ObjectId.GenerateNewId();
  67. var refId = new BsonDocument { { "x", 1 }, { "y", 2 } };
  68. var dbRef = new MongoDBRef("collection", refId);
  69. var obj = new C { Id = id, DBRef = dbRef };
  70. var json = obj.ToJson();
  71. var expected = "{ '_id' : ObjectId('#id'), 'DBRef' : { '$ref' : 'collection', '$id' : { 'x' : 1, 'y' : 2 } } }";
  72. expected = expected.Replace("#id", id.ToString());
  73. expected = expected.Replace("'", "\"");
  74. Assert.AreEqual(expected, json);
  75. var bson = obj.ToBson();
  76. var rehydrated = BsonSerializer.Deserialize<C>(bson);
  77. Assert.IsTrue(bson.SequenceEqual(rehydrated.ToBson()));
  78. }
  79. [Test]
  80. public void TestEqualsWithDatabase()
  81. {
  82. var a1 = new MongoDBRef("d", "c", 1);
  83. var a2 = new MongoDBRef("d", "c", 1);
  84. var a3 = a2;
  85. var b = new MongoDBRef("x", "c", 1);
  86. var c = new MongoDBRef("d", "x", 1);
  87. var d = new MongoDBRef("d", "c", 2);
  88. var null1 = (MongoDBRef)null;
  89. var null2 = (MongoDBRef)null;
  90. Assert.AreNotSame(a1, a2);
  91. Assert.AreSame(a2, a3);
  92. Assert.IsTrue(a1.Equals((object)a2));
  93. Assert.IsFalse(a1.Equals((object)null));
  94. Assert.IsFalse(a1.Equals((object)"x"));
  95. Assert.IsTrue(a1 == a2);
  96. Assert.IsTrue(a2 == a3);
  97. Assert.IsFalse(a1 == b);
  98. Assert.IsFalse(a1 == c);
  99. Assert.IsFalse(a1 == d);
  100. Assert.IsFalse(a1 == null1);
  101. Assert.IsFalse(null1 == a1);
  102. Assert.IsTrue(null1 == null2);
  103. Assert.IsFalse(a1 != a2);
  104. Assert.IsFalse(a2 != a3);
  105. Assert.IsTrue(a1 != b);
  106. Assert.IsTrue(a1 != c);
  107. Assert.IsTrue(a1 != d);
  108. Assert.IsTrue(a1 != null1);
  109. Assert.IsTrue(null1 != a1);
  110. Assert.IsFalse(null1 != null2);
  111. Assert.AreEqual(a1.GetHashCode(), a2.GetHashCode());
  112. }
  113. [Test]
  114. public void TestEqualsWithoutDatabase()
  115. {
  116. var a1 = new MongoDBRef("c", 1);
  117. var a2 = new MongoDBRef("c", 1);
  118. var a3 = a2;
  119. var b = new MongoDBRef("x", 1);
  120. var c = new MongoDBRef("c", 2);
  121. var null1 = (MongoDBRef)null;
  122. var null2 = (MongoDBRef)null;
  123. Assert.AreNotSame(a1, a2);
  124. Assert.AreSame(a2, a3);
  125. Assert.IsTrue(a1.Equals((object)a2));
  126. Assert.IsFalse(a1.Equals((object)null));
  127. Assert.IsFalse(a1.Equals((object)"x"));
  128. Assert.IsTrue(a1 == a2);
  129. Assert.IsTrue(a2 == a3);
  130. Assert.IsFalse(a1 == b);
  131. Assert.IsFalse(a1 == c);
  132. Assert.IsFalse(a1 == null1);
  133. Assert.IsFalse(null1 == a1);
  134. Assert.IsTrue(null1 == null2);
  135. Assert.IsFalse(a1 != a2);
  136. Assert.IsFalse(a2 != a3);
  137. Assert.IsTrue(a1 != b);
  138. Assert.IsTrue(a1 != c);
  139. Assert.IsTrue(a1 != null1);
  140. Assert.IsTrue(null1 != a1);
  141. Assert.IsFalse(null1 != null2);
  142. Assert.AreEqual(a1.GetHashCode(), a2.GetHashCode());
  143. }
  144. [Test]
  145. public void TestGuidRefId()
  146. {
  147. var id = ObjectId.GenerateNewId();
  148. var guid = Guid.NewGuid();
  149. var dbRef = new MongoDBRef("collection", guid);
  150. var obj = new C { Id = id, DBRef = dbRef };
  151. var json = obj.ToJson();
  152. var expected = "{ '_id' : ObjectId('#id'), 'DBRef' : { '$ref' : 'collection', '$id' : CSUUID('#guid') } }";
  153. expected = expected.Replace("#id", id.ToString());
  154. expected = expected.Replace("#guid", guid.ToString());
  155. expected = expected.Replace("'", "\"");
  156. Assert.AreEqual(expected, json);
  157. var bson = obj.ToBson();
  158. var rehydrated = BsonSerializer.Deserialize<C>(bson);
  159. Assert.IsTrue(bson.SequenceEqual(rehydrated.ToBson()));
  160. }
  161. [Test]
  162. public void TestInt32RefId()
  163. {
  164. var id = ObjectId.GenerateNewId();
  165. var dbRef = new MongoDBRef("collection", 1);
  166. var obj = new C { Id = id, DBRef = dbRef };
  167. var json = obj.ToJson();
  168. var expected = "{ '_id' : ObjectId('#id'), 'DBRef' : { '$ref' : 'collection', '$id' : 1 } }";
  169. expected = expected.Replace("#id", id.ToString());
  170. expected = expected.Replace("'", "\"");
  171. Assert.AreEqual(expected, json);
  172. var bson = obj.ToBson();
  173. var rehydrated = BsonSerializer.Deserialize<C>(bson);
  174. Assert.IsTrue(bson.SequenceEqual(rehydrated.ToBson()));
  175. }
  176. [Test]
  177. public void TestInt64RefId()
  178. {
  179. var id = ObjectId.GenerateNewId();
  180. var dbRef = new MongoDBRef("collection", 123456789012345L);
  181. var obj = new C { Id = id, DBRef = dbRef };
  182. var json = obj.ToJson();
  183. var expected = "{ '_id' : ObjectId('#id'), 'DBRef' : { '$ref' : 'collection', '$id' : NumberLong('123456789012345') } }";
  184. expected = expected.Replace("#id", id.ToString());
  185. expected = expected.Replace("'", "\"");
  186. Assert.AreEqual(expected, json);
  187. var bson = obj.ToBson();
  188. var rehydrated = BsonSerializer.Deserialize<C>(bson);
  189. Assert.IsTrue(bson.SequenceEqual(rehydrated.ToBson()));
  190. }
  191. [Test]
  192. public void TestObjectIdRefId()
  193. {
  194. var id = ObjectId.GenerateNewId();
  195. var refId = ObjectId.GenerateNewId();
  196. var dbRef = new MongoDBRef("collection", refId);
  197. var obj = new C { Id = id, DBRef = dbRef };
  198. var json = obj.ToJson();
  199. var expected = "{ '_id' : ObjectId('#id'), 'DBRef' : { '$ref' : 'collection', '$id' : ObjectId('#ref') } }";
  200. expected = expected.Replace("#id", id.ToString());
  201. expected = expected.Replace("#ref", refId.ToString());
  202. expected = expected.Replace("'", "\"");
  203. Assert.AreEqual(expected, json);
  204. var bson = obj.ToBson();
  205. var rehydrated = BsonSerializer.Deserialize<C>(bson);
  206. Assert.IsTrue(bson.SequenceEqual(rehydrated.ToBson()));
  207. }
  208. [Test]
  209. public void TestStringRefId()
  210. {
  211. var id = ObjectId.GenerateNewId();
  212. var dbRef = new MongoDBRef("collection", "abc");
  213. var obj = new C { Id = id, DBRef = dbRef };
  214. var json = obj.ToJson();
  215. var expected = "{ '_id' : ObjectId('#id'), 'DBRef' : { '$ref' : 'collection', '$id' : 'abc' } }";
  216. expected = expected.Replace("#id", id.ToString());
  217. expected = expected.Replace("'", "\"");
  218. Assert.AreEqual(expected, json);
  219. var bson = obj.ToBson();
  220. var rehydrated = BsonSerializer.Deserialize<C>(bson);
  221. Assert.IsTrue(bson.SequenceEqual(rehydrated.ToBson()));
  222. }
  223. [Test]
  224. public void TestWithDatabase()
  225. {
  226. var id = ObjectId.GenerateNewId();
  227. var dbRef = new MongoDBRef("database", "collection", ObjectId.GenerateNewId());
  228. var obj = new C { Id = id, DBRef = dbRef };
  229. var json = obj.ToJson();
  230. var expected = "{ '_id' : ObjectId('#id'), 'DBRef' : { '$ref' : 'collection', '$id' : ObjectId('#ref'), '$db' : 'database' } }";
  231. expected = expected.Replace("#id", id.ToString());
  232. expected = expected.Replace("#ref", dbRef.Id.ToString());
  233. expected = expected.Replace("'", "\"");
  234. Assert.AreEqual(expected, json);
  235. var bson = obj.ToBson();
  236. var rehydrated = BsonSerializer.Deserialize<C>(bson);
  237. Assert.IsTrue(bson.SequenceEqual(rehydrated.ToBson()));
  238. }
  239. }
  240. }