diff --git a/Directory.Packages.props b/Directory.Packages.props
index 83170358..a45c8616 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -6,7 +6,7 @@
-
+
diff --git a/EstateManagementUI.BlazorFastIntegrationTests/Common/DockerHelper.cs b/EstateManagementUI.BlazorFastIntegrationTests/Common/DockerHelper.cs
index dac985f4..7ae5b5cb 100644
--- a/EstateManagementUI.BlazorFastIntegrationTests/Common/DockerHelper.cs
+++ b/EstateManagementUI.BlazorFastIntegrationTests/Common/DockerHelper.cs
@@ -27,7 +27,7 @@ public DockerHelper(LocalAppHost appHost)
public HttpClient TestHostHttpClient { get; }
public LocalTransactionProcessorClient TransactionProcessorClient { get; }
- public int GetHostPort(ContainerType containerType) => 5004;
+ public int GetHostPort(ContainerType containerType) => 8004;
public sealed class LocalTransactionProcessorClient
{
diff --git a/EstateManagementUI.BlazorFastIntegrationTests/Common/LocalAppHost.cs b/EstateManagementUI.BlazorFastIntegrationTests/Common/LocalAppHost.cs
index c350e63c..8afc45ba 100644
--- a/EstateManagementUI.BlazorFastIntegrationTests/Common/LocalAppHost.cs
+++ b/EstateManagementUI.BlazorFastIntegrationTests/Common/LocalAppHost.cs
@@ -17,7 +17,7 @@ public LocalAppHost(string projectPath)
_httpClient = new HttpClient();
}
- public Uri BaseUri { get; } = new("http://127.0.0.1:5004");
+ public Uri BaseUri { get; } = new("http://127.0.0.1:8004");
public async Task StartAsync()
{
@@ -38,10 +38,11 @@ public async Task StartAsync()
startInfo.ArgumentList.Add("run");
startInfo.ArgumentList.Add("--no-build");
+ startInfo.ArgumentList.Add("--no-launch-profile");
startInfo.ArgumentList.Add("--project");
startInfo.ArgumentList.Add(_projectPath);
- startInfo.Environment["ASPNETCORE_ENVIRONMENT"] = "Test";
+ startInfo.Environment["ASPNETCORE_ENVIRONMENT"] = "Development";
startInfo.Environment["AppSettings__TestMode"] = "BackedByTestDataStore";
startInfo.Environment["ASPNETCORE_URLS"] = BaseUri.ToString();
diff --git a/EstateManagementUI.BlazorFastIntegrationTests/Common/ReportingPageHelper.cs b/EstateManagementUI.BlazorFastIntegrationTests/Common/ReportingPageHelper.cs
index f8e03cf6..2c82f265 100644
--- a/EstateManagementUI.BlazorFastIntegrationTests/Common/ReportingPageHelper.cs
+++ b/EstateManagementUI.BlazorFastIntegrationTests/Common/ReportingPageHelper.cs
@@ -360,7 +360,7 @@ private async Task AssertHeadingVisibleAsync(string heading)
private string ResolveBaseUrl()
{
- return "http://127.0.0.1:5004";
+ return "http://127.0.0.1:8004";
}
private static bool IsMoneyLabel(string label)
diff --git a/EstateManagementUI.BlazorFastIntegrationTests/appsettings.json b/EstateManagementUI.BlazorFastIntegrationTests/appsettings.json
index df1a82f9..7b9069cf 100644
--- a/EstateManagementUI.BlazorFastIntegrationTests/appsettings.json
+++ b/EstateManagementUI.BlazorFastIntegrationTests/appsettings.json
@@ -1,6 +1,6 @@
{
"TestSettings": {
- "BaseUrl": "http://127.0.0.1:5004",
+ "BaseUrl": "http://127.0.0.1:8004",
"Browser": "Chrome",
"Headless": false,
"DefaultTimeout": 30000
diff --git a/EstateManagementUI.BlazorServer.Tests/EstateManagementUI.BlazorServer.Tests.csproj b/EstateManagementUI.BlazorServer.Tests/EstateManagementUI.BlazorServer.Tests.csproj
index f3084d9d..e03d1aac 100644
--- a/EstateManagementUI.BlazorServer.Tests/EstateManagementUI.BlazorServer.Tests.csproj
+++ b/EstateManagementUI.BlazorServer.Tests/EstateManagementUI.BlazorServer.Tests.csproj
@@ -15,7 +15,7 @@
-
+
diff --git a/EstateManagementUI.BlazorServer.Tests/Pages/BaseTest.cs b/EstateManagementUI.BlazorServer.Tests/Pages/BaseTest.cs
index 917ead3a..97eaa553 100644
--- a/EstateManagementUI.BlazorServer.Tests/Pages/BaseTest.cs
+++ b/EstateManagementUI.BlazorServer.Tests/Pages/BaseTest.cs
@@ -12,7 +12,7 @@
using Microsoft.Extensions.DependencyInjection;
using Imposter.Abstractions;
using SimpleResults;
-using TestContext = Bunit.TestContext;
+using TestContext = Bunit.BunitContext;
namespace EstateManagementUI.BlazorServer.Tests.Pages;
@@ -87,7 +87,7 @@ protected BaseTest() {
parameters => parameters.Get(p => p.ChildContent));
var claims = new[] { new Claim(ClaimTypes.Role, "Estate"), new Claim("estateId", Guid.NewGuid().ToString()), new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", "EstateUser") };
- this.AddTestAuthorization().SetClaims(claims);
+ this.AddAuthorization().SetClaims(claims);
}
protected readonly IMediatorImposter _mockMediator;
diff --git a/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsEditPageTests.cs b/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsEditPageTests.cs
index ba7c3485..7162b865 100644
--- a/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsEditPageTests.cs
+++ b/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsEditPageTests.cs
@@ -34,7 +34,7 @@ public void ContractsEdit_RendersCorrectly()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
// Assert
@@ -58,7 +58,7 @@ public void ContractsEdit_DisplaysContractDetails()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
@@ -84,7 +84,7 @@ public void ContractsEdit_HasCorrectPageTitle()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
// Assert
@@ -109,12 +109,12 @@ public void ContractsEdit_UpdateContractButton_CanBeFound()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Find Update Contract button
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? updateButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Update Contract"));
// Assert
@@ -138,12 +138,12 @@ public void ContractsEdit_AddProductButton_CanBeFound()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Find Add Product button
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? addProductButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Add Product"));
// Assert
@@ -167,12 +167,12 @@ public void ContractsEdit_AddProductButton_OpensModal()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Find and click Add Product button
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? addProductButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Add Product"));
addProductButton.ShouldNotBeNull();
addProductButton.Click();
@@ -210,7 +210,7 @@ public void ContractsEdit_WithProducts_DisplaysProductList()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
@@ -249,12 +249,12 @@ public void ContractsEdit_WithProducts_HasRemoveProductButton()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Find remove button (it has a trash icon svg)
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
var removeButton = buttons.FirstOrDefault(b =>
b.GetAttribute("title") == "Remove Product");
@@ -302,12 +302,12 @@ public void ContractsEdit_WithProductHavingFees_HasAddFeeButton()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Find Add Fee button
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? addFeeButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Add Fee"));
// Assert
@@ -345,12 +345,12 @@ public void ContractsEdit_AddFeeButton_OpensModal()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Find and click Add Fee button
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? addFeeButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Add Fee"));
addFeeButton.ShouldNotBeNull();
addFeeButton.Click();
@@ -376,7 +376,7 @@ public void ContractsEdit_WithNoProducts_ShowsEmptyState()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
@@ -400,12 +400,12 @@ public void ContractsEdit_BackToListButton_NavigatesToContractsIndex() {
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Find and click Back to List button
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? backButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Back to List"));
backButton.ShouldNotBeNull();
backButton.Click();
@@ -431,19 +431,19 @@ public void ContractsEdit_ProductModal_HasCancelButton()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Open the modal
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? addProductButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Add Product"));
addProductButton?.Click();
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Add New Product"), timeout: TimeSpan.FromSeconds(5));
// Find cancel button in modal (type="button" excludes submit buttons)
- IRefreshableElementCollection modalButtons = cut.FindAll("button");
+ IReadOnlyList modalButtons = cut.FindAll("button");
IElement? cancelButton = modalButtons.FirstOrDefault(b =>
b.TextContent.Contains("Cancel") &&
b.GetAttribute("type") == "button");
@@ -482,19 +482,19 @@ public void ContractsEdit_FeeModal_HasCancelButton()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Open the modal
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? addFeeButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Add Fee"));
addFeeButton?.Click();
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Add Transaction Fee"), timeout: TimeSpan.FromSeconds(5));
// Find cancel button in modal (type="button" excludes submit buttons)
- IRefreshableElementCollection modalButtons = cut.FindAll("button");
+ IReadOnlyList modalButtons = cut.FindAll("button");
IElement? cancelButton = modalButtons.FirstOrDefault(b =>
b.TextContent.Contains("Cancel") &&
b.GetAttribute("type") == "button");
@@ -544,12 +544,12 @@ public void ContractsEdit_WithTransactionFees_HasRemoveFeeButton()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Find remove fee button (it has a trash icon svg and title)
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
var removeFeeButton = buttons.FirstOrDefault(b =>
b.GetAttribute("title") == "Remove Fee");
@@ -574,7 +574,7 @@ public void ContractsEdit_DisplaysOperatorNameAsReadOnly()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
@@ -600,12 +600,12 @@ public void ContractsEdit_UpdateContractButton_Exists()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Assert - Find Update Contract button
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? updateButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Update Contract"));
updateButton.ShouldNotBeNull();
}
@@ -627,12 +627,12 @@ public void ContractsEdit_AddProductModal_HasRequiredFields()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Open modal
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? addProductButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Add Product") && b.GetAttribute("type") != "submit");
addProductButton.ShouldNotBeNull();
addProductButton.Click();
@@ -646,7 +646,7 @@ public void ContractsEdit_AddProductModal_HasRequiredFields()
cut.Markup.ShouldContain("Value");
// Check submit button exists
- IRefreshableElementCollection modalButtons = cut.FindAll("button");
+ IReadOnlyList modalButtons = cut.FindAll("button");
IElement? submitButton = modalButtons.FirstOrDefault(b =>
b.TextContent.Contains("Add Product") && b.GetAttribute("type") == "submit");
submitButton.ShouldNotBeNull();
@@ -669,12 +669,12 @@ public void ContractsEdit_AddProductModal_HasSubmitButton()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Open modal
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? addProductButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Add Product") && b.GetAttribute("type") != "submit");
addProductButton.ShouldNotBeNull();
addProductButton.Click();
@@ -682,7 +682,7 @@ public void ContractsEdit_AddProductModal_HasSubmitButton()
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Add New Product"), timeout: TimeSpan.FromSeconds(5));
// Assert - Check submit button exists
- IRefreshableElementCollection modalButtons = cut.FindAll("button");
+ IReadOnlyList modalButtons = cut.FindAll("button");
IElement? submitButton = modalButtons.FirstOrDefault(b =>
b.TextContent.Contains("Add Product") && b.GetAttribute("type") == "submit");
submitButton.ShouldNotBeNull();
@@ -705,12 +705,12 @@ public void ContractsEdit_AddProductModal_HasVariableValueCheckbox()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Open modal
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? addProductButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Add Product") && b.GetAttribute("type") != "submit");
addProductButton.ShouldNotBeNull();
addProductButton.Click();
@@ -753,12 +753,12 @@ public void ContractsEdit_AddFeeModal_HasRequiredFields()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Open modal
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? addFeeButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Add Fee"));
addFeeButton.ShouldNotBeNull();
addFeeButton.Click();
@@ -772,7 +772,7 @@ public void ContractsEdit_AddFeeModal_HasRequiredFields()
cut.Markup.ShouldContain("Fee Value");
// Check submit button exists
- IRefreshableElementCollection modalButtons = cut.FindAll("button");
+ IReadOnlyList modalButtons = cut.FindAll("button");
IElement? submitButton = modalButtons.FirstOrDefault(b =>
b.TextContent.Contains("Add Fee") && b.GetAttribute("type") == "submit");
submitButton.ShouldNotBeNull();
@@ -808,12 +808,12 @@ public void ContractsEdit_AddFeeModal_HasSubmitButton()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Open modal
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? addFeeButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Add Fee"));
addFeeButton.ShouldNotBeNull();
addFeeButton.Click();
@@ -821,7 +821,7 @@ public void ContractsEdit_AddFeeModal_HasSubmitButton()
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Add Transaction Fee"), timeout: TimeSpan.FromSeconds(5));
// Assert - Check submit button exists
- IRefreshableElementCollection modalButtons = cut.FindAll("button");
+ IReadOnlyList modalButtons = cut.FindAll("button");
IElement? submitButton = modalButtons.FirstOrDefault(b =>
b.TextContent.Contains("Add Fee") && b.GetAttribute("type") == "submit");
submitButton.ShouldNotBeNull();
@@ -857,12 +857,12 @@ public void ContractsEdit_RemoveProduct_HasRemoveButton()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Assert - Find remove product button
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
var removeButton = buttons.FirstOrDefault(b =>
b.GetAttribute("title") == "Remove Product");
removeButton.ShouldNotBeNull();
@@ -909,12 +909,12 @@ public void ContractsEdit_RemoveFee_HasRemoveButton()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Assert - Find remove fee button
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
var removeFeeButton = buttons.FirstOrDefault(b =>
b.GetAttribute("title") == "Remove Fee");
removeFeeButton.ShouldNotBeNull();
@@ -937,19 +937,19 @@ public void ContractsEdit_ProductModal_HasCancelButtonWithCorrectType()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Open the modal
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? addProductButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Add Product"));
addProductButton?.Click();
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Add New Product"), timeout: TimeSpan.FromSeconds(5));
// Assert - Check cancel button exists with correct type
- IRefreshableElementCollection modalButtons = cut.FindAll("button");
+ IReadOnlyList modalButtons = cut.FindAll("button");
IElement? cancelButton = modalButtons.FirstOrDefault(b =>
b.TextContent.Contains("Cancel") &&
b.GetAttribute("type") == "button");
@@ -986,19 +986,19 @@ public void ContractsEdit_FeeModal_HasCancelButtonWithCorrectType()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
// Open the modal
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? addFeeButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Add Fee"));
addFeeButton?.Click();
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Add Transaction Fee"), timeout: TimeSpan.FromSeconds(5));
// Assert - Check cancel button exists with correct type
- IRefreshableElementCollection modalButtons = cut.FindAll("button");
+ IReadOnlyList modalButtons = cut.FindAll("button");
IElement? cancelButton = modalButtons.FirstOrDefault(b =>
b.TextContent.Contains("Cancel") &&
b.GetAttribute("type") == "button");
@@ -1044,7 +1044,7 @@ public void ContractsEdit_WithMultipleProducts_DisplaysAllProducts()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
@@ -1103,7 +1103,7 @@ public void ContractsEdit_WithMultipleFees_DisplaysAllFees()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
@@ -1164,7 +1164,7 @@ public async Task ContractsEdit_AddProduct_CallsServiceAndReloadsContract()
});
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.Instance.SetDelayOverride(0);
cut.Render(); // required to trigger re-render
@@ -1290,7 +1290,7 @@ public async Task ContractsEdit_AddFee_CallsServiceAndReloadsContract()
});
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.Instance.SetDelayOverride(0);
cut.Render(); // required to trigger re-render
@@ -1379,7 +1379,7 @@ public async Task ContractsEdit_RemoveProduct_ShowsNotSupportedMessage()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
@@ -1472,7 +1472,7 @@ public async Task ContractsEdit_RemoveFee_CallsServiceAndReloadsContract()
});
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.Instance.SetDelayOverride(0);
cut.Render(); // required to trigger re-render
diff --git a/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsIndexPageTests.cs b/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsIndexPageTests.cs
index 1c105074..02c5deae 100644
--- a/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsIndexPageTests.cs
+++ b/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsIndexPageTests.cs
@@ -40,7 +40,7 @@ public void ContractsIndex_RendersCorrectly()
.ReturnsAsync(Result.Success(contracts));
// Act
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
// Assert
cut.Markup.ShouldContain("Contract Management");
@@ -55,7 +55,7 @@ public void ContractsIndex_WithNoContracts_ShowsEmptyState()
.ReturnsAsync(Result.Success(emptyList));
// Act
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
// Assert
cut.WaitForAssertion(() => cut.Markup.ShouldContain("No contracts found"), timeout: TimeSpan.FromSeconds(5));
@@ -89,7 +89,7 @@ public void ContractsIndex_WithContracts_DisplaysContractList()
.ReturnsAsync(Result.Success(contracts));
// Act
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
// Assert
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Contract 1"), timeout: TimeSpan.FromSeconds(5));
@@ -121,7 +121,7 @@ public void ContractsIndex_DisplaysProductCount()
.ReturnsAsync(Result.Success(contracts));
// Act
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
// Assert
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Product(s)"), timeout: TimeSpan.FromSeconds(5));
@@ -135,7 +135,7 @@ public void ContractsIndex_HasCorrectPageTitle()
.ReturnsAsync(Result.Success(new List()));
// Act
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
// Assert
IRenderedComponent pageTitle = cut.FindComponent();
@@ -150,7 +150,7 @@ public void ContractsIndex_LoadContractFails_NavigatesToError()
.ReturnsAsync(Result.Failure());
// Act
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
// Assert
_fakeNavigationManager.Uri.ShouldContain("error");
@@ -163,7 +163,7 @@ public void ContractsIndex_AddNewContractButton_NavigatesToNewContractPage()
this.ContractUIService.GetContracts(Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(new List()));
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Contract Management"), timeout: TimeSpan.FromSeconds(5));
// Act - Find and click the "Add New Contract" button
@@ -194,11 +194,11 @@ public void ContractsIndex_ViewButton_NavigatesToContractDetails()
this.ContractUIService.GetContracts(Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(contracts));
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Test Contract"), timeout: TimeSpan.FromSeconds(5));
// Act - Find and click the "View" button
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? viewButton = buttons.FirstOrDefault(b => b.TextContent.Contains("View"));
viewButton.ShouldNotBeNull();
viewButton.Click();
@@ -227,11 +227,11 @@ public void ContractsIndex_EditButton_NavigatesToEditContractPage()
this.ContractUIService.GetContracts(Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(contracts));
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Test Contract"), timeout: TimeSpan.FromSeconds(5));
// Act - Find and click the "Edit" button
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? editButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Edit"));
editButton.ShouldNotBeNull();
editButton.Click();
diff --git a/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsNewPageTests.cs b/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsNewPageTests.cs
index af4a2e75..429c8977 100644
--- a/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsNewPageTests.cs
+++ b/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsNewPageTests.cs
@@ -18,7 +18,7 @@ public void ContractsNew_RendersCorrectly()
this.OperatorUIService.GetOperatorsForDropDown(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(new List()));
// Act
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
// Assert
cut.Markup.ShouldContain("Create New Contract");
@@ -31,7 +31,7 @@ public void ContractsNew_HasCorrectPageTitle()
this.OperatorUIService.GetOperatorsForDropDown(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(new List()));
// Act
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
// Assert
IRenderedComponent pageTitle = cut.FindComponent();
@@ -44,11 +44,11 @@ public void ContractsNew_CancelButton_NavigatesToContractsIndex()
// Arrange
this.OperatorUIService.GetOperatorsForDropDown(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(new List()));
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Create New Contract"), timeout: TimeSpan.FromSeconds(5));
// Act - Find and click the Cancel button
- IRefreshableElementCollection buttons = cut.FindAll("button");
+ IReadOnlyList buttons = cut.FindAll("button");
IElement? cancelButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Cancel"));
cancelButton.ShouldNotBeNull();
cancelButton.Click();
@@ -63,7 +63,7 @@ public void ContractsNew_CreateContractButton_IsPresent()
// Arrange
this.OperatorUIService.GetOperatorsForDropDown(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(new List()));
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Create New Contract"), timeout: TimeSpan.FromSeconds(5));
// Act & Assert
@@ -91,7 +91,7 @@ public void ContractsNew_LoadsOperatorsSuccessfully()
this.OperatorUIService.GetOperatorsForDropDown(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(operators));
// Act
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
// Assert - Verify both operators are loaded and displayed in the dropdown
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Test Operator 1"), timeout: TimeSpan.FromSeconds(5));
@@ -105,7 +105,7 @@ public void ContractsNew_LoadsOperatorsFailed_NavigateToError()
this.OperatorUIService.GetOperatorsForDropDown(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Failure());
// Act
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
_fakeNavigationManager.Uri.ShouldContain("error");
}
@@ -117,7 +117,7 @@ public void ContractsNew_WithNoOperators_ShowsNoOperatorsMessage()
this.OperatorUIService.GetOperatorsForDropDown(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(new List()));
// Act
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
// Assert
cut.WaitForAssertion(() => cut.Markup.ShouldContain("No operators available"), timeout: TimeSpan.FromSeconds(5));
@@ -141,7 +141,7 @@ public void ContractsNew_SuccessfulCreation_NavigatesToContractsIndex()
this.ContractUIService.CreateContract(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Test Operator"), timeout: TimeSpan.FromSeconds(5));
// Act - Fill in the form
@@ -179,7 +179,7 @@ public void ContractsNew_FailedCreation_ShowsErrorMessage()
this.ContractUIService.CreateContract(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Failure());
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Test Operator"), timeout: TimeSpan.FromSeconds(5));
// Act - Fill in the form
@@ -215,7 +215,7 @@ public void ContractsNew_FormValidation_RequiresDescription()
this.OperatorUIService.GetOperatorsForDropDown(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(operators));
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Test Operator"), timeout: TimeSpan.FromSeconds(5));
// Act - Submit form without description
@@ -247,7 +247,7 @@ public void ContractsNew_FormValidation_RequiresOperator()
this.OperatorUIService.GetOperatorsForDropDown(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(operators));
- IRenderedComponent cut = RenderComponent();
+ IRenderedComponent cut = Render();
cut.WaitForAssertion(() => cut.Markup.ShouldContain("Test Operator"), timeout: TimeSpan.FromSeconds(5));
// Act - Submit form without selecting operator
diff --git a/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsViewPageTests.cs b/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsViewPageTests.cs
index 9f19ed12..c847772d 100644
--- a/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsViewPageTests.cs
+++ b/EstateManagementUI.BlazorServer.Tests/Pages/Contracts/ContractsViewPageTests.cs
@@ -28,7 +28,7 @@ public void ContractsView_RendersCorrectly()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
// Assert
@@ -51,7 +51,7 @@ public void ContractsView_DisplaysContractDetails()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));
@@ -74,7 +74,7 @@ public void ContractsView_HasCorrectPageTitle()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent(parameters => parameters
+ var cut = Render(parameters => parameters
.Add(p => p.ContractId, contractId));
// Assert
@@ -98,7 +98,7 @@ public void ContractsView_HasBackButton()
.ReturnsAsync(Result.Success(contract));
// Act
- var cut = RenderComponent