File: Pages\Index.cs
Web Access
Project: src\src\Identity\test\Identity.FunctionalTests\Microsoft.AspNetCore.Identity.FunctionalTests.csproj (Microsoft.AspNetCore.Identity.FunctionalTests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Net.Http;
using AngleSharp.Dom.Html;
using Microsoft.AspNetCore.Identity.FunctionalTests.Account;
 
namespace Microsoft.AspNetCore.Identity.FunctionalTests;
 
public class Index : DefaultUIPage
{
    private readonly IHtmlAnchorElement _registerLink;
    private readonly IHtmlAnchorElement _loginLink;
    private readonly IHtmlAnchorElement _manageLink;
    public static readonly string Path = "/";
 
    public Index(
        HttpClient client,
        IHtmlDocument index,
        DefaultUIContext context)
        : base(client, index, context)
    {
        if (!Context.UserAuthenticated)
        {
            _registerLink = HtmlAssert.HasLink("#register", Document);
            _loginLink = HtmlAssert.HasLink("#login", Document);
        }
        else
        {
            _manageLink = HtmlAssert.HasLink("#manage", Document);
        }
    }
 
    public static async Task<Index> CreateAsync(HttpClient client, DefaultUIContext context = null)
    {
        var goToIndex = await client.GetAsync("/");
        var index = await ResponseAssert.IsHtmlDocumentAsync(goToIndex);
 
        return new Index(client, index, context ?? new DefaultUIContext());
    }
 
    public async Task<Register> ClickRegisterLinkAsync()
    {
        Assert.False(Context.UserAuthenticated);
 
        var goToRegister = await Client.GetAsync(_registerLink.Href);
        var register = await ResponseAssert.IsHtmlDocumentAsync(goToRegister);
 
        return new Register(Client, register, Context);
    }
 
    public async Task<Login> ClickLoginLinkAsync()
    {
        Assert.False(Context.UserAuthenticated);
 
        var goToLogin = await Client.GetAsync(_loginLink.Href);
        var login = await ResponseAssert.IsHtmlDocumentAsync(goToLogin);
 
        return new Login(Client, login, Context);
    }
 
    internal async Task<Account.Manage.Index> ClickManageLinkAsync()
    {
        Assert.True(Context.UserAuthenticated);
 
        var goToManage = await Client.GetAsync(_manageLink.Href);
        var manage = await ResponseAssert.IsHtmlDocumentAsync(goToManage);
 
        return new Account.Manage.Index(Client, manage, Context);
    }
 
    internal async Task<Account.Manage.Index> ClickManageLinkWithExternalLoginAsync()
    {
        Assert.True(Context.UserAuthenticated);
 
        var goToManage = await Client.GetAsync(_manageLink.Href);
        var manage = await ResponseAssert.IsHtmlDocumentAsync(goToManage);
 
        return new Account.Manage.Index(Client, manage, Context
            .WithSocialLoginEnabled()
            .WithSocialLoginProvider());
    }
}