Created
July 13, 2021 21:38
-
-
Save AbrantesMar/041df371255f78898ea970537f0c5179 to your computer and use it in GitHub Desktop.
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
public abstract class Results<T, TBuilder> where T : class | |
where TBuilder : Results<T, TBuilder> | |
{ | |
public HttpStatusCode StatusCode; | |
public IEnumerable<T> ResultList; | |
public T Result; | |
protected abstract TBuilder BuilderInstance { get; } | |
protected Context context { get; private set; } | |
protected long testName = DateTime.Now.Ticks; | |
protected readonly string url; | |
protected Results(string url) | |
{ | |
this.url = url; | |
} | |
public TBuilder WithContext(Context context) | |
{ | |
this.context = context; | |
return (TBuilder)this; | |
} | |
public TBuilder Post(TestContext testContext, string api = null) | |
{ | |
var urlParams = UrlWithParams(api); | |
var response = testContext.Post(urlParams, Result).Result; | |
StatusCode = response.StatusCode; | |
if (HttpStatusCode.OK.Equals(StatusCode) || HttpStatusCode.Created.Equals(StatusCode)) | |
{ | |
response.EnsureSuccessStatusCode(); | |
var result = response.Content.ReadAsAsync<T>().Result; | |
if (result != null) | |
{ | |
Result = result; | |
} | |
} | |
return (TBuilder)this; | |
} | |
public TBuilder Get(TestContext testContext, int id, string api = null) | |
{ | |
Get(testContext, id.ToString(), api); | |
return (TBuilder)this; | |
} | |
public TBuilder Get(TestContext testContext, string param, string api = null) | |
{ | |
var urlParams = UrlWithParams(api); | |
var response = testContext.Get($"{urlParams}/{param}").Result; | |
StatusCode = response.StatusCode; | |
if (HttpStatusCode.OK.Equals(StatusCode)) | |
{ | |
response.EnsureSuccessStatusCode(); | |
var result = response.Content.ReadAsAsync<T>().Result; | |
if(result != null) | |
{ | |
Result = result; | |
} | |
} | |
return (TBuilder)this; | |
} | |
public TBuilder GetPagination(TestContext testContext, int? page, int? limit, string api = null) | |
{ | |
var urlParams = UrlWithParams(api); | |
new StringBuilder().Append($"{urlParams}/?"); | |
var pageValue = page ?? 1; | |
new StringBuilder().Append("page=" + pageValue); | |
var limitValue = limit ?? 5; | |
new StringBuilder().Append("&limit=" + limitValue); | |
var response = testContext.Get(new StringBuilder().ToString()).Result; | |
StatusCode = response.StatusCode; | |
if (HttpStatusCode.OK.Equals(StatusCode)) | |
{ | |
response.EnsureSuccessStatusCode(); | |
ResultList = response.Content.ReadAsAsync<List<T>>().Result; | |
} | |
return (TBuilder)this; | |
} | |
public TBuilder Put(TestContext testContext, int id, T entity, string api = null) | |
{ | |
var urlParams = UrlWithParams(api); | |
var response = testContext.Put($"{urlParams}/{id}", entity).Result; | |
StatusCode = response.StatusCode; | |
if (HttpStatusCode.OK.Equals(StatusCode)) | |
{ | |
response.EnsureSuccessStatusCode(); | |
Result = response.Content.ReadAsAsync<T>().Result; | |
} | |
return (TBuilder)this; | |
} | |
public TBuilder Delete(TestContext testContext, int id, string api = null) | |
{ | |
var urlParams = UrlWithParams(api); | |
var responseDelete = testContext.Delete($"{urlParams}/{id}").Result; | |
StatusCode = responseDelete.StatusCode; | |
if (HttpStatusCode.OK.Equals(StatusCode)) | |
{ | |
responseDelete.EnsureSuccessStatusCode(); | |
} | |
return (TBuilder)this; | |
} | |
protected string UrlWithParams(string api) | |
{ | |
return !string.IsNullOrEmpty(api) ? $"{this.url}/{api}" : $"{this.url}"; | |
} | |
public Results<T, TBuilder> Build() => this; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment