// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using AngleSharp.Dom.Html; using Xunit; namespace AuthSamples.FunctionalTests { public static class HttpClientExtensions { // Copied from Identity functionals public static Task SendAsync( this HttpClient client, IHtmlFormElement form, IEnumerable> formValues) { var submitElement = Assert.Single(form.QuerySelectorAll("[type=submit]")); var submitButton = Assert.IsAssignableFrom(submitElement); return client.SendAsync(form, submitButton, formValues); } // Copied from Identity functionals public static Task SendAsync( this HttpClient client, IHtmlFormElement form, IHtmlElement submitButton, IEnumerable> formValues) { foreach (var kvp in formValues) { var element = Assert.IsAssignableFrom(form[kvp.Key]); element.Value = kvp.Value; } var submit = form.GetSubmission(submitButton); var target = (Uri)submit.Target; if (submitButton.HasAttribute("formaction")) { var formaction = submitButton.GetAttribute("formaction"); target = new Uri(formaction, UriKind.Relative); } var submision = new HttpRequestMessage(new HttpMethod(submit.Method.ToString()), target) { Content = new StreamContent(submit.Body) }; foreach (var header in submit.Headers) { if (!submision.Headers.TryAddWithoutValidation(header.Key, header.Value)) { submision.Content.Headers.TryAddWithoutValidation(header.Key, header.Value); } } return client.SendAsync(submision); } } }