Допустим, я создал пустое приложение asp.net core 2.1 и добавил [Authorize]
на экшн About.
Как мне в юнит-тестах проверить, что страница Index отдаётся незалогиненным пользователям, а страница About стала требовать авторизацию?
Для того, чтобы проверить что страница доступна под незалогиненным пользователем достаточно убедиться, что код ответа будет 2хх:
[TestFixture]
public class HomeControllerTest
{
public HomeControllerTest()
{
this._factory = new CustomWebApplicationFactory<Startup>();
}
private readonly WebApplicationFactory<Startup> _factory;
[Test]
public async Task IndexPage_ForNonLoggedUser_ReturnsPageContent()
{
// Arrange
var client = this._factory.CreateClient();
// Act
var response = await client.GetAsync("/");
// Assert
response.EnsureSuccessStatusCode(); // Status Code 200-299
}
}
А вот проверка того, что страница доступна под авторизованным пользователем более сложная: необходим в клиенте выключить автоматический переход по редиректам и проверить, что нас редиректит на страницу авторизации.
[Test]
public async Task AboutPage_ForNonLoggedUser_RedirectsToLoginPages()
{
// Arrange
var client = this._factory.CreateClient(
new WebApplicationFactoryClientOptions
{
AllowAutoRedirect = false
});
// Act
var response = await client.GetAsync("/Home/About");
// Assert
Assert.AreEqual(HttpStatusCode.Redirect, response.StatusCode);
StringAssert.StartsWith("http://localhost/Identity/Account/Login", response.Headers.Location.OriginalString);
}
(Я видел в сети примеры, в которых проверялся ответ 403, возможно это работало для более ранних версий asp.net core, у меня на 2.1 требуется именно проверка редиректа)
Ровно такие же тесты необходимы и для Razor Page, в них нет ничего отличного от подобных проверок.
В принципе, подробное описание есть в документации, а также там приведена ссылка на тестовое приложение с xUnit.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Поделитесь опытом, кто что использует для чистки enum? Со временем, обычно накапливается много значений, часть из которых уже отсутствуют в кодеОсобенно...
Я пишу CMS, мне нужно реализовать авто создание subdomain и директорию к ней