Created
June 20, 2020 11:24
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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