Как написать тест XUNIT с контроллером - PullRequest
0 голосов
/ 02 мая 2018
  1. Когда я запускаю этот код, вводя правильное имя пользователя и пароль, он все равно дает мне 404. Когда я отлаживаю код, имя пользователя показывает ноль.

  2. Как написать модульный тест для проверки переменных внутри метода Login контроллера, для проверки того, что Identity равен Null или нет. (Заявления Identity добавлены)

Я написал тестовый код для состояния модели.

Я не понимаю, как запустить тестовый код. Было бы замечательно, если бы кто-то подтолкнул.

public class AccountsControllers : Controller 
{
    private readonly ApplicationContext appDbContext;
    private readonly IApplicationContext iappDbContext;
    private readonly UserManager<ApplicationUser> userManager;

    public AccountsControllers(ApplicationContext appDb 
        ,UserManager<ApplicationUser> um, 
        IApplicationContext iappdb)
    {
        userManager = um;
        appDbContext = appDb;
        iappDbContext = iappdb;
    }

    [Route("api/login")]
    [HttpPost
    public async Task<IActionResult> Login([FromBody]LoginViewModel credentials)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        var identity = await GetClaimsIdentity(credentials.UserName, credentials.Password);

        if (identity == null)
        {
            return BadRequest(Errors.AddErrorToModelState("login_failure", "Invalid username or password.", ModelState));
        }
        var response = new
        {
            id = identity.Claims.Single(c => c.Type == "id").Value,
            auth_token = await jwtFactory.GenerateEncodedToken(credentials.UserName, identity),
            expires_in = (int)jwtOptions.ValidFor.TotalSeconds
        };

        var json = JsonConvert.SerializeObject(response,serializerSettings);
        return new OkObjectResult(json);
    }

    public async Task<ClaimsIdentity> GetClaimsIdentity(string userName, 
                                                  string password)
    {

        if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(password))
        {
            // get the user to verifty
            var userToVerify = await userManager.FindByNameAsync(userName);


            if (userToVerify != null)
            {

                // check the credentials  
                if (await userManager.CheckPasswordAsync(userToVerify, password))
                {
                    return await Task.FromResult(jwtFactory.GenerateClaimsIdentity(userName, userToVerify.Id));
                }

            }

        }

        return await Task.FromResult<ClaimsIdentity>(null);
    }

}
...