PageRenderTime 43ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/Programming/Labs/5sem/GHI/MVC/VLSosialNetwork/VLSosialNetwork.Tests/Controllers/AccountControllerTest.cs

http://bsuir-informatics-labs.googlecode.com/
C# | 402 lines | 294 code | 61 blank | 47 comment | 10 complexity | c7691d08a1bd7c832cd18be717d20d04 MD5 | raw file
Possible License(s): AGPL-1.0, CC0-1.0
  1. using System;
  2. using System.Security.Principal;
  3. using System.Web;
  4. using System.Web.Mvc;
  5. using System.Web.Routing;
  6. using System.Web.Security;
  7. using Microsoft.VisualStudio.TestTools.UnitTesting;
  8. using VLSosialNetwork;
  9. using VLSosialNetwork.Controllers;
  10. using VLSosialNetwork.Models;
  11. namespace VLSosialNetwork.Tests.Controllers
  12. {
  13. [TestClass]
  14. public class AccountControllerTest
  15. {
  16. [TestMethod]
  17. public void ChangePassword_Get_ReturnsView()
  18. {
  19. // Arrange
  20. AccountController controller = GetAccountController();
  21. // Act
  22. ActionResult result = controller.ChangePassword();
  23. // Assert
  24. Assert.IsInstanceOfType(result, typeof(ViewResult));
  25. Assert.AreEqual(10, ((ViewResult)result).ViewData["PasswordLength"]);
  26. }
  27. [TestMethod]
  28. public void ChangePassword_Post_ReturnsRedirectOnSuccess()
  29. {
  30. // Arrange
  31. AccountController controller = GetAccountController();
  32. ChangePasswordModel model = new ChangePasswordModel()
  33. {
  34. OldPassword = "goodOldPassword",
  35. NewPassword = "goodNewPassword",
  36. ConfirmPassword = "goodNewPassword"
  37. };
  38. // Act
  39. ActionResult result = controller.ChangePassword(model);
  40. // Assert
  41. Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
  42. RedirectToRouteResult redirectResult = (RedirectToRouteResult)result;
  43. Assert.AreEqual("ChangePasswordSuccess", redirectResult.RouteValues["action"]);
  44. }
  45. [TestMethod]
  46. public void ChangePassword_Post_ReturnsViewIfChangePasswordFails()
  47. {
  48. // Arrange
  49. AccountController controller = GetAccountController();
  50. ChangePasswordModel model = new ChangePasswordModel()
  51. {
  52. OldPassword = "goodOldPassword",
  53. NewPassword = "badNewPassword",
  54. ConfirmPassword = "badNewPassword"
  55. };
  56. // Act
  57. ActionResult result = controller.ChangePassword(model);
  58. // Assert
  59. Assert.IsInstanceOfType(result, typeof(ViewResult));
  60. ViewResult viewResult = (ViewResult)result;
  61. Assert.AreEqual(model, viewResult.ViewData.Model);
  62. Assert.AreEqual("The current password is incorrect or the new password is invalid.", controller.ModelState[""].Errors[0].ErrorMessage);
  63. Assert.AreEqual(10, viewResult.ViewData["PasswordLength"]);
  64. }
  65. [TestMethod]
  66. public void ChangePassword_Post_ReturnsViewIfModelStateIsInvalid()
  67. {
  68. // Arrange
  69. AccountController controller = GetAccountController();
  70. ChangePasswordModel model = new ChangePasswordModel()
  71. {
  72. OldPassword = "goodOldPassword",
  73. NewPassword = "goodNewPassword",
  74. ConfirmPassword = "goodNewPassword"
  75. };
  76. controller.ModelState.AddModelError("", "Dummy error message.");
  77. // Act
  78. ActionResult result = controller.ChangePassword(model);
  79. // Assert
  80. Assert.IsInstanceOfType(result, typeof(ViewResult));
  81. ViewResult viewResult = (ViewResult)result;
  82. Assert.AreEqual(model, viewResult.ViewData.Model);
  83. Assert.AreEqual(10, viewResult.ViewData["PasswordLength"]);
  84. }
  85. [TestMethod]
  86. public void ChangePasswordSuccess_ReturnsView()
  87. {
  88. // Arrange
  89. AccountController controller = GetAccountController();
  90. // Act
  91. ActionResult result = controller.ChangePasswordSuccess();
  92. // Assert
  93. Assert.IsInstanceOfType(result, typeof(ViewResult));
  94. }
  95. [TestMethod]
  96. public void LogOff_LogsOutAndRedirects()
  97. {
  98. // Arrange
  99. AccountController controller = GetAccountController();
  100. // Act
  101. ActionResult result = controller.LogOff();
  102. // Assert
  103. Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
  104. RedirectToRouteResult redirectResult = (RedirectToRouteResult)result;
  105. Assert.AreEqual("Home", redirectResult.RouteValues["controller"]);
  106. Assert.AreEqual("Index", redirectResult.RouteValues["action"]);
  107. Assert.IsTrue(((MockFormsAuthenticationService)controller.FormsService).SignOut_WasCalled);
  108. }
  109. [TestMethod]
  110. public void LogOn_Get_ReturnsView()
  111. {
  112. // Arrange
  113. AccountController controller = GetAccountController();
  114. // Act
  115. ActionResult result = controller.LogOn();
  116. // Assert
  117. Assert.IsInstanceOfType(result, typeof(ViewResult));
  118. }
  119. [TestMethod]
  120. public void LogOn_Post_ReturnsRedirectOnSuccess_WithoutReturnUrl()
  121. {
  122. // Arrange
  123. AccountController controller = GetAccountController();
  124. LogOnModel model = new LogOnModel()
  125. {
  126. UserName = "someUser",
  127. Password = "goodPassword",
  128. RememberMe = false
  129. };
  130. // Act
  131. ActionResult result = controller.LogOn(model, null);
  132. // Assert
  133. Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
  134. RedirectToRouteResult redirectResult = (RedirectToRouteResult)result;
  135. Assert.AreEqual("Home", redirectResult.RouteValues["controller"]);
  136. Assert.AreEqual("Index", redirectResult.RouteValues["action"]);
  137. Assert.IsTrue(((MockFormsAuthenticationService)controller.FormsService).SignIn_WasCalled);
  138. }
  139. [TestMethod]
  140. public void LogOn_Post_ReturnsRedirectOnSuccess_WithReturnUrl()
  141. {
  142. // Arrange
  143. AccountController controller = GetAccountController();
  144. LogOnModel model = new LogOnModel()
  145. {
  146. UserName = "someUser",
  147. Password = "goodPassword",
  148. RememberMe = false
  149. };
  150. // Act
  151. ActionResult result = controller.LogOn(model, "/someUrl");
  152. // Assert
  153. Assert.IsInstanceOfType(result, typeof(RedirectResult));
  154. RedirectResult redirectResult = (RedirectResult)result;
  155. Assert.AreEqual("/someUrl", redirectResult.Url);
  156. Assert.IsTrue(((MockFormsAuthenticationService)controller.FormsService).SignIn_WasCalled);
  157. }
  158. [TestMethod]
  159. public void LogOn_Post_ReturnsViewIfModelStateIsInvalid()
  160. {
  161. // Arrange
  162. AccountController controller = GetAccountController();
  163. LogOnModel model = new LogOnModel()
  164. {
  165. UserName = "someUser",
  166. Password = "goodPassword",
  167. RememberMe = false
  168. };
  169. controller.ModelState.AddModelError("", "Dummy error message.");
  170. // Act
  171. ActionResult result = controller.LogOn(model, null);
  172. // Assert
  173. Assert.IsInstanceOfType(result, typeof(ViewResult));
  174. ViewResult viewResult = (ViewResult)result;
  175. Assert.AreEqual(model, viewResult.ViewData.Model);
  176. }
  177. [TestMethod]
  178. public void LogOn_Post_ReturnsViewIfValidateUserFails()
  179. {
  180. // Arrange
  181. AccountController controller = GetAccountController();
  182. LogOnModel model = new LogOnModel()
  183. {
  184. UserName = "someUser",
  185. Password = "badPassword",
  186. RememberMe = false
  187. };
  188. // Act
  189. ActionResult result = controller.LogOn(model, null);
  190. // Assert
  191. Assert.IsInstanceOfType(result, typeof(ViewResult));
  192. ViewResult viewResult = (ViewResult)result;
  193. Assert.AreEqual(model, viewResult.ViewData.Model);
  194. Assert.AreEqual("The user name or password provided is incorrect.", controller.ModelState[""].Errors[0].ErrorMessage);
  195. }
  196. [TestMethod]
  197. public void Register_Get_ReturnsView()
  198. {
  199. // Arrange
  200. AccountController controller = GetAccountController();
  201. // Act
  202. ActionResult result = controller.Register();
  203. // Assert
  204. Assert.IsInstanceOfType(result, typeof(ViewResult));
  205. Assert.AreEqual(10, ((ViewResult)result).ViewData["PasswordLength"]);
  206. }
  207. [TestMethod]
  208. public void Register_Post_ReturnsRedirectOnSuccess()
  209. {
  210. // Arrange
  211. AccountController controller = GetAccountController();
  212. RegisterModel model = new RegisterModel()
  213. {
  214. UserName = "someUser",
  215. Email = "goodEmail",
  216. Password = "goodPassword",
  217. ConfirmPassword = "goodPassword"
  218. };
  219. // Act
  220. ActionResult result = controller.Register(model);
  221. // Assert
  222. Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
  223. RedirectToRouteResult redirectResult = (RedirectToRouteResult)result;
  224. Assert.AreEqual("Home", redirectResult.RouteValues["controller"]);
  225. Assert.AreEqual("Index", redirectResult.RouteValues["action"]);
  226. }
  227. [TestMethod]
  228. public void Register_Post_ReturnsViewIfRegistrationFails()
  229. {
  230. // Arrange
  231. AccountController controller = GetAccountController();
  232. RegisterModel model = new RegisterModel()
  233. {
  234. UserName = "duplicateUser",
  235. Email = "goodEmail",
  236. Password = "goodPassword",
  237. ConfirmPassword = "goodPassword"
  238. };
  239. // Act
  240. ActionResult result = controller.Register(model);
  241. // Assert
  242. Assert.IsInstanceOfType(result, typeof(ViewResult));
  243. ViewResult viewResult = (ViewResult)result;
  244. Assert.AreEqual(model, viewResult.ViewData.Model);
  245. Assert.AreEqual("Username already exists. Please enter a different user name.", controller.ModelState[""].Errors[0].ErrorMessage);
  246. Assert.AreEqual(10, viewResult.ViewData["PasswordLength"]);
  247. }
  248. [TestMethod]
  249. public void Register_Post_ReturnsViewIfModelStateIsInvalid()
  250. {
  251. // Arrange
  252. AccountController controller = GetAccountController();
  253. RegisterModel model = new RegisterModel()
  254. {
  255. UserName = "someUser",
  256. Email = "goodEmail",
  257. Password = "goodPassword",
  258. ConfirmPassword = "goodPassword"
  259. };
  260. controller.ModelState.AddModelError("", "Dummy error message.");
  261. // Act
  262. ActionResult result = controller.Register(model);
  263. // Assert
  264. Assert.IsInstanceOfType(result, typeof(ViewResult));
  265. ViewResult viewResult = (ViewResult)result;
  266. Assert.AreEqual(model, viewResult.ViewData.Model);
  267. Assert.AreEqual(10, viewResult.ViewData["PasswordLength"]);
  268. }
  269. private static AccountController GetAccountController()
  270. {
  271. AccountController controller = new AccountController()
  272. {
  273. FormsService = new MockFormsAuthenticationService(),
  274. MembershipService = new MockMembershipService()
  275. };
  276. controller.ControllerContext = new ControllerContext()
  277. {
  278. Controller = controller,
  279. RequestContext = new RequestContext(new MockHttpContext(), new RouteData())
  280. };
  281. return controller;
  282. }
  283. private class MockFormsAuthenticationService : IFormsAuthenticationService
  284. {
  285. public bool SignIn_WasCalled;
  286. public bool SignOut_WasCalled;
  287. public void SignIn(string userName, bool createPersistentCookie)
  288. {
  289. // verify that the arguments are what we expected
  290. Assert.AreEqual("someUser", userName);
  291. Assert.IsFalse(createPersistentCookie);
  292. SignIn_WasCalled = true;
  293. }
  294. public void SignOut()
  295. {
  296. SignOut_WasCalled = true;
  297. }
  298. }
  299. private class MockHttpContext : HttpContextBase
  300. {
  301. private readonly IPrincipal _user = new GenericPrincipal(new GenericIdentity("someUser"), null /* roles */);
  302. public override IPrincipal User
  303. {
  304. get
  305. {
  306. return _user;
  307. }
  308. set
  309. {
  310. base.User = value;
  311. }
  312. }
  313. }
  314. private class MockMembershipService : IMembershipService
  315. {
  316. public int MinPasswordLength
  317. {
  318. get { return 10; }
  319. }
  320. public bool ValidateUser(string userName, string password)
  321. {
  322. return (userName == "someUser" && password == "goodPassword");
  323. }
  324. public MembershipCreateStatus CreateUser(string userName, string password, string email)
  325. {
  326. if (userName == "duplicateUser")
  327. {
  328. return MembershipCreateStatus.DuplicateUserName;
  329. }
  330. // verify that values are what we expected
  331. Assert.AreEqual("goodPassword", password);
  332. Assert.AreEqual("goodEmail", email);
  333. return MembershipCreateStatus.Success;
  334. }
  335. public bool ChangePassword(string userName, string oldPassword, string newPassword)
  336. {
  337. return (userName == "someUser" && oldPassword == "goodOldPassword" && newPassword == "goodNewPassword");
  338. }
  339. }
  340. }
  341. }