Fix Null Warnings (#874)

* Fixing null warnings

* Fix null warnings
Fix other compiler warnings
This commit is contained in:
Steve Smith
2023-03-20 11:52:14 -04:00
committed by GitHub
parent a2ebd3fe26
commit d2412a84a9
38 changed files with 400 additions and 285 deletions

View File

@@ -7,29 +7,28 @@ using Microsoft.eShopWeb.ApplicationCore.Constants;
using Microsoft.eShopWeb.PublicApi.AuthEndpoints;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace PublicApiIntegrationTests.AuthEndpoints
{
[TestClass]
public class AuthenticateEndpoint
{
[TestMethod]
[DataRow("demouser@microsoft.com", AuthorizationConstants.DEFAULT_PASSWORD, true)]
[DataRow("demouser@microsoft.com", "badpassword", false)]
[DataRow("baduser@microsoft.com", "badpassword", false)]
public async Task ReturnsExpectedResultGivenCredentials(string testUsername, string testPassword, bool expectedResult)
{
var request = new AuthenticateRequest()
{
Username = testUsername,
Password = testPassword
};
var jsonContent = new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json");
var response = await ProgramTest.NewClient.PostAsync("api/authenticate", jsonContent);
response.EnsureSuccessStatusCode();
var stringResponse = await response.Content.ReadAsStringAsync();
var model = stringResponse.FromJson<AuthenticateResponse>();
namespace PublicApiIntegrationTests.AuthEndpoints;
Assert.AreEqual(expectedResult, model.Result);
}
[TestClass]
public class AuthenticateEndpoint
{
[TestMethod]
[DataRow("demouser@microsoft.com", AuthorizationConstants.DEFAULT_PASSWORD, true)]
[DataRow("demouser@microsoft.com", "badpassword", false)]
[DataRow("baduser@microsoft.com", "badpassword", false)]
public async Task ReturnsExpectedResultGivenCredentials(string testUsername, string testPassword, bool expectedResult)
{
var request = new AuthenticateRequest()
{
Username = testUsername,
Password = testPassword
};
var jsonContent = new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json");
var response = await ProgramTest.NewClient.PostAsync("api/authenticate", jsonContent);
response.EnsureSuccessStatusCode();
var stringResponse = await response.Content.ReadAsStringAsync();
var model = stringResponse.FromJson<AuthenticateResponse>();
Assert.AreEqual(expectedResult, model!.Result);
}
}

View File

@@ -4,29 +4,28 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Net;
using System.Threading.Tasks;
namespace PublicApiIntegrationTests.CatalogItemEndpoints
namespace PublicApiIntegrationTests.CatalogItemEndpoints;
[TestClass]
public class CatalogItemGetByIdEndpointTest
{
[TestClass]
public class CatalogItemGetByIdEndpointTest
[TestMethod]
public async Task ReturnsItemGivenValidId()
{
[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>();
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);
}
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");
[TestMethod]
public async Task ReturnsNotFoundGivenInvalidId()
{
var response = await ProgramTest.NewClient.GetAsync("api/catalog-items/0");
Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode);
}
Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode);
}
}

View File

@@ -8,66 +8,65 @@ using System.Net.Http;
using System.Net;
using System.Threading.Tasks;
namespace PublicApiIntegrationTests.CatalogItemEndpoints
namespace PublicApiIntegrationTests.CatalogItemEndpoints;
[TestClass]
public class CatalogItemListPagedEndpoint
{
[TestClass]
public class CatalogItemListPagedEndpoint
[TestMethod]
public async Task ReturnsFirst10CatalogItems()
{
[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());
}
[DataTestMethod]
[DataRow("catalog-items")]
[DataRow("catalog-brands")]
[DataRow("catalog-types")]
[DataRow("catalog-items/1")]
public async Task SuccessFullMutipleParallelCall(string endpointName)
{
var client = ProgramTest.NewClient;
var tasks = new List<Task<HttpResponseMessage>>();
for (int i = 0; i < 100; i++)
{
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());
var task = client.GetAsync($"/api/{endpointName}");
tasks.Add(task);
}
await Task.WhenAll(tasks.ToList());
var totalKO = tasks.Count(t => t.Result.StatusCode != HttpStatusCode.OK);
[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());
}
[DataTestMethod]
[DataRow("catalog-items")]
[DataRow("catalog-brands")]
[DataRow("catalog-types")]
[DataRow("catalog-items/1")]
public async Task SuccessFullMutipleParallelCall(string endpointName)
{
var client = ProgramTest.NewClient;
var tasks = new List<Task<HttpResponseMessage>>();
for (int i = 0; i < 100; i++)
{
var task = client.GetAsync($"/api/{endpointName}");
tasks.Add(task);
}
await Task.WhenAll(tasks.ToList());
var totalKO = tasks.Count(t => t.Result.StatusCode != HttpStatusCode.OK);
Assert.AreEqual(0, totalKO);
}
Assert.AreEqual(0, totalKO);
}
}

View File

@@ -8,62 +8,61 @@ using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace PublicApiIntegrationTests.AuthEndpoints
namespace PublicApiIntegrationTests.AuthEndpoints;
[TestClass]
public class CreateCatalogItemEndpointTest
{
[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()
{
private int _testBrandId = 1;
private int _testTypeId = 2;
private string _testDescription = "test description";
private string _testName = "test name";
private decimal _testPrice = 1.23m;
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 ReturnsNotAuthorizedGivenNormalUserToken()
[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()
{
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);
CatalogBrandId = _testBrandId,
CatalogTypeId = _testTypeId,
Description = _testDescription,
Name = _testName,
Price = _testPrice
};
var jsonContent = new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json");
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;
}
return jsonContent;
}
}

View File

@@ -5,34 +5,33 @@ using System.Net;
using System.Net.Http.Headers;
using System.Threading.Tasks;
namespace PublicApiIntegrationTests.CatalogItemEndpoints
namespace PublicApiIntegrationTests.CatalogItemEndpoints;
[TestClass]
public class DeleteCatalogItemEndpointTest
{
[TestClass]
public class DeleteCatalogItemEndpointTest
[TestMethod]
public async Task ReturnsSuccessGivenValidIdAndAdminUserToken()
{
[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>();
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);
}
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");
[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);
}
Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode);
}
}

View File

@@ -2,26 +2,25 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Net.Http;
namespace PublicApiIntegrationTests
namespace PublicApiIntegrationTests;
[TestClass]
public class ProgramTest
{
[TestClass]
public class ProgramTest
private static WebApplicationFactory<Program> _application = new();
public static HttpClient NewClient
{
private static WebApplicationFactory<Program> _application;
public static HttpClient NewClient
get
{
get
{
return _application.CreateClient();
}
}
[AssemblyInitialize]
public static void AssemblyInitialize(TestContext _)
{
_application = new WebApplicationFactory<Program>();
return _application.CreateClient();
}
}
[AssemblyInitialize]
public static void AssemblyInitialize(TestContext _)
{
_application = new WebApplicationFactory<Program>();
}
}