您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

AuthControllerTest.cs 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. using AutoMapper;
  2. using Diligent.WebAPI.Business.MappingProfiles;
  3. using Diligent.WebAPI.Contracts.DTOs;
  4. using Diligent.WebAPI.Contracts.DTOs.Auth;
  5. using Diligent.WebAPI.Contracts.DTOs.User;
  6. using Diligent.WebAPI.Contracts.Models;
  7. using Diligent.WebAPI.Data.Entities;
  8. namespace Diligent.WebAPI.Tests.Controllers
  9. {
  10. public class AuthControllerTest
  11. {
  12. private IAuthenticationService _service = Substitute.For<IAuthenticationService>();
  13. public AuthControllerTest()
  14. {
  15. }
  16. [Fact]
  17. public async Task ForgotPassword_ShouldReturn200OK_IfUserExistsAndMailIsSent()
  18. {
  19. _service.GetForgotPasswordUrlAsync("somemail@dilig.net").Returns(new ServiceResponseDTO<object>
  20. {
  21. Data = new { code = "token", email = "somemail@dilig.net" }
  22. });
  23. AuthenticationsController controller = new(_service);
  24. var result = await controller.ForgotPassword("somemail@dilig.net");
  25. (result as OkObjectResult).StatusCode.Should().Be(200);
  26. }
  27. [Fact]
  28. public async Task ForgotPassword_ShouldReturn400BadRequest_IfUserNotFound()
  29. {
  30. _service.GetForgotPasswordUrlAsync("somemail@dilig.net").Returns(new ServiceResponseDTO<object>
  31. {
  32. IsError = true,
  33. ErrorMessage = "Email did not find."
  34. });
  35. AuthenticationsController controller = new(_service);
  36. var result = await controller.ForgotPassword("somemail@dilig.net");
  37. (result as BadRequestObjectResult).StatusCode.Should().Be(400);
  38. }
  39. [Fact]
  40. public async Task ResetPassword_ShouldReturn200OK_IfUserExistsAndMailIsSent()
  41. {
  42. _service.PasswordResetAsync("somemail@dilig.net", "code", "NewPass123@").Returns(new ServiceResponseDTO<object>
  43. {
  44. Data = true
  45. });
  46. AuthenticationsController controller = new(_service);
  47. var result = await controller.ResetPassword(new Contracts.Models.ResetPasswordModel
  48. {
  49. Email = "somemail@dilig.net",
  50. Code = "code",
  51. Password = "NewPass123@"
  52. });
  53. (result as OkObjectResult).StatusCode.Should().Be(200);
  54. }
  55. [Fact]
  56. public async Task ResetPassword_ShouldReturn400BadRequest_IfUserNotFoundOrDbError()
  57. {
  58. _service.PasswordResetAsync("somemail@dilig.net", "code", "NewPass123@").Returns(new ServiceResponseDTO<object>
  59. {
  60. IsError = true,
  61. ErrorMessage = "Email did not find."
  62. });
  63. AuthenticationsController controller = new(_service);
  64. var result = await controller.ResetPassword(new Contracts.Models.ResetPasswordModel
  65. {
  66. Email = "somemail@dilig.net",
  67. Code = "code",
  68. Password = "NewPass123@"
  69. });
  70. (result as BadRequestObjectResult).StatusCode.Should().Be(400);
  71. }
  72. [Fact]
  73. public async Task Authenticate_ShouldReturn400BadRequest_IfUserCredentialsInValid()
  74. {
  75. _service.Authenticate(Arg.Any<AuthenticateRequestDto>()).Returns(new ServiceResponseDTO<AuthenticateResponseDto>
  76. {
  77. IsError = true,
  78. ErrorMessage = "Username is not valid"
  79. });
  80. AuthenticationsController controller = new(_service);
  81. var result = await controller.Authenticate(new AuthenticateRequestDto
  82. {
  83. Username = "user",
  84. Password = "NewPass123@"
  85. });
  86. (result as BadRequestObjectResult).StatusCode.Should().Be(400);
  87. }
  88. [Fact]
  89. public async Task Authenticate_ShouldReturn200OK_IfUserCredentialsValid()
  90. {
  91. _service.Authenticate(Arg.Any<AuthenticateRequestDto>()).Returns(new ServiceResponseDTO<AuthenticateResponseDto>
  92. {
  93. Data = new AuthenticateResponseDto
  94. {
  95. Token = "token",
  96. RefreshToken = "refreshToken",
  97. Id = 1,
  98. FirstName = "First",
  99. LastName = "Last",
  100. Username = "user"
  101. }
  102. });
  103. AuthenticationsController controller = new(_service);
  104. var result = await controller.Authenticate(new AuthenticateRequestDto
  105. {
  106. Username = "user",
  107. Password = "NewPass123@"
  108. });
  109. (result as OkObjectResult).StatusCode.Should().Be(200);
  110. }
  111. [Fact]
  112. public async Task RefreshToken_ShouldReturn400BadRequest_IfErrorOccured()
  113. {
  114. _service.RefreshTokenAsync(Arg.Any<RefreshTokenRequestDto>()).Returns(new RefreshTokenResultDto
  115. {
  116. Error = "Token is not associated with any user."
  117. });
  118. AuthenticationsController controller = new(_service);
  119. var result = await controller.RefreshToken(new RefreshTokenRequestDto
  120. {
  121. RefreshToken = "refresh token",
  122. Token = "token",
  123. });
  124. (result as BadRequestObjectResult).StatusCode.Should().Be(400);
  125. }
  126. [Fact]
  127. public async Task RefreshToken_ShouldReturn200OK_IfValidTokens()
  128. {
  129. _service.RefreshTokenAsync(Arg.Any<RefreshTokenRequestDto>()).Returns(new RefreshTokenResultDto
  130. {
  131. Data = new AuthenticateResponseDto
  132. {
  133. Id = 1,
  134. FirstName = "FirstName",
  135. LastName = "LastName",
  136. Username = "UserName",
  137. Token = "token",
  138. RefreshToken = "token"
  139. }
  140. });
  141. AuthenticationsController controller = new(_service);
  142. var result = await controller.RefreshToken(new RefreshTokenRequestDto
  143. {
  144. RefreshToken = "refresh token",
  145. Token = "token",
  146. });
  147. (result as OkObjectResult).StatusCode.Should().Be(200);
  148. }
  149. [Fact]
  150. public async Task Logout_ShouldReturn400BadRequest_IfErrorOccured()
  151. {
  152. _service.DeleteRefreshToken(Arg.Any<int>()).Returns(new ServiceResponseDTO<string>
  153. {
  154. IsError = true,
  155. ErrorMessage = "There is no refresh token for user"
  156. });
  157. AuthenticationsController controller = new(_service);
  158. var result = await controller.Logout(1);
  159. (result as BadRequestObjectResult).StatusCode.Should().Be(400);
  160. }
  161. [Fact]
  162. public async Task Logout_ShouldReturn200OK_IfValidTokenExists()
  163. {
  164. _service.DeleteRefreshToken(Arg.Any<int>()).Returns(new ServiceResponseDTO<string>
  165. {
  166. Data = "sdsd",
  167. IsError = false,
  168. });
  169. AuthenticationsController controller = new(_service);
  170. var result = await controller.Logout(1);
  171. var res = result as StatusCodeResult;
  172. Assert.NotNull(res);
  173. res.StatusCode.Should().Be(200);
  174. }
  175. [Fact]
  176. public async Task AuthenticateGoogle_ShouldReturn400BadRequest_IfUserCredentialsInValid()
  177. {
  178. _service.Authenticate(Arg.Any<GoogleApiModel>()).Returns(new ServiceResponseDTO<AuthenticateResponseDto>
  179. {
  180. IsError = true,
  181. ErrorMessage = "Invalid Google Api Token"
  182. });
  183. AuthenticationsController controller = new(_service);
  184. var result = await controller.GoogleLogin(new GoogleApiModel
  185. {
  186. Token = "Token",
  187. User = new GoogleApiTokenInfo
  188. {
  189. email = "mail@dilig.net"
  190. },
  191. });
  192. (result as BadRequestObjectResult).StatusCode.Should().Be(400);
  193. }
  194. [Fact]
  195. public async Task AuthenticateGoogle_ShouldReturn200OK_IfUserCredentialsValid()
  196. {
  197. _service.Authenticate(Arg.Any<GoogleApiModel>()).Returns(new ServiceResponseDTO<AuthenticateResponseDto>
  198. {
  199. Data = new AuthenticateResponseDto
  200. {
  201. Token = "token",
  202. RefreshToken = "refreshToken",
  203. Id = 1,
  204. FirstName = "First",
  205. LastName = "Last",
  206. Username = "user"
  207. }
  208. });
  209. AuthenticationsController controller = new(_service);
  210. var result = await controller.GoogleLogin(new GoogleApiModel
  211. {
  212. Token = "Token",
  213. User = new GoogleApiTokenInfo
  214. {
  215. email = "mail@dilig.net"
  216. },
  217. });
  218. (result as OkObjectResult).StatusCode.Should().Be(200);
  219. }
  220. [Fact]
  221. public async Task Register_ShouldReturn400BadRequest_IfUserModelIsNotValid()
  222. {
  223. _service.Register(Arg.Any<RegisterDTO>()).Returns(new ServiceResponseDTO<object>
  224. {
  225. IsError = true,
  226. ErrorMessage = "User not invited."
  227. });
  228. AuthenticationsController controller = new(_service);
  229. var result = await controller.Register(new RegisterDTO
  230. {
  231. Confirm = "Password123@",
  232. Password = "Password123@",
  233. Token = "token",
  234. LinkedIn = "link",
  235. Email = "some.some@dilig.net",
  236. Phone = "0628264606",
  237. Position = "Senior Dev"
  238. });
  239. (result as BadRequestObjectResult).StatusCode.Should().Be(400);
  240. }
  241. [Fact]
  242. public async Task Register_ShouldReturn200OK_IfUserModelIsValid()
  243. {
  244. _service.Register(Arg.Any<RegisterDTO>()).Returns(new ServiceResponseDTO<object> { Data = true });
  245. AuthenticationsController controller = new(_service);
  246. var result = await controller.Register(new RegisterDTO
  247. {
  248. Confirm = "Password123@",
  249. Password = "Password123@",
  250. Token = "token",
  251. LinkedIn = "link",
  252. Email = "some.some@dilig.net",
  253. Phone = "0628264606",
  254. Position = "Senior Dev"
  255. });
  256. (result as OkObjectResult).StatusCode.Should().Be(200);
  257. }
  258. }
  259. }