Skip to content

Instantly share code, notes, and snippets.

@palmerandy
Created June 20, 2020 11:24
Show Gist options
  • Save palmerandy/0f6c396fcd51fb89b4b98aa04ba120ae to your computer and use it in GitHub Desktop.
Save palmerandy/0f6c396fcd51fb89b4b98aa04ba120ae to your computer and use it in GitHub Desktop.
C# End-to-end automated integration testing for Web API. More infromation available at https://andypalmer.dev/end-to-end-testing-mvc-signalr-api
using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
public class ApiHttpClientHelper
{
public HttpClient Client { get; }
public ApiHttpClientHelper(HttpClient httpClient)
{
Client = httpClient;
}
public async Task<string> LoginHttpRequest()
{
string clientId = Environment.ClientId;
string clientSecret = Environment.ClientSecret;
var data = new StringContent($"grant_type=password&username={Environment.UserName}&password={Environment.Password}");
var authToken = Encoding.ASCII.GetBytes($"{clientId}:{clientSecret}");
Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(authToken));
var response = await Client.PostAsync($"{Environment.APIUrl}/token", data);
string result = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
var loginResonse = JsonConvert.DeserializeObject<LoginResponse>(result);
return loginResonse.access_token;
}
else
{
throw new Exception(result);
}
}
public async Task<HttpResponseMessage> PostHttpRequest(string url, string data, string token = null)
{
if (string.IsNullOrEmpty(token))
{
token = await LoginHttpRequest();
}
Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", token);
var response = await Client.PostAsync(url, new StringContent(data, Encoding.UTF8, "application/json"));
return response;
}
public async Task<HttpResponseMessage> PutHttpRequest(string url, string data, string token = null)
{
if (string.IsNullOrEmpty(token))
{
token = await LoginHttpRequest();
}
Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", token);
var response = await Client.PutAsync(url, new StringContent(data, Encoding.UTF8, "application/json"));
return response;
}
public async Task<HttpResponseMessage> PatchHttpRequest(string url, string data, string token = null)
{
if (string.IsNullOrEmpty(token))
{
token = await LoginHttpRequest();
}
Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", token);
var request = new HttpRequestMessage(new HttpMethod("PATCH"), url)
{
Content = new StringContent(data, Encoding.UTF8, "application/json")
};
var response = await Client.SendAsync(request);
return response;
}
public async Task<HttpResponseMessage> GetHttpRequest(string url, string token = null)
{
if (string.IsNullOrEmpty(token))
{
token = await LoginHttpRequest();
}
Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", token);
var request = new HttpRequestMessage(new HttpMethod("GET"), url);
var response = await Client.SendAsync(request);
return response;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment