/NavigationDesigner.Test/ValidationTest.cs

# · C# · 346 lines · 323 code · 23 blank · 0 comment · 8 complexity · e6bbddbc09aefa07adf1fa784d641f47 MD5 · raw file

  1. using Microsoft.VisualStudio.Modeling;
  2. using Microsoft.VisualStudio.Modeling.Validation;
  3. using Microsoft.VisualStudio.TestTools.UnitTesting;
  4. using Navigation.Designer;
  5. using System.Linq;
  6. namespace Navigation.Designer.Test
  7. {
  8. [TestClass]
  9. public class ValidationTest
  10. {
  11. private static NavigationDiagram LoadModel(string navigationModel)
  12. {
  13. Store store = new Store(typeof(NavigationLanguageDomainModel));
  14. NavigationDiagram navigationConfiguration;
  15. using (Transaction t = store.TransactionManager.BeginTransaction("test", true))
  16. {
  17. navigationConfiguration = NavigationLanguageSerializationHelper.Instance.LoadModel(store, navigationModel, null, null, null);
  18. t.Commit();
  19. }
  20. return navigationConfiguration;
  21. }
  22. private bool ValidateValidationMessages<T>(ValidationMessage message, string code, params T[] elements) where T : ModelElement
  23. {
  24. bool valid = message.Code == code && message.ReferencedModelElements.Count == elements.Length;
  25. int i = 0;
  26. foreach (T element in elements)
  27. {
  28. valid = valid && message.ReferencedModelElements[i] == element;
  29. i++;
  30. }
  31. return valid;
  32. }
  33. [TestMethod]
  34. public void BlankStateTest()
  35. {
  36. NavigationDiagram navigationConfiguration = LoadModel("Diagram/BlankState.nav");
  37. State state = navigationConfiguration.States[1];
  38. ValidationController validator = new ValidationController();
  39. validator.Validate(navigationConfiguration.Store, ValidationCategories.Open);
  40. Assert.AreEqual(0, validator.WarningMessages.Count);
  41. Assert.AreEqual(0, validator.InformationalMessages.Count);
  42. Assert.AreEqual(0, validator.FatalMessages.Count);
  43. Assert.AreEqual(1, validator.ErrorMessages.Count);
  44. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[0], "StateKeyEmpty", state));
  45. }
  46. [TestMethod]
  47. public void PathsFormatStateTest()
  48. {
  49. NavigationDiagram navigationConfiguration = LoadModel("Diagram/PathsFormatState.nav");
  50. State state = navigationConfiguration.States[0];
  51. ValidationController validator = new ValidationController();
  52. validator.Validate(navigationConfiguration.Store, ValidationCategories.Menu);
  53. Assert.AreEqual(0, validator.WarningMessages.Count);
  54. Assert.AreEqual(0, validator.InformationalMessages.Count);
  55. Assert.AreEqual(0, validator.FatalMessages.Count);
  56. Assert.AreEqual(5, validator.ErrorMessages.Count);
  57. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[0], "StatePageInvalid", state));
  58. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[1], "StateMastersInvalid", state));
  59. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[2], "DialogPathInvalid", state));
  60. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[3], "StateMobilePageInvalid", state));
  61. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[4], "StateMobileMastersInvalid", state));
  62. }
  63. [TestMethod]
  64. public void TitleAndResourceStateTest()
  65. {
  66. NavigationDiagram navigationConfiguration = LoadModel("Diagram/TitleAndResourceState.nav");
  67. State state = navigationConfiguration.States[0];
  68. ValidationController validator = new ValidationController();
  69. validator.Validate(navigationConfiguration.Store, ValidationCategories.Open);
  70. Assert.AreEqual(0, validator.WarningMessages.Count);
  71. Assert.AreEqual(0, validator.InformationalMessages.Count);
  72. Assert.AreEqual(0, validator.FatalMessages.Count);
  73. Assert.AreEqual(2, validator.ErrorMessages.Count);
  74. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[0], "StateTitleAndResourceInvalid", state));
  75. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[1], "DialogTitleAndResourceInvalid", state));
  76. }
  77. [TestMethod]
  78. public void ResourceStateTest()
  79. {
  80. NavigationDiagram navigationConfiguration = LoadModel("Diagram/ResourceState.nav");
  81. State state = navigationConfiguration.States[0];
  82. ValidationController validator = new ValidationController();
  83. validator.Validate(navigationConfiguration.Store, ValidationCategories.Save);
  84. Assert.AreEqual(0, validator.WarningMessages.Count);
  85. Assert.AreEqual(0, validator.InformationalMessages.Count);
  86. Assert.AreEqual(0, validator.FatalMessages.Count);
  87. Assert.AreEqual(2, validator.ErrorMessages.Count);
  88. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[0], "StateResourceInvalid", state));
  89. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[1], "DialogResourceInvalid", state));
  90. }
  91. [TestMethod]
  92. public void DefaultsStateTest()
  93. {
  94. NavigationDiagram navigationConfiguration = LoadModel("Diagram/DefaultsState.nav");
  95. State state1 = navigationConfiguration.States[0];
  96. State state2 = navigationConfiguration.States[1];
  97. State state3 = navigationConfiguration.States[2];
  98. ValidationController validator = new ValidationController();
  99. validator.Validate(navigationConfiguration.Store, ValidationCategories.Menu);
  100. Assert.AreEqual(0, validator.WarningMessages.Count);
  101. Assert.AreEqual(0, validator.InformationalMessages.Count);
  102. Assert.AreEqual(0, validator.FatalMessages.Count);
  103. Assert.AreEqual(3, validator.ErrorMessages.Count);
  104. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[0], "StateDefaultsInvalid", state1));
  105. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[1], "StateDefaultsInvalid", state2));
  106. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[2], "StateDefaultsInvalid", state3));
  107. }
  108. [TestMethod]
  109. public void DefaultTypesStateTest()
  110. {
  111. NavigationDiagram navigationConfiguration = LoadModel("Diagram/DefaultTypesState.nav");
  112. State state1 = navigationConfiguration.States[0];
  113. State state2 = navigationConfiguration.States[1];
  114. State state3 = navigationConfiguration.States[2];
  115. ValidationController validator = new ValidationController();
  116. validator.Validate(navigationConfiguration.Store, ValidationCategories.Menu);
  117. Assert.AreEqual(0, validator.WarningMessages.Count);
  118. Assert.AreEqual(0, validator.InformationalMessages.Count);
  119. Assert.AreEqual(0, validator.FatalMessages.Count);
  120. Assert.AreEqual(3, validator.ErrorMessages.Count);
  121. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[0], "StateDefaultTypesInvalid", state1));
  122. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[1], "StateDefaultTypesInvalid", state2));
  123. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[2], "StateDefaultTypesInvalid", state3));
  124. }
  125. [TestMethod]
  126. public void DuplicateTransitionTest()
  127. {
  128. NavigationDiagram navigationConfiguration = LoadModel("Diagram/DuplicateTransition.nav");
  129. Transition transition1 = Transition.GetLink(navigationConfiguration.States[0], navigationConfiguration.States[1]);
  130. Transition transition2 = Transition.GetLink(navigationConfiguration.States[0], navigationConfiguration.States[2]);
  131. ValidationController validator = new ValidationController();
  132. validator.Validate(navigationConfiguration.Store, ValidationCategories.Open);
  133. Assert.AreEqual(0, validator.WarningMessages.Count);
  134. Assert.AreEqual(0, validator.InformationalMessages.Count);
  135. Assert.AreEqual(0, validator.FatalMessages.Count);
  136. Assert.AreEqual(1, validator.ErrorMessages.Count);
  137. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[0], "DuplicateTransitionKey", transition1, transition2));
  138. }
  139. [TestMethod]
  140. public void DuplicateTransitionAcrossStateTest()
  141. {
  142. NavigationDiagram navigationConfiguration = LoadModel("Diagram/DuplicateTransitionAcrossState.nav");
  143. ValidationController validator = new ValidationController();
  144. validator.Validate(navigationConfiguration.Store, ValidationCategories.Open);
  145. Assert.AreEqual(0, validator.WarningMessages.Count);
  146. Assert.AreEqual(0, validator.InformationalMessages.Count);
  147. Assert.AreEqual(0, validator.FatalMessages.Count);
  148. Assert.AreEqual(0, validator.ErrorMessages.Count);
  149. }
  150. [TestMethod]
  151. public void BlankTransitionTest()
  152. {
  153. NavigationDiagram navigationConfiguration = LoadModel("Diagram/BlankTransition.nav");
  154. Transition transition = Transition.GetLink(navigationConfiguration.States[0], navigationConfiguration.States[1]);
  155. ValidationController validator = new ValidationController();
  156. validator.Validate(navigationConfiguration.Store, ValidationCategories.Save);
  157. Assert.AreEqual(0, validator.WarningMessages.Count);
  158. Assert.AreEqual(0, validator.InformationalMessages.Count);
  159. Assert.AreEqual(0, validator.FatalMessages.Count);
  160. Assert.AreEqual(1, validator.ErrorMessages.Count);
  161. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[0], "TransitionKeyEmpty", transition));
  162. }
  163. [TestMethod]
  164. public void FromNoTrackBackTransitionTest()
  165. {
  166. NavigationDiagram navigationConfiguration = LoadModel("Diagram/FromNoTrackBackTransition.nav");
  167. Transition transition = Transition.GetLink(navigationConfiguration.States[0], navigationConfiguration.States[1]);
  168. ValidationController validator = new ValidationController();
  169. validator.Validate(navigationConfiguration.Store, ValidationCategories.Open);
  170. Assert.AreEqual(0, validator.WarningMessages.Count);
  171. Assert.AreEqual(0, validator.InformationalMessages.Count);
  172. Assert.AreEqual(0, validator.FatalMessages.Count);
  173. Assert.AreEqual(1, validator.ErrorMessages.Count);
  174. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[0], "TransitionWithBackToNoTrackState", transition));
  175. }
  176. [TestMethod]
  177. public void DuplicateDialogTest()
  178. {
  179. NavigationDiagram navigationConfiguration = LoadModel("Diagram/DuplicateDialog.nav");
  180. State state1 = navigationConfiguration.States[0];
  181. State state2 = navigationConfiguration.States[1];
  182. ValidationController validator = new ValidationController();
  183. validator.Validate(navigationConfiguration.Store, ValidationCategories.Save);
  184. Assert.AreEqual(0, validator.WarningMessages.Count);
  185. Assert.AreEqual(0, validator.InformationalMessages.Count);
  186. Assert.AreEqual(0, validator.FatalMessages.Count);
  187. Assert.AreEqual(1, validator.ErrorMessages.Count);
  188. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[0], "DuplicateDialogKey", state1, state2));
  189. }
  190. [TestMethod]
  191. public void DuplicateStateTest()
  192. {
  193. NavigationDiagram navigationConfiguration = LoadModel("Diagram/DuplicateState.nav");
  194. State state1 = navigationConfiguration.States[0];
  195. State state2 = navigationConfiguration.States[1];
  196. ValidationController validator = new ValidationController();
  197. validator.Validate(navigationConfiguration.Store, ValidationCategories.Open);
  198. Assert.AreEqual(0, validator.WarningMessages.Count);
  199. Assert.AreEqual(0, validator.InformationalMessages.Count);
  200. Assert.AreEqual(0, validator.FatalMessages.Count);
  201. Assert.AreEqual(1, validator.ErrorMessages.Count);
  202. Assert.IsTrue(ValidateValidationMessages(validator.ErrorMessages[0], "DuplicateStateKey", state1, state2));
  203. }
  204. [TestMethod]
  205. public void DuplicateStateAcrossDialogTest()
  206. {
  207. NavigationDiagram navigationConfiguration = LoadModel("Diagram/DuplicateStateAcrossDialog.nav");
  208. ValidationController validator = new ValidationController();
  209. validator.Validate(navigationConfiguration.Store, ValidationCategories.Save);
  210. Assert.AreEqual(0, validator.WarningMessages.Count);
  211. Assert.AreEqual(0, validator.InformationalMessages.Count);
  212. Assert.AreEqual(0, validator.FatalMessages.Count);
  213. Assert.AreEqual(0, validator.ErrorMessages.Count);
  214. }
  215. [TestMethod]
  216. public void FullStateTest()
  217. {
  218. NavigationDiagram navigationConfiguration = LoadModel("Diagram/FullState.nav");
  219. ValidationController validator = new ValidationController();
  220. validator.Validate(navigationConfiguration.Store, ValidationCategories.Open);
  221. Assert.AreEqual(0, validator.WarningMessages.Count);
  222. Assert.AreEqual(0, validator.InformationalMessages.Count);
  223. Assert.AreEqual(0, validator.FatalMessages.Count);
  224. Assert.AreEqual(0, validator.ErrorMessages.Count);
  225. }
  226. [TestMethod]
  227. public void RenameTransitionKeyTest()
  228. {
  229. NavigationDiagram navigationConfiguration = LoadModel("Diagram/RenameTransitionKey.nav");
  230. State stateA = navigationConfiguration.States.First(s => s.Key == "A");
  231. State stateB = navigationConfiguration.States.First(s => s.Key == "B");
  232. State stateC = navigationConfiguration.States.First(s => s.Key == "C");
  233. Transition transitionAB = Transition.GetLink(stateA, stateB);
  234. Transition transitionBC = Transition.GetLink(stateB, stateC);
  235. ValidationController validator = new ValidationController();
  236. validator.Validate(navigationConfiguration.Store, ValidationCategories.Open);
  237. Assert.AreEqual(2, validator.WarningMessages.Count);
  238. Assert.AreEqual(0, validator.InformationalMessages.Count);
  239. Assert.AreEqual(0, validator.FatalMessages.Count);
  240. Assert.AreEqual(0, validator.ErrorMessages.Count);
  241. Assert.IsTrue(ValidateValidationMessages(validator.WarningMessages[0], "TransitionKeyRename", transitionAB));
  242. Assert.IsTrue(ValidateValidationMessages(validator.WarningMessages[1], "TransitionKeyRename", transitionBC));
  243. }
  244. [TestMethod]
  245. public void StateCreationTest()
  246. {
  247. NavigationDiagram navigationConfiguration = LoadModel("Diagram/BlankModel.nav");
  248. using (Transaction t = navigationConfiguration.Store.TransactionManager.BeginTransaction("test"))
  249. {
  250. State state = new State(navigationConfiguration.Store);
  251. state.Key = "State1";
  252. t.Commit();
  253. Assert.AreEqual("~/Page.aspx", state.Page);
  254. Assert.IsTrue(state.Initial);
  255. Assert.AreEqual("Route", state.Route);
  256. }
  257. }
  258. [TestMethod]
  259. public void CreateTransitionTest()
  260. {
  261. NavigationDiagram navigationConfiguration = LoadModel("Diagram/CreateFirstToTransition.nav");
  262. using (Transaction t = navigationConfiguration.Store.TransactionManager.BeginTransaction("test"))
  263. {
  264. State from = navigationConfiguration.States[0];
  265. State to = navigationConfiguration.States[1];
  266. from.Successors.Add(to);
  267. t.Commit();
  268. Assert.AreEqual("B", to.Key);
  269. }
  270. }
  271. [TestMethod]
  272. public void CreateFirstToTransitionTest()
  273. {
  274. NavigationDiagram navigationConfiguration = LoadModel("Diagram/CreateFirstToTransition.nav");
  275. using (Transaction t = navigationConfiguration.Store.TransactionManager.BeginTransaction("test"))
  276. {
  277. State from = navigationConfiguration.States[0];
  278. State to = navigationConfiguration.States[1];
  279. from.Successors.Add(to);
  280. t.Commit();
  281. Assert.IsFalse(to.Initial);
  282. }
  283. }
  284. [TestMethod]
  285. public void DeleteLastToTransitionTest()
  286. {
  287. NavigationDiagram navigationConfiguration = LoadModel("Diagram/DeleteLastToTransition.nav");
  288. using (Transaction t = navigationConfiguration.Store.TransactionManager.BeginTransaction("test"))
  289. {
  290. State from = navigationConfiguration.States[0];
  291. State to = navigationConfiguration.States[1];
  292. from.Successors.Remove(to);
  293. t.Commit();
  294. Assert.IsTrue(to.Initial);
  295. }
  296. }
  297. [TestMethod]
  298. public void DeleteStateWithOneToTransitionTest()
  299. {
  300. NavigationDiagram navigationConfiguration = LoadModel("Diagram/DeleteLastToTransition.nav");
  301. using (Transaction t = navigationConfiguration.Store.TransactionManager.BeginTransaction("test"))
  302. {
  303. State to = navigationConfiguration.States[1];
  304. navigationConfiguration.States.Remove(to);
  305. t.Commit();
  306. Assert.IsFalse(to.Initial);
  307. }
  308. }
  309. [TestMethod]
  310. public void DeleteOneToTransitionTest()
  311. {
  312. NavigationDiagram navigationConfiguration = LoadModel("Diagram/DeleteOneToTransition.nav");
  313. using (Transaction t = navigationConfiguration.Store.TransactionManager.BeginTransaction("test"))
  314. {
  315. State from = navigationConfiguration.States[0];
  316. State to = navigationConfiguration.States[1];
  317. from.Successors.Remove(to);
  318. t.Commit();
  319. Assert.IsFalse(to.Initial);
  320. }
  321. }
  322. }
  323. }