Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using AngleSharp.Dom;
using Bunit;
using EstateManagementUI.BlazorServer.Components.Pages.Operators;
using EstateManagementUI.BlazorServer.Models;
Expand Down Expand Up @@ -75,4 +76,189 @@ public void OperatorsView_HasCorrectPageTitle()
var pageTitle = cut.FindComponent<Microsoft.AspNetCore.Components.Web.PageTitle>();
pageTitle.Instance.ChildContent.ShouldNotBeNull();
}

[Fact]
public void OperatorsView_BackToListButton_NavigatesToOperatorsIndex()
{
// Arrange
var operatorId = Guid.NewGuid();
var operatorModel = new OperatorModels.OperatorModel
{
OperatorId = operatorId,
Name = "Test Operator"
};

this.OperatorUIService.Setup(o => o.GetOperator(It.IsAny<CorrelationId>(), It.IsAny<Guid>(), It.IsAny<Guid>()))
.ReturnsAsync(Result.Success(operatorModel));

var cut = RenderComponent<View>(parameters => parameters
.Add(p => p.OperatorId, operatorId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));

// Act - Find and click "Back to List" button
IRefreshableElementCollection<IElement> buttons = cut.FindAll("button");
IElement? backButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Back to List"));
backButton?.Click();

// Assert
_fakeNavigationManager.Uri.ShouldContain("/operators");
}

[Fact]
public void OperatorsView_DisplaysRequireCustomMerchantNumber_WhenRequired()
{
// Arrange
var operatorId = Guid.NewGuid();
var operatorModel = new OperatorModels.OperatorModel
{
OperatorId = operatorId,
Name = "Test Operator",
RequireCustomMerchantNumber = true,
RequireCustomTerminalNumber = false
};

this.OperatorUIService.Setup(o => o.GetOperator(It.IsAny<CorrelationId>(), It.IsAny<Guid>(), It.IsAny<Guid>()))
.ReturnsAsync(Result.Success(operatorModel));

// Act
var cut = RenderComponent<View>(parameters => parameters
.Add(p => p.OperatorId, operatorId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));

// Assert
cut.Markup.ShouldContain("Required");
cut.Markup.ShouldContain("Require Custom Merchant Number");
}

[Fact]
public void OperatorsView_DisplaysRequireCustomMerchantNumber_WhenNotRequired()
{
// Arrange
var operatorId = Guid.NewGuid();
var operatorModel = new OperatorModels.OperatorModel
{
OperatorId = operatorId,
Name = "Test Operator",
RequireCustomMerchantNumber = false,
RequireCustomTerminalNumber = false
};

this.OperatorUIService.Setup(o => o.GetOperator(It.IsAny<CorrelationId>(), It.IsAny<Guid>(), It.IsAny<Guid>()))
.ReturnsAsync(Result.Success(operatorModel));

// Act
var cut = RenderComponent<View>(parameters => parameters
.Add(p => p.OperatorId, operatorId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));

// Assert
cut.Markup.ShouldContain("Not Required");
cut.Markup.ShouldContain("Require Custom Merchant Number");
}

[Fact]
public void OperatorsView_DisplaysRequireCustomTerminalNumber_WhenRequired()
{
// Arrange
var operatorId = Guid.NewGuid();
var operatorModel = new OperatorModels.OperatorModel
{
OperatorId = operatorId,
Name = "Test Operator",
RequireCustomMerchantNumber = false,
RequireCustomTerminalNumber = true
};

this.OperatorUIService.Setup(o => o.GetOperator(It.IsAny<CorrelationId>(), It.IsAny<Guid>(), It.IsAny<Guid>()))
.ReturnsAsync(Result.Success(operatorModel));

// Act
var cut = RenderComponent<View>(parameters => parameters
.Add(p => p.OperatorId, operatorId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));

// Assert
cut.Markup.ShouldContain("Required");
cut.Markup.ShouldContain("Require Custom Terminal Number");
}

[Fact]
public void OperatorsView_DisplaysRequireCustomTerminalNumber_WhenNotRequired()
{
// Arrange
var operatorId = Guid.NewGuid();
var operatorModel = new OperatorModels.OperatorModel
{
OperatorId = operatorId,
Name = "Test Operator",
RequireCustomMerchantNumber = false,
RequireCustomTerminalNumber = false
};

this.OperatorUIService.Setup(o => o.GetOperator(It.IsAny<CorrelationId>(), It.IsAny<Guid>(), It.IsAny<Guid>()))
.ReturnsAsync(Result.Success(operatorModel));

// Act
var cut = RenderComponent<View>(parameters => parameters
.Add(p => p.OperatorId, operatorId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));

// Assert
cut.Markup.ShouldContain("Not Required");
cut.Markup.ShouldContain("Require Custom Terminal Number");
}

[Fact]
public void OperatorsView_LoadOperator_LoadFails_NavigatesToError()
{
// Arrange
var operatorId = Guid.NewGuid();
this.OperatorUIService.Setup(o => o.GetOperator(It.IsAny<CorrelationId>(), It.IsAny<Guid>(), It.IsAny<Guid>()))
.ReturnsAsync(Result.Failure());

// Act
var cut = RenderComponent<View>(parameters => parameters
.Add(p => p.OperatorId, operatorId));

// Assert
_fakeNavigationManager.Uri.ShouldContain("error");
}

[Fact]
public void OperatorsView_DisplaysOperatorNotFound_WhenOperatorIsNull()
{
// Arrange
var operatorId = Guid.NewGuid();
this.OperatorUIService.Setup(o => o.GetOperator(It.IsAny<CorrelationId>(), It.IsAny<Guid>(), It.IsAny<Guid>()))
.ReturnsAsync(Result.Success<OperatorModels.OperatorModel>(null));

// Act
var cut = RenderComponent<View>(parameters => parameters
.Add(p => p.OperatorId, operatorId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));

// Assert
cut.Markup.ShouldContain("Operator not found");
}

[Fact]
public void OperatorsView_OperatorNotFoundBackButton_NavigatesToOperatorsIndex()
{
// Arrange
var operatorId = Guid.NewGuid();
this.OperatorUIService.Setup(o => o.GetOperator(It.IsAny<CorrelationId>(), It.IsAny<Guid>(), It.IsAny<Guid>()))
.ReturnsAsync(Result.Success<OperatorModels.OperatorModel>(null));

var cut = RenderComponent<View>(parameters => parameters
.Add(p => p.OperatorId, operatorId));
cut.WaitForState(() => !cut.Markup.Contains("animate-spin"), TimeSpan.FromSeconds(5));

// Act - Find and click "Back to List" button
IRefreshableElementCollection<IElement> buttons = cut.FindAll("button");
IElement? backButton = buttons.FirstOrDefault(b => b.TextContent.Contains("Back to List"));
backButton?.Click();

// Assert
_fakeNavigationManager.Uri.ShouldContain("/operators");
}
}
Loading