PageRenderTime 37ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/ControllableQuery/DevBranches/Demo.E1.E1/Source/ConsoleApplication2/MainTest.cs

#
C# | 344 lines | 34 code | 15 blank | 295 comment | 1 complexity | 1936d77bc67287dc7b0aaad0be0262af MD5 | raw file
  1. using System;
  2. using System.Linq;
  3. using NUnit.Framework;
  4. using PropertyExpression.Common;
  5. using PropertyExpression.ControllableQuery;
  6. using PropertyExpression.ControllableQuery.Toolkit;
  7. namespace ConsoleApplication2
  8. {
  9. [TestFixture]
  10. public class QueryTest
  11. {
  12. [Test]
  13. public void CheckAllQueries()
  14. {
  15. var qRepository = new FindUsagesQRepository();
  16. QueryChecker.CheckAllQueries(
  17. QExecutor.ConnectionString,
  18. typeof (Program).Assembly,
  19. (type, context) => {
  20. if (typeof(Program.RedSwitch).Equals(type))
  21. return typeof (Program).Assembly.GetTypes().Where(type.IsAssignableFrom)
  22. .SelectMany(_ => context.GetConstructorInvocations(_));
  23. throw new ApplicationException();
  24. },
  25. qRepository);
  26. foreach (var qLocationString in qRepository.FindUsages(
  27. QExecutor.ConnectionString, "BillOfMaterialsLine", "PartNumber".AsOption())
  28. .Select(QLocationExtensions.GetQLocationString))
  29. {
  30. Console.WriteLine(qLocationString);
  31. }
  32. }
  33. // private class IdGenerator
  34. // {
  35. // private int i;
  36. // public int NewId()
  37. // {
  38. // return i++;
  39. // }
  40. // }
  41. // [Test]
  42. // public void InsertTestData()
  43. // {
  44. // QExecutor.ExecuteNonQuery(() => new Q("DELETE FROM ServicePartsPage").NonQuery());
  45. // QExecutor.ExecuteNonQuery(() => new Q("DELETE FROM ModelPublication").NonQuery());
  46. // QExecutor.ExecuteNonQuery(() => new Q("DELETE FROM LocalizedPublication").NonQuery());
  47. // QExecutor.ExecuteNonQuery(() => new Q("DELETE FROM Publication").NonQuery());
  48. // QExecutor.ExecuteNonQuery(() => new Q("DELETE FROM PublicationType").NonQuery());
  49. // QExecutor.ExecuteNonQuery(() => new Q("DELETE FROM BillOfMaterialsLine").NonQuery());
  50. // QExecutor.ExecuteNonQuery(() => new Q("DELETE FROM BillOfMaterialsHeader").NonQuery());
  51. // QExecutor.ExecuteNonQuery(() => new Q("DELETE FROM Model").NonQuery());
  52. // var idGenerator = new IdGenerator();
  53. // var modelCode = "M1";
  54. // var modelSequence = "MS1";
  55. // var modelId = idGenerator.NewId();
  56. // InsertModel(modelId, modelCode, modelSequence);
  57. // var publicationTypeID = idGenerator.NewId();
  58. // InsertPublicationType(publicationTypeID, 1);
  59. // var publicationID1 = idGenerator.NewId();
  60. // InsertPublication(publicationID1, "P1", publicationTypeID, Option.Nothing<int>());
  61. // var languageCode = "en";
  62. // InsertLocalizedPublication("PubName1", idGenerator.NewId(), publicationID1, languageCode);
  63. // var modelPublicationId = idGenerator.NewId();
  64. // InsertModelPublication(modelPublicationId, modelCode, modelSequence, publicationID1);
  65. // var billOfMaterialsHeaderId1 = idGenerator.NewId();
  66. // InsertBillOfMaterialsHeader(billOfMaterialsHeaderId1);
  67. // var partNumber1 = "PN1";
  68. // InsertBillOfMaterialsLine(idGenerator.NewId(), 1, 1, 0, 1, 1, partNumber1, billOfMaterialsHeaderId1);
  69. // var partNumber2 = "PN2";
  70. // InsertBillOfMaterialsLine(idGenerator.NewId(), 0, 1, 1, 1, 2, partNumber2, billOfMaterialsHeaderId1);
  71. // var partNumber3 = "PN3";
  72. // InsertBillOfMaterialsLine(idGenerator.NewId(), 0, 1, 1, 1, 3, partNumber3, billOfMaterialsHeaderId1);
  73. // var servicePartsPageId1 = idGenerator.NewId();
  74. // InsertServicePartsPage(servicePartsPageId1, modelPublicationId, billOfMaterialsHeaderId1);
  75. // var billOfMaterialsHeaderId2 = idGenerator.NewId();
  76. // InsertBillOfMaterialsHeader(billOfMaterialsHeaderId2);
  77. // InsertBillOfMaterialsLine(idGenerator.NewId(), 1, 1, 1, 0, 1, partNumber1, billOfMaterialsHeaderId2);
  78. // InsertServicePartsPage(idGenerator.NewId(), modelPublicationId, billOfMaterialsHeaderId2);
  79. // var billOfMaterialsHeaderId3 = idGenerator.NewId();
  80. // InsertBillOfMaterialsHeader(billOfMaterialsHeaderId3);
  81. // InsertBillOfMaterialsLine(idGenerator.NewId(), 1, 0, 1, 1, 1, partNumber2, billOfMaterialsHeaderId3);
  82. // InsertServicePartsPage(idGenerator.NewId(), modelPublicationId, billOfMaterialsHeaderId3);
  83. // var publicationID2 = idGenerator.NewId();
  84. // InsertPublication(publicationID2, "P2", publicationTypeID, publicationID2.AsOption());
  85. // InsertLocalizedPublication("PubName2", idGenerator.NewId(), publicationID2, languageCode);
  86. // var modelPublicationId2 = idGenerator.NewId();
  87. // InsertModelPublication(modelPublicationId2, modelCode, modelSequence, publicationID2);
  88. // var billOfMaterialsHeaderId4 = idGenerator.NewId();
  89. // InsertBillOfMaterialsHeader(billOfMaterialsHeaderId4);
  90. // InsertBillOfMaterialsLine(idGenerator.NewId(), 1, 0, 1, 1, 1, partNumber3, billOfMaterialsHeaderId4);
  91. // InsertServicePartsPage(idGenerator.NewId(), modelPublicationId2, billOfMaterialsHeaderId4);
  92. // Assert.AreEqual(
  93. // 1,
  94. // LineWithLink(modelId, languageCode, billOfMaterialsHeaderId1, servicePartsPageId1, modelPublicationId, false, false));
  95. // Assert.AreEqual(
  96. // 3,
  97. // LineWithLink(modelId, languageCode, billOfMaterialsHeaderId1, servicePartsPageId1, modelPublicationId, true, false));
  98. // Assert.AreEqual(
  99. // 2,
  100. // LineWithLink(modelId, languageCode, billOfMaterialsHeaderId1, servicePartsPageId1, modelPublicationId, true, true));
  101. // }
  102. // private static int LineWithLink(int modelId, string languageCode, int billOfMaterialsHeaderId1, int servicePartsPageId1, int modelPublicationId, bool redCondition, bool blueCondition)
  103. // {
  104. // return QExecutor.MaterializeReader(
  105. // context => new {
  106. // billOfMaterialsHeaderId = context.Param(billOfMaterialsHeaderId1),
  107. // modelPublicationId = context.Param(modelPublicationId),
  108. // servicePartsPageId = context.Param(servicePartsPageId1),
  109. // languageCode = context.Param(languageCode),
  110. // modelId = context.Param(modelId),
  111. // redCondition,
  112. // blueCondition
  113. // },
  114. // p => {
  115. // var q = new Q(@"FROM BillOfMaterialsLine
  116. //WHERE BillOfMaterialsHeaderId = ")._(p.billOfMaterialsHeaderId)._(@"
  117. // AND ( ( BillOfMaterialsLine.MainLinkExcludedFrom = 0
  118. // AND EXISTS ( SELECT 1
  119. // FROM MainPartLink
  120. // WHERE MainPartLink.PartNumber = BillOfMaterialsLine.PartNumber
  121. // AND MainPartLink.ModelPublicationId = ")._(p.modelPublicationId)._(@"
  122. // AND MainPartLink.ServicePartsPageId <> ")._(p.servicePartsPageId)._(@" )
  123. // )");
  124. // if (p.redCondition)
  125. // {
  126. // q._(@"
  127. // OR ( BillOfMaterialsLine.InnerLinkExcludedFrom = 0
  128. // AND EXISTS ( SELECT 1
  129. // FROM InnerPartLink
  130. // INNER JOIN Model
  131. // ON InnerPartLink.ModelCode = Model.ModelCode
  132. // AND InnerPartLink.ModelSequence = Model.ModelSequence");
  133. // if (p.blueCondition)
  134. // q._(@"
  135. // INNER JOIN Publication
  136. // ON InnerPartLink.PublicationId = Publication.PublicationId");
  137. // q._(@"
  138. // INNER JOIN LocalizedPublication
  139. // ON InnerPartLink.PublicationId = LocalizedPublication.PublicationId
  140. // AND LocalizedPublication.LanguageCode = ")._(p.languageCode)._(@"
  141. // WHERE InnerPartLink.PartNumber = BillOfMaterialsLine.PartNumber
  142. // AND Model.ModelId = ")._(p.modelId);
  143. // if (p.blueCondition)
  144. // q._(@"
  145. // AND Publication.FollowingPublicationId IS NULL");
  146. // q._(@" )
  147. // )");
  148. // }
  149. // q._(@"
  150. // )");
  151. // return q.Select(_ => new {
  152. // BillOfMaterialsLineId = _._<int>(),
  153. // PartNumber = _._<string>()
  154. // });
  155. // }).Count();
  156. // }
  157. // private static void InsertPublicationType(int publicationTypeID, int code)
  158. // {
  159. // QExecutor.ExecuteNonQuery(
  160. // context => new {
  161. // PublicationTypeId = context.Param(publicationTypeID),
  162. // Code = context.Param(code)
  163. // },
  164. // p => new Q(@"INSERT INTO PublicationType
  165. // ( PublicationTypeId,
  166. // Code,
  167. // Decimal1,
  168. // Money1
  169. // )
  170. //VALUES ( ")._(p.PublicationTypeId)._(@",
  171. // ")._(p.Code)._(@",
  172. // 7,
  173. // 7
  174. // )").NonQuery());
  175. // }
  176. // private static void InsertPublication(int publicationID, string code, int publicationTypeId, IOption<int> followingPublicationId)
  177. // {
  178. // QExecutor.ExecuteNonQuery(
  179. // context => new {
  180. // PublicationId = context.Param(publicationID),
  181. // Code = context.Param(code),
  182. // PublicationTypeId = context.Param(publicationTypeId),
  183. // FollowingPublicationId = context.Param(followingPublicationId)
  184. // },
  185. // p => new Q(@"INSERT INTO Publication
  186. // ( PublicationId,
  187. // Code,
  188. // PublicationTypeId,
  189. // FollowingPublicationId
  190. // )
  191. //VALUES ( ")._(p.PublicationId)._(@",
  192. // ")._(p.Code)._(@",
  193. // ")._(p.PublicationTypeId)._(@",
  194. // ")._(p.FollowingPublicationId)._(@"
  195. // )").NonQuery());
  196. // }
  197. // private static void InsertModelPublication(int modelPublicationId, string modelCode, string modelSequence, int publicationId)
  198. // {
  199. // QExecutor.ExecuteNonQuery(
  200. // context => new {
  201. // ModelPublicationId = context.Param(modelPublicationId),
  202. // ModelCode = context.Param(modelCode),
  203. // ModelSequence = context.Param(modelSequence),
  204. // PublicationId = context.Param(publicationId)
  205. // },
  206. // p => new Q(@"INSERT INTO ModelPublication
  207. // ( ModelPublicationId,
  208. // ModelCode,
  209. // ModelSequence,
  210. // PublicationId
  211. // )
  212. //VALUES ( ")._(p.ModelPublicationId)._(@",
  213. // ")._(p.ModelCode)._(@",
  214. // ")._(p.ModelSequence)._(@",
  215. // ")._(p.PublicationId)._(@"
  216. // )").NonQuery());
  217. // }
  218. // private static void InsertServicePartsPage(int servicePartsPageId, int modelPublicationId, int billOfMaterialsHeaderId)
  219. // {
  220. // QExecutor.ExecuteNonQuery(
  221. // context => new {
  222. // ServicePartsPageId = context.Param(servicePartsPageId),
  223. // ModelPublicationId = context.Param(modelPublicationId),
  224. // BillOfMaterialsHeaderId = context.Param(billOfMaterialsHeaderId)
  225. // },
  226. // p => new Q(@"INSERT INTO ServicePartsPage
  227. // ( ServicePartsPageId,
  228. // ModelPublicationId,
  229. // BillOfMaterialsHeaderId
  230. // )
  231. //VALUES ( ")._(p.ServicePartsPageId)._(@",
  232. // ")._(p.ModelPublicationId)._(@",
  233. // ")._(p.BillOfMaterialsHeaderId)._(@"
  234. // )").NonQuery());
  235. // }
  236. // private static void InsertBillOfMaterialsHeader(int billOfMaterialsHeaderId)
  237. // {
  238. // QExecutor.ExecuteNonQuery(
  239. // context => new {
  240. // BillOfMaterialsHeaderId = context.Param(billOfMaterialsHeaderId)
  241. // },
  242. // p => new Q(@"INSERT INTO BillOfMaterialsHeader
  243. // ( BillOfMaterialsHeaderId
  244. // )
  245. //VALUES ( ")._(p.BillOfMaterialsHeaderId)._(@"
  246. // )").NonQuery());
  247. // }
  248. // private static void InsertBillOfMaterialsLine(
  249. // int billOfMaterialsLineId,
  250. // int innerLinkExcludedFrom,
  251. // int innerLinkExcludedTo,
  252. // int mainLinkExcludedFrom,
  253. // int mainLinkExcludedTo,
  254. // int itemSequence,
  255. // string partNumber,
  256. // int billOfMaterialsHeaderId)
  257. // {
  258. // QExecutor.ExecuteNonQuery(
  259. // context => new {
  260. // BillOfMaterialsLineId = context.Param(billOfMaterialsLineId),
  261. // InnerLinkExcludedFrom = context.Param(innerLinkExcludedFrom),
  262. // InnerLinkExcludedTo = context.Param(innerLinkExcludedTo),
  263. // MainLinkExcludedFrom = context.Param(mainLinkExcludedFrom),
  264. // MainLinkExcludedTo = context.Param(mainLinkExcludedTo),
  265. // ItemSequence = context.Param(itemSequence),
  266. // PartNumber = context.Param(partNumber),
  267. // BillOfMaterialsHeaderId = context.Param(billOfMaterialsHeaderId),
  268. // },
  269. // p => new Q(@"INSERT INTO BillOfMaterialsLine
  270. // ( BillOfMaterialsLineId,
  271. // InnerLinkExcludedFrom,
  272. // InnerLinkExcludedTo,
  273. // MainLinkExcludedFrom,
  274. // MainLinkExcludedTo,
  275. // ItemSequence,
  276. // PartNumber,
  277. // BillOfMaterialsHeaderId
  278. // )
  279. //VALUES ( ")._(p.BillOfMaterialsLineId)._(@",
  280. // ")._(p.InnerLinkExcludedFrom)._(@",
  281. // ")._(p.InnerLinkExcludedTo)._(@",
  282. // ")._(p.MainLinkExcludedFrom)._(@",
  283. // ")._(p.MainLinkExcludedTo)._(@",
  284. // ")._(p.ItemSequence)._(@",
  285. // ")._(p.PartNumber)._(@",
  286. // ")._(p.BillOfMaterialsHeaderId)._(@"
  287. // )").NonQuery());
  288. // }
  289. // private static void InsertModel(int modelId, string modelCode, string modelSequence)
  290. // {
  291. // QExecutor.ExecuteNonQuery(
  292. // context => new {
  293. // ModelId = context.Param(modelId),
  294. // ModelCode = context.Param(modelCode),
  295. // ModelSequence = context.Param(modelSequence)
  296. // },
  297. // p => new Q(@"INSERT INTO Model
  298. // ( ModelId,
  299. // ModelCode,
  300. // ModelSequence
  301. // )
  302. //VALUES ( ")._(p.ModelId)._(@",
  303. // ")._(p.ModelCode)._(@",
  304. // ")._(p.ModelSequence)._(@"
  305. // )").NonQuery());
  306. // }
  307. // private static void InsertLocalizedPublication(string publicationName, int localizedPublicationId, int publicationId, string languageCode)
  308. // {
  309. // QExecutor.ExecuteNonQuery(
  310. // context => new {
  311. // PublicationName = context.Param(publicationName),
  312. // LocalizedPublicationId = context.Param(localizedPublicationId),
  313. // PublicationId = context.Param(publicationId),
  314. // LanguageCode = context.Param(languageCode)
  315. // },
  316. // p => new Q(@"INSERT INTO LocalizedPublication
  317. // ( PublicationName,
  318. // LocalizedPublicationId,
  319. // PublicationId,
  320. // LanguageCode
  321. // )
  322. //VALUES ( ")._(p.PublicationName)._(@",
  323. // ")._(p.LocalizedPublicationId)._(@",
  324. // ")._(p.PublicationId)._(@",
  325. // ")._(p.LanguageCode)._(@"
  326. // )").NonQuery());
  327. // }
  328. }
  329. }