Feature/migrate to minimal api (#662)
* migrate from classic controller to minimal api * fix all PublicApi integration test * update all nuget package add forget project * fix pay now * Adapt readme use in memory database * undo AuthenticateEndpoint to use EndpointBaseAsync * Update README.md Co-authored-by: Steve Smith <steve@kentsmiths.com> Co-authored-by: Steve Smith <steve@kentsmiths.com>
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
using Microsoft.eShopWeb;
|
||||
using Microsoft.eShopWeb.PublicApi.CatalogItemEndpoints;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PublicApiIntegrationTests.CatalogItemEndpoints
|
||||
{
|
||||
[TestClass]
|
||||
public class CatalogItemGetByIdEndpointTest
|
||||
{
|
||||
[TestMethod]
|
||||
public async Task ReturnsItemGivenValidId()
|
||||
{
|
||||
var response = await ProgramTest.NewClient.GetAsync("api/catalog-items/5");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var stringResponse = await response.Content.ReadAsStringAsync();
|
||||
var model = stringResponse.FromJson<GetByIdCatalogItemResponse>();
|
||||
|
||||
Assert.AreEqual(5, model.CatalogItem.Id);
|
||||
Assert.AreEqual("Roslyn Red Sheet", model.CatalogItem.Name);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task ReturnsNotFoundGivenInvalidId()
|
||||
{
|
||||
var response = await ProgramTest.NewClient.GetAsync("api/catalog-items/0");
|
||||
|
||||
Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
using Microsoft.eShopWeb;
|
||||
using Microsoft.eShopWeb.PublicApi.CatalogItemEndpoints;
|
||||
using Microsoft.eShopWeb.Web.ViewModels;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PublicApiIntegrationTests.CatalogItemEndpoints
|
||||
{
|
||||
[TestClass]
|
||||
public class CatalogItemListPagedEndpoint
|
||||
{
|
||||
[TestMethod]
|
||||
public async Task ReturnsFirst10CatalogItems()
|
||||
{
|
||||
var client = ProgramTest.NewClient;
|
||||
var response = await client.GetAsync("/api/catalog-items?pageSize=10");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var stringResponse = await response.Content.ReadAsStringAsync();
|
||||
var model = stringResponse.FromJson<CatalogIndexViewModel>();
|
||||
|
||||
Assert.AreEqual(10, model.CatalogItems.Count());
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task ReturnsCorrectCatalogItemsGivenPageIndex1()
|
||||
{
|
||||
|
||||
var pageSize = 10;
|
||||
var pageIndex = 1;
|
||||
|
||||
var client = ProgramTest.NewClient;
|
||||
var response = await client.GetAsync($"/api/catalog-items");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var stringResponse = await response.Content.ReadAsStringAsync();
|
||||
var model = stringResponse.FromJson<ListPagedCatalogItemResponse>();
|
||||
var totalItem = model.CatalogItems.Count();
|
||||
|
||||
var response2 = await client.GetAsync($"/api/catalog-items?pageSize={pageSize}&pageIndex={pageIndex}");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var stringResponse2 = await response2.Content.ReadAsStringAsync();
|
||||
var model2 = stringResponse2.FromJson<ListPagedCatalogItemResponse>();
|
||||
|
||||
var totalExpected = totalItem - (pageSize * pageIndex);
|
||||
|
||||
Assert.AreEqual(totalExpected, model2.CatalogItems.Count());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
using BlazorShared.Models;
|
||||
using Microsoft.eShopWeb;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PublicApiIntegrationTests.AuthEndpoints
|
||||
{
|
||||
[TestClass]
|
||||
public class CreateCatalogItemEndpointTest
|
||||
{
|
||||
private int _testBrandId = 1;
|
||||
private int _testTypeId = 2;
|
||||
private string _testDescription = "test description";
|
||||
private string _testName = "test name";
|
||||
private decimal _testPrice = 1.23m;
|
||||
|
||||
|
||||
[TestMethod]
|
||||
public async Task ReturnsNotAuthorizedGivenNormalUserToken()
|
||||
{
|
||||
var jsonContent = GetValidNewItemJson();
|
||||
var token = ApiTokenHelper.GetNormalUserToken();
|
||||
var client = ProgramTest.NewClient;
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
|
||||
var response = await client.PostAsync("api/catalog-items", jsonContent);
|
||||
|
||||
Assert.AreEqual(HttpStatusCode.Forbidden, response.StatusCode);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task ReturnsSuccessGivenValidNewItemAndAdminUserToken()
|
||||
{
|
||||
var jsonContent = GetValidNewItemJson();
|
||||
var adminToken = ApiTokenHelper.GetAdminUserToken();
|
||||
var client = ProgramTest.NewClient;
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", adminToken);
|
||||
var response = await client.PostAsync("api/catalog-items", jsonContent);
|
||||
response.EnsureSuccessStatusCode();
|
||||
var stringResponse = await response.Content.ReadAsStringAsync();
|
||||
var model = stringResponse.FromJson<CreateCatalogItemResponse>();
|
||||
|
||||
Assert.AreEqual(_testBrandId, model.CatalogItem.CatalogBrandId);
|
||||
Assert.AreEqual(_testTypeId, model.CatalogItem.CatalogTypeId);
|
||||
Assert.AreEqual(_testDescription, model.CatalogItem.Description);
|
||||
Assert.AreEqual(_testName, model.CatalogItem.Name);
|
||||
Assert.AreEqual(_testPrice, model.CatalogItem.Price);
|
||||
}
|
||||
|
||||
private StringContent GetValidNewItemJson()
|
||||
{
|
||||
var request = new CreateCatalogItemRequest()
|
||||
{
|
||||
CatalogBrandId = _testBrandId,
|
||||
CatalogTypeId = _testTypeId,
|
||||
Description = _testDescription,
|
||||
Name = _testName,
|
||||
Price = _testPrice
|
||||
};
|
||||
var jsonContent = new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json");
|
||||
|
||||
return jsonContent;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using BlazorShared.Models;
|
||||
using Microsoft.eShopWeb;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using System.Net;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PublicApiIntegrationTests.CatalogItemEndpoints
|
||||
{
|
||||
[TestClass]
|
||||
public class DeleteCatalogItemEndpointTest
|
||||
{
|
||||
[TestMethod]
|
||||
public async Task ReturnsSuccessGivenValidIdAndAdminUserToken()
|
||||
{
|
||||
var adminToken = ApiTokenHelper.GetAdminUserToken();
|
||||
var client = ProgramTest.NewClient;
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", adminToken);
|
||||
var response = await client.DeleteAsync("api/catalog-items/12");
|
||||
response.EnsureSuccessStatusCode();
|
||||
var stringResponse = await response.Content.ReadAsStringAsync();
|
||||
var model = stringResponse.FromJson<DeleteCatalogItemResponse>();
|
||||
|
||||
Assert.AreEqual("Deleted", model.Status);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task ReturnsNotFoundGivenInvalidIdAndAdminUserToken()
|
||||
{
|
||||
var adminToken = ApiTokenHelper.GetAdminUserToken();
|
||||
var client = ProgramTest.NewClient;
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", adminToken);
|
||||
var response = await client.DeleteAsync("api/catalog-items/0");
|
||||
|
||||
Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user