PageRenderTime 53ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/v0.3-dev/ExtendedMvc/ExtendedMvc.Tests/Extensions/Ajax/Link/LinkTest.cs

#
C# | 448 lines | 247 code | 65 blank | 136 comment | 1 complexity | 1ba7e49535afe404191c733fe2d14fe3 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. using System.Linq;
  2. using System.Web.Mvc;
  3. using System.Web.Mvc.Ajax;
  4. using System.Web.Routing;
  5. using ExtendedMvc.Tests.Model;
  6. using ExtendedMvc.Tests.Model.Entities;
  7. using Microsoft.VisualStudio.TestTools.UnitTesting;
  8. namespace ExtendedMvc.Tests {
  9. /// <summary>
  10. ///This is a test class for LinkTest and is intended
  11. ///to contain all LinkTest Unit Tests
  12. ///</summary>
  13. [TestClass()]
  14. public class AjaxLinkTest {
  15. private static DummyDataSource database;
  16. private static ModelViewPage<Dummy> view;
  17. private const string onClickScript = @"onclick=""Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace });""";
  18. private const string onClickScriptWithInsertAfter = @"onclick=""Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.insertAfter });""";
  19. private const string onClickScriptWithInsertBefore = @"onclick=""Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.insertBefore });""";
  20. private const string onClickScriptWithTargetId = @"onclick=""Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: &#39;targetId&#39; });""";
  21. private const string onClickScriptWithOnComplete = @"onclick=""Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, onComplete: Function.createDelegate(this, function () { alert(&#39;me&#39;); }) });""";
  22. /// <summary>
  23. ///Gets or sets the test context which provides
  24. ///information about and functionality for the current test run.
  25. ///</summary>
  26. public TestContext TestContext { get; set; }
  27. #region Additional test attributes
  28. //
  29. //You can use the following additional attributes as you write your tests:
  30. //
  31. //Use ClassInitialize to run code before running the first test in the class
  32. [ClassInitialize()]
  33. public static void MyClassInitialize(TestContext testContext) {
  34. database = new DummyDataSource();
  35. var dummy = database.Dummies.All().First();
  36. view = MvcMockHelpers.FakeViewPage("Index", dummy);
  37. if (!RouteTable.Routes.Any()) {
  38. RouteTable.Routes.MapRoute(
  39. "Default", // Route name
  40. "{controller}/{action}/{id}", // URL with parameters
  41. new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
  42. );
  43. }
  44. }
  45. //Use ClassCleanup to run code after all tests in a class have run
  46. //[ClassCleanup()]
  47. //public static void MyClassCleanup() {
  48. //}
  49. //
  50. //Use TestInitialize to run code before running each test
  51. [TestInitialize()]
  52. public void MyTestInitialize() {
  53. view.ViewContext.ViewData.ModelState.Clear();
  54. }
  55. //Use TestCleanup to run code after each test has run
  56. //[TestCleanup()]
  57. //public void MyTestCleanup() {
  58. //}
  59. //
  60. #endregion
  61. /// <summary>
  62. ///A test for Link Constructor
  63. ///</summary>
  64. [TestMethod()]
  65. public void AjaxLink_WithUrlOnly() {
  66. // Arrange
  67. var linkContent = "Link Content";
  68. var linkUrl = "~/link/dummy.aspx";
  69. var outputUrl = "/link/dummy.aspx";
  70. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScript);
  71. // Act
  72. var link = view.Ajax.Link(linkContent, linkUrl);
  73. var output = link.ToString();
  74. // Assert
  75. Assert.AreEqual<string>(expectedOutput, output);
  76. }
  77. /// <summary>
  78. ///A test for Link Constructor
  79. ///</summary>
  80. [TestMethod()]
  81. public void AjaxLink_WithAjaxOptions() {
  82. // Arrange
  83. var linkContent = "Link Content";
  84. var linkUrl = "~/link/dummy.aspx";
  85. var ajaxOptions = new AjaxOptions() {
  86. UpdateTargetId = "targetId"
  87. };
  88. var outputUrl = "/link/dummy.aspx";
  89. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScriptWithTargetId);
  90. // Act
  91. var link = view.Ajax.Link(linkContent, linkUrl, ajaxOptions);
  92. var output = link.ToString();
  93. // Assert
  94. Assert.AreEqual<string>(expectedOutput, output);
  95. }
  96. /// <summary>
  97. ///A test for Link Constructor
  98. ///</summary>
  99. [TestMethod()]
  100. public void AjaxActionLink_WithDefaultActionOnly() {
  101. // Arrange
  102. var linkContent = "Link Content";
  103. var actionName = "Index";
  104. var outputUrl = "/";
  105. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScript);
  106. // Act
  107. var link = view.Ajax.ActionLink(linkContent, actionName);
  108. var output = link.ToString();
  109. // Assert
  110. Assert.AreEqual<string>(expectedOutput, output);
  111. }
  112. /// <summary>
  113. ///A test for Link Constructor
  114. ///</summary>
  115. [TestMethod()]
  116. public void AjaxActionLink_WithOtherActionOnly() {
  117. // Arrange
  118. var linkContent = "Link Content";
  119. var actionName = "Edit";
  120. var outputUrl = "/Home/Edit";
  121. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScript);
  122. // Act
  123. var link = view.Ajax.ActionLink(linkContent, actionName);
  124. var output = link.ToString();
  125. // Assert
  126. Assert.AreEqual<string>(expectedOutput, output);
  127. }
  128. /// <summary>
  129. ///A test for Link Constructor
  130. ///</summary>
  131. [TestMethod()]
  132. public void AjaxActionLink_WithDefaultActionAndDefaultController() {
  133. // Arrange
  134. var linkContent = "Link Content";
  135. var actionName = "Index";
  136. var controllerName = "Home";
  137. var outputUrl = "/";
  138. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScript);
  139. // Act
  140. var link = view.Ajax.ActionLink(linkContent, actionName, controllerName);
  141. var output = link.ToString();
  142. // Assert
  143. Assert.AreEqual<string>(expectedOutput, output);
  144. }
  145. /// <summary>
  146. ///A test for Link Constructor
  147. ///</summary>
  148. [TestMethod()]
  149. public void AjaxActionLink_WithDefaultActionAndOtherController() {
  150. // Arrange
  151. var linkContent = "Link Content";
  152. var actionName = "Edit";
  153. var controllerName = "Home";
  154. var outputUrl = "/Home/Edit";
  155. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScript);
  156. // Act
  157. var link = view.Ajax.ActionLink(linkContent, actionName, controllerName);
  158. var output = link.ToString();
  159. // Assert
  160. Assert.AreEqual<string>(expectedOutput, output);
  161. }
  162. /// <summary>
  163. ///A test for Link Constructor
  164. ///</summary>
  165. [TestMethod()]
  166. public void AjaxActionLink_WithOtherActionAndOtherController() {
  167. // Arrange
  168. var linkContent = "Link Content";
  169. var actionName = "Edit";
  170. var controllerName = "Other";
  171. var outputUrl = "/Other/Edit";
  172. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScript);
  173. // Act
  174. var link = view.Ajax.ActionLink(linkContent, actionName, controllerName);
  175. var output = link.ToString();
  176. // Assert
  177. Assert.AreEqual<string>(expectedOutput, output);
  178. }
  179. /// <summary>
  180. ///A test for Link Constructor
  181. ///</summary>
  182. [TestMethod()]
  183. public void AjaxActionLink_WithAjaxOptions() {
  184. // Arrange
  185. var linkContent = "Link Content";
  186. var ajaxOptions = new AjaxOptions() {
  187. UpdateTargetId = "targetId"
  188. };
  189. var outputUrl = "/";
  190. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScriptWithTargetId);
  191. // Act
  192. var link = view.Ajax.ActionLink(linkContent, ajaxOptions: ajaxOptions);
  193. var output = link.ToString();
  194. // Assert
  195. Assert.AreEqual<string>(expectedOutput, output);
  196. }
  197. /// <summary>
  198. ///A test for Link Constructor
  199. ///</summary>
  200. [TestMethod()]
  201. public void AjaxActionLink_WithRouteValues() {
  202. // Arrange
  203. var linkContent = "Link Content";
  204. var actionName = "Index";
  205. var routeValues = new { id = 5, name = "blah" };
  206. var outputUrl = "/Home/Index/5?name=blah";
  207. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScript);
  208. // Act
  209. var link = view.Ajax.ActionLink(linkContent, actionName, routeValues: routeValues);
  210. var output = link.ToString();
  211. // Assert
  212. Assert.AreEqual<string>(expectedOutput, output);
  213. }
  214. /// <summary>
  215. ///A test for Link Constructor
  216. ///</summary>
  217. [TestMethod()]
  218. public void AjaxRouteLink_WithValidRouteNameOnly() {
  219. // Arrange
  220. var linkContent = "Link Content";
  221. var routeName = "Default";
  222. var outputUrl = "/";
  223. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScript);
  224. // Act
  225. var link = view.Ajax.RouteLink(linkContent, routeName);
  226. var output = link.ToString();
  227. // Assert
  228. Assert.AreEqual<string>(expectedOutput, output);
  229. }
  230. /// <summary>
  231. ///A test for Link Constructor
  232. ///</summary>
  233. [TestMethod()]
  234. [ExpectedException(typeof(System.ArgumentException))]
  235. public void AjaxRouteLink_WithInvalidRouteNameOnly() {
  236. // Arrange
  237. var linkContent = "Link Content";
  238. var routeName = "Other";
  239. // Act
  240. var link = view.Ajax.RouteLink(linkContent, routeName);
  241. }
  242. /// <summary>
  243. ///A test for Link Constructor
  244. ///</summary>
  245. [TestMethod()]
  246. public void AjaxRouteLink_WithProtocol() {
  247. // Arrange
  248. var linkContent = "Link Content";
  249. var routeName = "Default";
  250. var protocol = "https";
  251. var outputUrl = "https://localhost/";
  252. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScript);
  253. // Act
  254. var link = view.Ajax.RouteLink(linkContent, routeName, protocol);
  255. var output = link.ToString();
  256. // Assert
  257. Assert.AreEqual<string>(expectedOutput, output);
  258. }
  259. /// <summary>
  260. ///A test for Link Constructor
  261. ///</summary>
  262. [TestMethod()]
  263. public void AjaxRouteLink_WithHostName() {
  264. // Arrange
  265. var linkContent = "Link Content";
  266. var routeName = "Default";
  267. var hostName = "server";
  268. var outputUrl = "http://server/";
  269. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScript);
  270. // Act
  271. var link = view.Ajax.RouteLink(linkContent, routeName, hostName: hostName);
  272. var output = link.ToString();
  273. // Assert
  274. Assert.AreEqual<string>(expectedOutput, output);
  275. }
  276. /// <summary>
  277. ///A test for Link Constructor
  278. ///</summary>
  279. [TestMethod()]
  280. public void AjaxRouteLink_WithFragment() {
  281. // Arrange
  282. var linkContent = "Link Content";
  283. var routeName = "Default";
  284. var fragment = "123";
  285. var outputUrl = "/#123";
  286. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScript);
  287. // Act
  288. var link = view.Ajax.RouteLink(linkContent, routeName, fragment: fragment);
  289. var output = link.ToString();
  290. // Assert
  291. Assert.AreEqual<string>(expectedOutput, output);
  292. }
  293. /// <summary>
  294. ///A test for Link Constructor
  295. ///</summary>
  296. [TestMethod()]
  297. public void AjaxRouteLink_WithRouteValues() {
  298. // Arrange
  299. var linkContent = "Link Content";
  300. var routeName = "Default";
  301. var routeValues = new { id = 5, name = "blah" };
  302. var outputUrl = "/Home/Index/5?name=blah";
  303. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScript);
  304. // Act
  305. var link = view.Ajax.RouteLink(linkContent, routeName, routeValues: routeValues);
  306. var output = link.ToString();
  307. // Assert
  308. Assert.AreEqual<string>(expectedOutput, output);
  309. }
  310. /// <summary>
  311. ///A test for Link Constructor
  312. ///</summary>
  313. [TestMethod()]
  314. public void AjaxRouteLink_WithAjaxOptions_TargetId() {
  315. // Arrange
  316. var linkContent = "Link Content";
  317. var ajaxOptions = new AjaxOptions() {
  318. UpdateTargetId = "targetId"
  319. };
  320. var outputUrl = "/";
  321. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScriptWithTargetId);
  322. // Act
  323. var link = view.Ajax.RouteLink(linkContent, ajaxOptions: ajaxOptions);
  324. var output = link.ToString();
  325. // Assert
  326. Assert.AreEqual<string>(expectedOutput, output);
  327. }
  328. /// <summary>
  329. ///A test for Link Constructor
  330. ///</summary>
  331. [TestMethod()]
  332. public void AjaxRouteLink_WithAjaxOptions_OnComplete() {
  333. // Arrange
  334. var linkContent = "Link Content";
  335. var ajaxOptions = new AjaxOptions() {
  336. OnComplete = "function () { alert('me'); }"
  337. };
  338. var outputUrl = "/";
  339. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScriptWithOnComplete);
  340. // Act
  341. var link = view.Ajax.RouteLink(linkContent, ajaxOptions: ajaxOptions);
  342. var output = link.ToString();
  343. // Assert
  344. Assert.AreEqual<string>(expectedOutput, output);
  345. }
  346. /// <summary>
  347. ///A test for Link Constructor
  348. ///</summary>
  349. [TestMethod()]
  350. public void AjaxRouteLink_WithAjaxOptions_InsertionMode_InsertAfter() {
  351. // Arrange
  352. var linkContent = "Link Content";
  353. var ajaxOptions = new AjaxOptions() {
  354. InsertionMode = InsertionMode.InsertAfter
  355. };
  356. var outputUrl = "/";
  357. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScriptWithInsertAfter);
  358. // Act
  359. var link = view.Ajax.RouteLink(linkContent, ajaxOptions: ajaxOptions);
  360. var output = link.ToString();
  361. // Assert
  362. Assert.AreEqual<string>(expectedOutput, output);
  363. }
  364. /// <summary>
  365. ///A test for Link Constructor
  366. ///</summary>
  367. [TestMethod()]
  368. public void AjaxRouteLink_WithAjaxOptions_InsertionMode_InsertBefore() {
  369. // Arrange
  370. var linkContent = "Link Content";
  371. var ajaxOptions = new AjaxOptions() {
  372. InsertionMode = InsertionMode.InsertBefore
  373. };
  374. var outputUrl = "/";
  375. var expectedOutput = string.Format(@"<a href=""{1}"" {2}>{0}</a>", linkContent, outputUrl, onClickScriptWithInsertBefore);
  376. // Act
  377. var link = view.Ajax.RouteLink(linkContent, ajaxOptions: ajaxOptions);
  378. var output = link.ToString();
  379. // Assert
  380. Assert.AreEqual<string>(expectedOutput, output);
  381. }
  382. }
  383. }