PageRenderTime 45ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/src/BurnSystems/tests/BurnSystems.UnitTests/Database/Objects/MapperTests.cs

https://bitbucket.org/mbrenn/entityconnector
C# | 371 lines | 291 code | 63 blank | 17 comment | 19 complexity | a90153e5ceb4ef30b7cd055c8a755ade MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data.Common;
  4. using System.Data.SqlClient;
  5. using System.Linq;
  6. using BurnSystems.AdoNet.Queries;
  7. using BurnSystems.Database.Objects;
  8. using NUnit.Framework;
  9. using System.Reflection;
  10. namespace BurnSystems.UnitTests.Database.Objects
  11. {
  12. [TestFixture]
  13. public class MapperTests
  14. {
  15. /// <summary>
  16. /// Stores a value indicating that mysql shall be used
  17. /// </summary>
  18. private static bool useMySql = true;
  19. public void ExecuteDatabaseAction(Action<DbConnection> action)
  20. {
  21. DbConnection dbConnection = null;
  22. // Gets the database connection
  23. if (EnvironmentHelper.IsMono || useMySql)
  24. {
  25. Assembly assembly = null;
  26. try
  27. {
  28. assembly = Assembly.Load("MySql.Data, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d");
  29. }
  30. catch { }
  31. if (assembly == null)
  32. {
  33. try
  34. {
  35. assembly = Assembly.Load("MySql.Data, Version=6.1.3.0, Culture=neutral, PublicKeyToken=20449f9ba87f7ae2");
  36. }
  37. catch { }
  38. if (assembly == null)
  39. {
  40. Assert.Inconclusive("No MySql.Data.dll installed");
  41. }
  42. }
  43. var mysqlType = assembly.GetType("MySql.Data.MySqlClient.MySqlConnection");
  44. if (mysqlType == null)
  45. {
  46. Assert.Inconclusive("MySql-Type not found");
  47. }
  48. var mySqlConstructor = mysqlType.GetConstructor(new Type[] { typeof(string) });
  49. dbConnection = mySqlConstructor.Invoke(new object[] { "Server=127.0.0.1;Database=unittest;Uid=unittest;Pwd=unittest" })
  50. as DbConnection;
  51. dbConnection.Open();
  52. }
  53. else
  54. {
  55. dbConnection = new SqlConnection("Server=localhost\\SQLEXPRESS;Database=mb_test;Trusted_Connection=True;");
  56. dbConnection.Open();
  57. }
  58. Assert.That(dbConnection, Is.Not.Null);
  59. var query = Resources_UnitTest.install;
  60. var createQuery = new FreeQuery(query);
  61. dbConnection.ExecuteNonQuery(createQuery);
  62. try
  63. {
  64. // Do what has to be done
  65. action(dbConnection);
  66. }
  67. finally
  68. {
  69. // Cleans the database
  70. var deleteQuery = new FreeQuery("DROP TABLE persons");
  71. dbConnection.ExecuteNonQuery(deleteQuery);
  72. }
  73. }
  74. [Test]
  75. public void TestDatabaseConnection()
  76. {
  77. this.ExecuteDatabaseAction((dbConnection) => {});
  78. }
  79. [Test]
  80. public void TestInsertPerson()
  81. {
  82. this.ExecuteDatabaseAction((sqlConnection) =>
  83. {
  84. var mapper = new Mapper<Person>("persons", sqlConnection);
  85. Person person;
  86. Person person2;
  87. Person person3;
  88. InsertPersons(mapper, out person, out person2, out person3);
  89. Assert.That(person.Id, Is.Not.EqualTo(0));
  90. Assert.That(person2.Id, Is.Not.EqualTo(0));
  91. Assert.That(person3.Id, Is.Not.EqualTo(0));
  92. Assert.That(person.Id, Is.Not.EqualTo(person2.Id));
  93. Assert.That(person2.Id, Is.Not.EqualTo(person3.Id));
  94. Assert.That(person.Id, Is.Not.EqualTo(person3.Id));
  95. });
  96. }
  97. [Test]
  98. public void TestInsertPersonWithNullValues()
  99. {
  100. this.ExecuteDatabaseAction((sqlConnection) =>
  101. {
  102. var mapper = new Mapper<Person>("persons", sqlConnection);
  103. var person = new Person();
  104. person.Prename = "Karl";
  105. person.Name = null;
  106. person.Age_Temp = 12;
  107. person.Weight = 12.34;
  108. person.Sex = Sex.Male;
  109. person.Obsolete = "ABC";
  110. person.Marriage = new DateTime(1998, 9, 11, 3, 4, 5);
  111. mapper.Add(person);
  112. var persons = mapper.GetAll();
  113. Assert.That(persons.Length, Is.EqualTo(1));
  114. Assert.That(persons[0].Name, Is.Null);
  115. });
  116. }
  117. [Test]
  118. public void TestSelectPerson()
  119. {
  120. this.ExecuteDatabaseAction((sqlConnection) =>
  121. {
  122. var mapper = new Mapper<Person>("persons", sqlConnection);
  123. InsertPersons(mapper);
  124. var persons = mapper.GetAll();
  125. Assert.That(persons.Length, Is.EqualTo(3));
  126. Assert.That(persons[0].Id, Is.Not.EqualTo(0));
  127. Assert.That(persons[0].Id, Is.Not.EqualTo(persons[1].Id));
  128. Assert.That(persons[1].Id, Is.Not.EqualTo(persons[2].Id));
  129. Assert.That(persons[0].Id, Is.Not.EqualTo(persons[2].Id));
  130. var karl = persons.Where(x => x.Prename == "Karl").FirstOrDefault();
  131. Assert.That(karl, Is.Not.Null);
  132. Assert.That(karl.Name, Is.EqualTo("Heinz"));
  133. Assert.That(karl.Age_Temp, Is.EqualTo(12));
  134. Assert.That(karl.Weight, Is.EqualTo(12.34).Within(0.005));
  135. Assert.That(karl.Sex, Is.EqualTo(Sex.Male));
  136. Assert.That(karl.Marriage, Is.EqualTo(new DateTime(1998, 9, 11, 3, 4, 5)));
  137. });
  138. }
  139. [Test]
  140. public void TestSelectPersonByWhere()
  141. {
  142. this.ExecuteDatabaseAction((sqlConnection) =>
  143. {
  144. var mapper = new Mapper<Person>("persons", sqlConnection);
  145. InsertPersons(mapper);
  146. var where = new Dictionary<string, object>();
  147. where["Prename"] = "Karl";
  148. var persons = mapper.Get(where);
  149. Assert.That(persons.Length, Is.EqualTo(1));
  150. var karl = persons.Where(x => x.Prename == "Karl").FirstOrDefault();
  151. Assert.That(karl, Is.Not.Null);
  152. Assert.That(karl.Name, Is.EqualTo("Heinz"));
  153. Assert.That(karl.Age_Temp, Is.EqualTo(12));
  154. Assert.That(karl.Weight, Is.EqualTo(12.34).Within(0.005));
  155. Assert.That(karl.Sex, Is.EqualTo(Sex.Male));
  156. });
  157. }
  158. [Test]
  159. public void TestSelectPersonById()
  160. {
  161. this.ExecuteDatabaseAction((sqlConnection) =>
  162. {
  163. var mapper = new Mapper<Person>("persons", sqlConnection);
  164. InsertPersons(mapper);
  165. var persons = mapper.GetAll();
  166. var karl = persons.Where(x => x.Prename == "Karl").FirstOrDefault();
  167. Assert.That(karl, Is.Not.Null);
  168. var karl2 = mapper.Get(karl.Id);
  169. Assert.That(karl2.Name, Is.EqualTo(karl.Name));
  170. Assert.That(karl2.Age_Temp, Is.EqualTo(karl.Age_Temp));
  171. Assert.That(karl2.Weight, Is.EqualTo(karl.Weight));
  172. Assert.That(karl2.Sex, Is.EqualTo(karl.Sex));
  173. });
  174. }
  175. [Test]
  176. public void TestSelectPersonByWrongId()
  177. {
  178. this.ExecuteDatabaseAction((sqlConnection) =>
  179. {
  180. var mapper = new Mapper<Person>("persons", sqlConnection);
  181. Person p1;
  182. Person p2;
  183. Person p3;
  184. InsertPersons(mapper, out p1, out p2, out p3);
  185. var karl = mapper.Get(p1.Id + p2.Id + p3.Id);
  186. Assert.That(karl, Is.Null);
  187. });
  188. }
  189. [Test]
  190. public void TestDeletePersonByInstance()
  191. {
  192. this.ExecuteDatabaseAction((sqlConnection) =>
  193. {
  194. var mapper = new Mapper<Person>("persons", sqlConnection);
  195. InsertPersons(mapper);
  196. var persons = mapper.GetAll();
  197. var karl = persons.Where(x => x.Prename == "Karl").FirstOrDefault();
  198. Assert.That(karl, Is.Not.Null);
  199. mapper.Delete(karl);
  200. persons = mapper.GetAll();
  201. karl = persons.Where(x => x.Prename == "Karl").FirstOrDefault();
  202. Assert.That(karl, Is.Null);
  203. });
  204. }
  205. [Test]
  206. public void TestDeletePersonById()
  207. {
  208. this.ExecuteDatabaseAction((sqlConnection) =>
  209. {
  210. var mapper = new Mapper<Person>("persons", sqlConnection);
  211. InsertPersons(mapper);
  212. var persons = mapper.GetAll();
  213. var karl = persons.Where(x => x.Prename == "Karl").FirstOrDefault();
  214. Assert.That(karl, Is.Not.Null);
  215. mapper.Delete(karl.Id);
  216. persons = mapper.GetAll();
  217. karl = persons.Where(x => x.Prename == "Karl").FirstOrDefault();
  218. Assert.That(karl, Is.Null);
  219. });
  220. }
  221. [Test]
  222. public void TestUpdatePerson()
  223. {
  224. this.ExecuteDatabaseAction((sqlConnection) =>
  225. {
  226. var mapper = new Mapper<Person>("persons", sqlConnection);
  227. InsertPersons(mapper);
  228. var persons = mapper.GetAll();
  229. var karl = persons.Where(x => x.Prename == "Karl").FirstOrDefault();
  230. Assert.That(karl, Is.Not.Null);
  231. Assert.That(karl.Name, Is.EqualTo("Heinz"));
  232. karl.Name = "Mommenschatz";
  233. mapper.Update(karl);
  234. persons = mapper.GetAll();
  235. karl = persons.Where(x => x.Prename == "Karl").FirstOrDefault();
  236. Assert.That(karl, Is.Not.Null);
  237. Assert.That(karl.Name, Is.EqualTo("Mommenschatz"));
  238. });
  239. }
  240. [Test]
  241. public void TestUpdatePersonWithNullValues()
  242. {
  243. this.ExecuteDatabaseAction((sqlConnection) =>
  244. {
  245. var mapper = new Mapper<Person>("persons", sqlConnection);
  246. InsertPersons(mapper);
  247. var persons = mapper.GetAll();
  248. var karl = persons.Where(x => x.Prename == "Karl").FirstOrDefault();
  249. Assert.That(karl, Is.Not.Null);
  250. Assert.That(karl.Name, Is.EqualTo("Heinz"));
  251. karl.Name = null;
  252. mapper.Update(karl);
  253. persons = mapper.GetAll();
  254. karl = persons.Where(x => x.Prename == "Karl").FirstOrDefault();
  255. Assert.That(karl, Is.Not.Null);
  256. Assert.That(karl.Name, Is.Null);
  257. });
  258. }
  259. /// <summary>
  260. /// Inserts three persons into database
  261. /// </summary>
  262. /// <param name="mapper">Mapper to be used</param>
  263. private static void InsertPersons(Mapper<Person> mapper)
  264. {
  265. Person p1;
  266. Person p2;
  267. Person p3;
  268. InsertPersons(mapper, out p1, out p2, out p3);
  269. }
  270. /// <summary>
  271. /// Inserts three persons into database
  272. /// </summary>
  273. /// <param name="mapper">Mapper to be used</param>
  274. /// <param name="person">First person that has been added</param>
  275. /// <param name="person2">Second person that has been added</param>
  276. /// <param name="person3">Third person that has been added</param>
  277. private static void InsertPersons(Mapper<Person> mapper, out Person person, out Person person2, out Person person3)
  278. {
  279. person = new Person();
  280. person.Prename = "Karl";
  281. person.Name = "Heinz";
  282. person.Age_Temp = 12;
  283. person.Weight = 12.34;
  284. person.Sex = Sex.Male;
  285. person.Obsolete = "ABC";
  286. person.Marriage = new DateTime(1998, 9, 11, 3, 4, 5);
  287. mapper.Add(person);
  288. person2 = new Person();
  289. person2.Prename = "Otto";
  290. person2.Name = "Meier";
  291. person2.Age_Temp = 34;
  292. person2.Weight = 56.78;
  293. person2.Sex = Sex.Male;
  294. person2.Obsolete = "DEF";
  295. person2.Marriage = new DateTime(1999, 10, 12, 2, 3, 4);
  296. mapper.Add(person2);
  297. person3 = new Person();
  298. person3.Prename = "Gertrud";
  299. person3.Name = "Müller";
  300. person3.Age_Temp = 56;
  301. person3.Weight = 90.12;
  302. person3.Sex = Sex.Female;
  303. person3.Obsolete = "ABC";
  304. person3.Marriage = new DateTime(2000, 11, 13, 1, 2, 3);
  305. mapper.Add(person3);
  306. }
  307. }
  308. }