using Microsoft.AspNetCore.Mvc.Testing; using Newtonsoft.Json; using System; using System.Net.Http; using System.Threading.Tasks; using Timeline.Entities.Http; namespace Timeline.Tests.Helpers.Authentication { public static class AuthenticationExtensions { private const string CreateTokenUrl = "/token/create"; public static async Task CreateUserTokenAsync(this HttpClient client, string username, string password) { var response = await client.PostAsJsonAsync(CreateTokenUrl, new CreateTokenRequest { Username = username, Password = password }); var result = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); return result; } public static async Task CreateClientWithUser(this WebApplicationFactory factory, string username, string password) where T : class { var client = factory.CreateDefaultClient(); var token = (await client.CreateUserTokenAsync(username, password)).Token; client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); return client; } public static async Task SendWithAuthenticationAsync(this HttpClient client, string token, string path, Action requestBuilder = null) { var request = new HttpRequestMessage { RequestUri = new Uri(client.BaseAddress, path), }; request.Headers.Add("Authorization", "Bearer " + token); requestBuilder?.Invoke(request); return await client.SendAsync(request); } } }