diff --git a/src/NoteBookmark.BlazorApp.Tests/Helpers/NoteDialogTestWrapper.razor b/src/NoteBookmark.BlazorApp.Tests/Helpers/NoteDialogTestWrapper.razor
new file mode 100644
index 0000000..dcba9ec
--- /dev/null
+++ b/src/NoteBookmark.BlazorApp.Tests/Helpers/NoteDialogTestWrapper.razor
@@ -0,0 +1,25 @@
+@using NoteBookmark.SharedUI.Components.Shared
+@using NoteBookmark.Domain
+@using Microsoft.FluentUI.AspNetCore.Components
+
+
+
+
+
+@code {
+ [Parameter]
+ public Note? Content { get; set; }
+
+ [Parameter]
+ public string? Title { get; set; }
+
+ [Parameter]
+ public EventCallback OnClose { get; set; }
+
+ private FluentDialog? dialogRef;
+
+ private async Task HandleClose(NoteDialogResult result)
+ {
+ await OnClose.InvokeAsync(result);
+ }
+}
diff --git a/src/NoteBookmark.BlazorApp.Tests/Tests/NoteDialogTests.cs b/src/NoteBookmark.BlazorApp.Tests/Tests/NoteDialogTests.cs
index 85af830..83cfaf9 100644
--- a/src/NoteBookmark.BlazorApp.Tests/Tests/NoteDialogTests.cs
+++ b/src/NoteBookmark.BlazorApp.Tests/Tests/NoteDialogTests.cs
@@ -13,6 +13,7 @@ namespace NoteBookmark.BlazorApp.Tests.Tests;
///
/// NoteDialog now uses EventCallback<NoteDialogResult> instead of Dialog.CloseAsync(),
/// removing the FluentDialog cascade dependency and enabling unit tests.
+/// Tests use NoteDialogTestWrapper to provide the required FluentDialog cascading parameter.
///
public sealed class NoteDialogTests : BunitContext
{
@@ -26,7 +27,7 @@ public void NoteDialog_CreateMode_RendersFormFields()
{
var note = new Note { PostId = "post-1" };
- var cut = Render(p => p
+ var cut = Render(p => p
.Add(x => x.Content, note)
.Add(x => x.Title, "Add a note"));
@@ -38,12 +39,13 @@ public void NoteDialog_CreateMode_ShowsSaveAndCancelButtons()
{
var note = new Note { PostId = "post-1" };
- var cut = Render(p => p
+ var cut = Render(p => p
.Add(x => x.Content, note)
.Add(x => x.Title, "Add a note"));
- cut.Markup.Should().Contain("Save");
- cut.Markup.Should().Contain("Cancel");
+ var markup = cut.Markup;
+ markup.Should().Contain("Save");
+ markup.Should().Contain("Cancel");
}
[Fact]
@@ -51,11 +53,14 @@ public void NoteDialog_EditMode_ShowsDeleteButton()
{
var note = new Note { PostId = "post-1", RowKey = "existing-row-key" };
- var cut = Render(p => p
+ var cut = Render(p => p
.Add(x => x.Content, note)
.Add(x => x.Title, "Edit note"));
- cut.Markup.Should().Contain("Delete");
+ var markup = cut.Markup;
+ markup.Should().Contain("Delete");
+ markup.Should().Contain("Save");
+ markup.Should().Contain("Cancel");
}
[Fact]
@@ -63,7 +68,7 @@ public void NoteDialog_ExistingTags_DisplaysAsBadges()
{
var note = new Note { PostId = "post-1", Tags = "csharp, blazor" };
- var cut = Render(p => p
+ var cut = Render(p => p
.Add(x => x.Content, note)
.Add(x => x.Title, "Add a note"));
@@ -76,7 +81,7 @@ public void NoteDialog_CategorySelect_ContainsCategoriesFromDomain()
{
var note = new Note { PostId = "post-1" };
- var cut = Render(p => p
+ var cut = Render(p => p
.Add(x => x.Content, note)
.Add(x => x.Title, "Add a note"));
diff --git a/src/NoteBookmark.SharedUI/Components/Pages/Posts.razor b/src/NoteBookmark.SharedUI/Components/Pages/Posts.razor
index 670cef2..8f313a0 100644
--- a/src/NoteBookmark.SharedUI/Components/Pages/Posts.razor
+++ b/src/NoteBookmark.SharedUI/Components/Pages/Posts.razor
@@ -95,7 +95,8 @@
Title = "Add a note",
PreventDismissOnOverlayClick = true,
PreventScroll = true,
-
+ PrimaryAction = "Save",
+ SecondaryAction = "Cancel"
});
var result = await dialog.Result;
diff --git a/src/NoteBookmark.SharedUI/Components/Shared/NoteDialog.razor b/src/NoteBookmark.SharedUI/Components/Shared/NoteDialog.razor
index 8278f37..b48b9ac 100644
--- a/src/NoteBookmark.SharedUI/Components/Shared/NoteDialog.razor
+++ b/src/NoteBookmark.SharedUI/Components/Shared/NoteDialog.razor
@@ -4,15 +4,6 @@
@rendermode InteractiveServer
-
-
@@ -62,26 +53,18 @@
-
-
+ {
+ Delete
+ }
+
+
+ Save
+ Cancel
+
@code {
[Parameter]
diff --git a/src/NoteBookmark.SharedUI/Components/Shared/NoteDialog.razor.css b/src/NoteBookmark.SharedUI/Components/Shared/NoteDialog.razor.css
new file mode 100644
index 0000000..06feaa3
--- /dev/null
+++ b/src/NoteBookmark.SharedUI/Components/Shared/NoteDialog.razor.css
@@ -0,0 +1,20 @@
+::deep .note-dialog-footer {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 16px 0;
+ gap: 8px;
+}
+
+::deep .note-dialog-footer-left {
+ display: flex;
+ align-items: center;
+ flex: 0 0 auto;
+}
+
+::deep .note-dialog-footer-right {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ flex: 0 0 auto;
+}