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 - -
- - - - @(Dialog?.Instance?.Parameters?.Title ?? Title) - - -
@@ -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; +}