-
Notifications
You must be signed in to change notification settings - Fork 0
/
LoginTest.cs
114 lines (98 loc) · 3.73 KB
/
LoginTest.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Moq;
using SmokeTestLogin.Logic.Models;
using SmokeTestLogin.Logic.Services.Interfaces;
using SmokeTestLogin.Web.Controllers;
using TanvirArjel.EFCore.GenericRepository;
// ReSharper disable StringLiteralTypo
namespace SmokeTestLogin.Test;
[TestClass]
public class LoginTest
{
private readonly ControllerContext _controllerContext;
private readonly ILogger<LoginController> _logger;
private readonly Mock<ILoginService> _loginService;
private readonly Mock<IUserService> _userService;
public LoginTest()
{
// setup request
Mock<HttpRequest> httpRequest = new();
httpRequest.Setup(x => x.Scheme).Returns("http");
httpRequest
.Setup(x => x.Host)
.Returns(HostString.FromUriComponent("https://localhost:7296"));
httpRequest.Setup(x => x.PathBase).Returns(PathString.FromUriComponent("/Home"));
var httpCxt = Mock.Of<HttpContext>(x => x.Request == httpRequest.Object);
_logger = new Mock<ILogger<LoginController>>().Object;
_loginService = new Mock<ILoginService>();
_userService = new Mock<IUserService>();
_controllerContext = new ControllerContext { HttpContext = httpCxt };
}
[TestMethod]
public void Test_AuthorizeAttribute_Redirect_When_Not_Login()
{
_userService
.Setup(x => x.GetUsersAsync(0, -1, ""))
.ReturnsAsync(
new PaginatedList<UserInfo>(
[
new()
{
Id = 1,
Name = "Asdsa",
Password = "asdasasdfas",
UserName = "qqq",
IsActivated = true
}
],
1,
1,
10
)
);
var homeController = new HomeController(
new Mock<ILogger<HomeController>>().Object,
_userService.Object
)
{
ControllerContext = _controllerContext
};
// now test
const string expected = "Index"; // expect viewName Index in Home
var actual = homeController.Index() as ViewResult;
Assert.AreNotEqual(expected, actual!.ViewName); // Got other view as Authorize attribute redirect result, working
}
[TestMethod]
public async Task Test_Login_Success()
{
//setup service behavior
var model = new UserModel { UserName = "hai", Password = "Hai@1234" }; // with this data should true
_loginService.Setup(x => x.LoginAsync(model)).Returns(Task.FromResult(true));
// setup actual Controller
var loginController = new LoginController(_loginService.Object, _logger)
{
ControllerContext = _controllerContext
};
// begin test
var response = await loginController.LoginForm(model) as RedirectToActionResult;
// login success redirect to Index view of Home
Assert.AreEqual("Index", response!.ActionName);
}
[TestMethod]
public async Task Test_Logout_User()
{
// setup service behavior
_loginService.Setup(x => x.LogoutAsync()).Returns(Task.CompletedTask);
// setup actual Controller
var loginController = new LoginController(_loginService.Object, _logger)
{
ControllerContext = _controllerContext
};
// begin test
var result = await loginController.Logout() as RedirectToActionResult;
// should get redirect to LoginForm to login
Assert.IsTrue(result!.ActionName == "LoginForm");
}
}