Skip to content

Improve web unit tests coverage - #162

Merged
koreyba merged 2 commits into
mainfrom
unit-tests-coverage
Jul 23, 2026
Merged

Improve web unit tests coverage#162
koreyba merged 2 commits into
mainfrom
unit-tests-coverage

Conversation

@koreyba

@koreyba koreyba commented Jul 23, 2026

Copy link
Copy Markdown
Owner

… to maximize coverage

Summary by CodeRabbit

  • Tests
    • Added comprehensive automated coverage for network status, authentication, editor controls, error handling, import/export dialogs, note lists, account settings, sharing, search, themes, responsive behavior, notifications, and tag suggestions.
    • Added coverage for note querying, offline data handling, editor actions, WordPress export flows, and account deletion scenarios.
    • Verified key user interactions, loading and error states, accessibility behavior, and edge cases across the web application.

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@koreyba, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 22 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 6a6ba4fc-3ba0-47b7-8d3d-b2cd0ef8927b

📥 Commits

Reviewing files that changed from the base of the PR and between 6a6dbdb and 3e56f0b.

📒 Files selected for processing (12)
  • ui/web/components/AuthForm.tsx
  • ui/web/tests/unit/components/AuthForm.test.tsx
  • ui/web/tests/unit/components/EditorMenuBar.test.tsx
  • ui/web/tests/unit/components/ImportProgressDialog.test.tsx
  • ui/web/tests/unit/components/features/notes/MoreActionsMenu.test.tsx
  • ui/web/tests/unit/components/features/public/PublicSharePageClient.test.tsx
  • ui/web/tests/unit/components/features/search/NoteSearchResults.test.tsx
  • ui/web/tests/unit/components/features/settings/DeleteAccountPanel.test.tsx
  • ui/web/tests/unit/components/features/wordpress/ExportToWordPressButton.test.tsx
  • ui/web/tests/unit/hooks/use-toast.test.tsx
  • ui/web/tests/unit/hooks/useTagSuggestions.test.ts
  • ui/web/tests/unit/lib/editor.test.ts
📝 Walkthrough

Walkthrough

This PR adds comprehensive Jest and React Testing Library coverage for web adapters, hooks, editor utilities, shared components, note management, account actions, public sharing, search interfaces, and export workflows.

Changes

Web test coverage

Layer / File(s) Summary
Editor commands and selection formatting
ui/web/tests/unit/components/EditorMenuBar.test.tsx, ui/web/tests/unit/components/executeEditorCommand.test.ts, ui/web/tests/unit/lib/editor.test.ts
Covers TipTap command routing, formatting controls, validation, dynamic commands, and Markdown selection replacement.
Data hooks and browser integrations
ui/web/tests/unit/adapters/*, ui/web/tests/unit/hooks/*
Covers network subscriptions, responsive state, toast reducers, note merging, pagination/search hooks, and tag suggestions.
Shared component state and rendering
ui/web/tests/unit/components/AuthForm.test.tsx, ui/web/tests/unit/components/ErrorBoundary.test.tsx, ui/web/tests/unit/components/*ProgressDialog.test.tsx, ui/web/tests/unit/components/VirtualNoteList.test.tsx, ui/web/tests/unit/components/theme-toggle.test.tsx
Covers rendering states, loading/error behavior, interactions, virtualized notes, progress dialogs, and theme switching.
Account, notes, and export actions
ui/web/tests/unit/components/features/account/*, ui/web/tests/unit/components/features/notes/*, ui/web/tests/unit/components/features/settings/*, ui/web/tests/unit/components/features/wordpress/*
Covers account deletion, sidebar actions, note menus, bulk deletion, and WordPress export triggers.
Public sharing and search interfaces
ui/web/tests/unit/components/features/public/*, ui/web/tests/unit/components/features/search/*
Covers shared-note loading/error states, search presets, result rendering, highlighting, selection, and pagination.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the PR’s main goal of increasing web unit test coverage.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch unit-tests-coverage

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

PR Status

Updated for PR #162 at 3e56f0b on 2026-07-23T09:06:44.575Z.

📊 Allure Test Report

Open Allure Report

Contributing Workflows

Workflow Status Suites
Unit Tests Workflow run #29992605393 (Attempt #1) Core Unit, Core Integration, Web Unit, Mobile Unit
Component Tests Workflow run #29992605341 (Attempt #1) Web Component
E2E Tests (PR Preview) Workflow run #29992603460 (Attempt #1) Web E2E

Catalog: All reports

🤖 Android Build Panel

Check a box below to trigger a release build:

  • 🚀 Build Stage Release APK
  • 🚀 Build Prod Release APK

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (8)
ui/web/tests/unit/components/features/settings/DeleteAccountPanel.test.tsx (1)

107-109: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Assert button recovery after failed deletion.

These tests only verify the error text, so they would still pass if setSubmitting(false) in finally were removed and the button remained stuck at "Deleting...". Assert that each rejection restores an enabled "Delete account" button.

Suggested assertions
     await waitFor(() => {
       expect(screen.getByText("Server error during account deletion")).toBeTruthy()
+      const button = screen.getByRole("button", { name: "Delete account" }) as HTMLButtonElement
+      expect(button.disabled).toBe(false)
     })
...
     await waitFor(() => {
       expect(screen.getByText("Failed to delete account. Please try again.")).toBeTruthy()
+      const button = screen.getByRole("button", { name: "Delete account" }) as HTMLButtonElement
+      expect(button.disabled).toBe(false)
     })

As per coding guidelines, tests should cover the changed behavior and all tests should pass before completion.

Also applies to: 122-124

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ui/web/tests/unit/components/features/settings/DeleteAccountPanel.test.tsx`
around lines 107 - 109, Update the failed-deletion test cases around the
existing error assertions to also verify recovery: after each rejected deletion,
assert that the “Delete account” button is present and enabled rather than
remaining in the “Deleting...” state. Cover both rejection paths referenced by
the comment while preserving the existing server-error assertions.

Source: Coding guidelines

ui/web/tests/unit/lib/editor.test.ts (1)

53-82: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Exact-HTML assertions couple the test to SmartPasteService's real markdown renderer output.

These two tests don't mock SmartPasteService.resolvePaste (unlike the "bails out" test at Line 88), so they assert on the literal HTML string produced by the real markdown-to-HTML conversion (e.g. "<p><strong>Bold Text</strong></p>\n"). Any formatting change in the underlying renderer (whitespace, wrapping, etc.) would break these tests even though applySelectionAsMarkdown itself is unchanged. Mocking resolvePaste here too (as done elsewhere in the file) would isolate the unit under test and reduce flakiness risk.

♻️ Example: mock resolvePaste for isolation
   it("converts selected markdown text to HTML, replaces selection, and triggers onContentChange", () => {
     const {
       editor,
       chainMock,
       focusMock,
       deleteRangeMock,
       insertContentMock,
       runMock,
       textBetweenMock,
     } = createMockEditor(0, 14, "**Bold Text**")
     const onContentChange = jest.fn()
+    jest.spyOn(SmartPasteService, "resolvePaste").mockReturnValueOnce({
+      html: "<p><strong>Bold Text</strong></p>\n",
+      type: "markdown",
+      warnings: [],
+      detection: { type: "markdown", confidence: 1, reasons: [], warnings: [] },
+    })

     applySelectionAsMarkdown(editor, onContentChange)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ui/web/tests/unit/lib/editor.test.ts` around lines 53 - 82, Mock
SmartPasteService.resolvePaste in both applySelectionAsMarkdown tests so they
verify editor selection replacement and callback behavior without relying on the
renderer’s exact HTML output. Configure the mock with representative converted
content and update the insertContent assertions to use that controlled result,
matching the existing mock pattern in the file.
ui/web/tests/unit/components/EditorMenuBar.test.tsx (1)

1-129: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

isActive mock branching logic is non-obvious; a short comment would help.

The three-branch dispatch in isActiveMock (object-arg vs. name+attributes vs. plain name) mirrors TipTap's overloaded editor.isActive() signature, but this isn't explained anywhere. A short comment mapping each branch to its real-world call site (e.g. editor.isActive({ textAlign: 'left' }) vs editor.isActive('heading', { level }) vs editor.isActive('bold')) would make future maintenance easier.

As per coding guidelines, "Follow established project code style, use meaningful self-documenting names, and add comments for complex or non-obvious logic."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ui/web/tests/unit/components/EditorMenuBar.test.tsx` around lines 1 - 129,
Add a concise comment immediately above isActiveMock's branching logic
explaining that it mirrors TipTap's overloaded editor.isActive calls: object
argument for attributes such as textAlign, name plus attributes for nodes such
as heading levels, and plain name for marks such as bold. Leave the existing
branching behavior unchanged.

Source: Coding guidelines

ui/web/tests/unit/components/features/search/NoteSearchResults.test.tsx (1)

126-141: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Avoid hardcoding derived chunk length; matches inconsistency with sibling test file.

Line 140 hardcodes 24 as the expected chunkLength argument, coupling the test to the exact output of getRagChunkBodyLength. ChunkSearchItem.test.tsx uses expect.any(Number) for the equivalent assertion — consider the same here for consistency and resilience to unrelated implementation changes.

♻️ Suggested change
-      expect(mockOnOpenInContext).toHaveBeenCalledWith('note-42', 10, 24)
+      expect(mockOnOpenInContext).toHaveBeenCalledWith('note-42', 10, expect.any(Number))
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ui/web/tests/unit/components/features/search/NoteSearchResults.test.tsx`
around lines 126 - 141, Update the onOpenInContext assertion in the “invokes
onOpenInContext callback when clicking open fragment” test to avoid hardcoding
the derived chunk length; keep the expected note ID and start offset unchanged,
and match the sibling ChunkSearchItem test by accepting any numeric value for
the final argument.
ui/web/tests/unit/hooks/useTagSuggestions.test.ts (1)

43-55: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Redundant/confusing first assertion.

['rub', 'rust'].filter((t) => defaultTags.includes(t)) always evaluates to ['rust'] (since 'rub' isn't in defaultTags), so it's equivalent to the very next assertion. It adds no coverage and obscures what's actually being tested.

♻️ Proposed simplification
-    expect(result.current).toEqual(['rub', 'rust'].filter((t) => defaultTags.includes(t)))
     expect(result.current).toEqual(['rust'])
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ui/web/tests/unit/hooks/useTagSuggestions.test.ts` around lines 43 - 55,
Remove the redundant first expect in the custom minChars test and retain the
direct assertion that result.current equals ['rust']. Keep the test setup and
minChars behavior unchanged.
ui/web/tests/unit/hooks/use-toast.test.tsx (1)

264-285: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Test doesn't actually verify duplicate-timer prevention.

The final assertions (toasts[0].open === false, then toasts.length === 0 after advancing timers) would pass identically whether or not a dedup guard exists for the removal timeout — REMOVE_TOAST filtering by id is a no-op on an already-removed id either way. This test can't distinguish "no duplicate timer" from "duplicate timer without a guard."

♻️ Proposed fix using timer-count assertion
     act(() => {
       result.current.dismiss(createdId)
       result.current.dismiss(createdId)
     })

+    // Only one removal timer should have been scheduled despite two dismiss calls
+    expect(jest.getTimerCount()).toBe(1)
+
     expect(result.current.toasts[0].open).toBe(false)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ui/web/tests/unit/hooks/use-toast.test.tsx` around lines 264 - 285,
Strengthen the duplicate-dismiss test around useToast().dismiss by asserting the
scheduled removal timer count immediately after calling dismiss twice. Verify
that only one removal timer is created for the toast, while retaining the
existing state and eventual-removal assertions.
ui/web/tests/unit/components/ImportProgressDialog.test.tsx (1)

157-176: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Fragile button disambiguation via textContent.

closeButtons.find(btn => btn.textContent === "Close") doesn't reliably distinguish the footer Close button from a default dialog close icon (its sr-only "Close" text would produce the same textContent). It currently works only because of coincidental DOM ordering. The same file's other test (Line 182) uses a more robust !btn.querySelector("svg") filter for the same disambiguation — consider aligning this test with that pattern.

♻️ Suggested alignment
-      const footerBtn = closeButtons.find(btn => btn.textContent === "Close")!
+      const footerBtn = closeButtons.find(btn => !btn.querySelector("svg"))!
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ui/web/tests/unit/components/ImportProgressDialog.test.tsx` around lines 157
- 176, Update the Close-button selection in the “renders Close button when
import is complete and calls onClose on click” test to exclude buttons
containing an SVG, matching the existing robust disambiguation pattern in the
nearby test. Remove reliance on exact textContent or DOM ordering while
preserving the click and onClose assertion.
ui/web/tests/unit/components/VirtualNoteList.test.tsx (1)

255-301: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value

Remove the second-argument assertion from this mock expectation.

Function components receive props as their first argument; any remaining positional arguments are a React implementation detail and should not be part of this contract.

♻️ Suggested simplification
-      expect(customListSpy).toHaveBeenCalledWith(
-        expect.objectContaining({
-          height: 400,
-          itemCount: 1,
-          itemSize: 120,
-          width: "100%",
-          overscanCount: 5,
-        }),
-        undefined
-      )
+      expect(customListSpy.mock.calls[0][0]).toEqual(
+        expect.objectContaining({
+          height: 400,
+          itemCount: 1,
+          itemSize: 120,
+          width: "100%",
+          overscanCount: 5,
+        })
+      )
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ui/web/tests/unit/components/VirtualNoteList.test.tsx` around lines 255 -
301, Update both customListSpy expectations in the “passes custom height and
virtualizer parameters to ListComponent” test to assert only the props object
passed as the first argument; remove the undefined second-argument assertions
while preserving all existing prop checks.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ui/web/tests/unit/components/AuthForm.test.tsx`:
- Around line 115-135: Update the test around AuthForm’s Google authentication
click to make onGoogleAuthMock reject, so it genuinely exercises the failure
path and verifies the button’s loading state is reset. Remove the unnecessary
try/catch around fireEvent.click, while preserving the existing call-count
assertion and console-error cleanup.

In `@ui/web/tests/unit/components/features/notes/MoreActionsMenu.test.tsx`:
- Around line 136-142: Fix the RAG-panel close test by updating the DropdownMenu
mock to respect its open prop and expose observable closed-state behavior, then
assert that clicking close-menu-from-rag causes the menu to close through the
onMenuClose/setMoreMenuOpen(false) wiring. Replace the tautological closeBtn
existence assertion in the supports closing menu via RAG panel callback test
with an assertion against the mock’s rendered open state.

In `@ui/web/tests/unit/components/features/public/PublicSharePageClient.test.tsx`:
- Around line 136-151: Strengthen the “cancels state updates cleanly when
unmounted before request resolves” test by spying on the relevant React warning
mechanism, resolving the pending request after unmount, and asserting that no
post-unmount state-update warning is emitted. Restore the spy afterward while
preserving the existing unmount-before-resolution flow.

In
`@ui/web/tests/unit/components/features/wordpress/ExportToWordPressButton.test.tsx`:
- Around line 65-81: Expand the test named “does not call onRequestExport if
getNote returns null or note without id” to cover both guard inputs: retain the
null case and add a separate note object without an id, such as one containing
only a title. Verify in each case that getNote is called once and
onRequestExport is not called.

---

Nitpick comments:
In `@ui/web/tests/unit/components/EditorMenuBar.test.tsx`:
- Around line 1-129: Add a concise comment immediately above isActiveMock's
branching logic explaining that it mirrors TipTap's overloaded editor.isActive
calls: object argument for attributes such as textAlign, name plus attributes
for nodes such as heading levels, and plain name for marks such as bold. Leave
the existing branching behavior unchanged.

In `@ui/web/tests/unit/components/features/search/NoteSearchResults.test.tsx`:
- Around line 126-141: Update the onOpenInContext assertion in the “invokes
onOpenInContext callback when clicking open fragment” test to avoid hardcoding
the derived chunk length; keep the expected note ID and start offset unchanged,
and match the sibling ChunkSearchItem test by accepting any numeric value for
the final argument.

In `@ui/web/tests/unit/components/features/settings/DeleteAccountPanel.test.tsx`:
- Around line 107-109: Update the failed-deletion test cases around the existing
error assertions to also verify recovery: after each rejected deletion, assert
that the “Delete account” button is present and enabled rather than remaining in
the “Deleting...” state. Cover both rejection paths referenced by the comment
while preserving the existing server-error assertions.

In `@ui/web/tests/unit/components/ImportProgressDialog.test.tsx`:
- Around line 157-176: Update the Close-button selection in the “renders Close
button when import is complete and calls onClose on click” test to exclude
buttons containing an SVG, matching the existing robust disambiguation pattern
in the nearby test. Remove reliance on exact textContent or DOM ordering while
preserving the click and onClose assertion.

In `@ui/web/tests/unit/components/VirtualNoteList.test.tsx`:
- Around line 255-301: Update both customListSpy expectations in the “passes
custom height and virtualizer parameters to ListComponent” test to assert only
the props object passed as the first argument; remove the undefined
second-argument assertions while preserving all existing prop checks.

In `@ui/web/tests/unit/hooks/use-toast.test.tsx`:
- Around line 264-285: Strengthen the duplicate-dismiss test around
useToast().dismiss by asserting the scheduled removal timer count immediately
after calling dismiss twice. Verify that only one removal timer is created for
the toast, while retaining the existing state and eventual-removal assertions.

In `@ui/web/tests/unit/hooks/useTagSuggestions.test.ts`:
- Around line 43-55: Remove the redundant first expect in the custom minChars
test and retain the direct assertion that result.current equals ['rust']. Keep
the test setup and minChars behavior unchanged.

In `@ui/web/tests/unit/lib/editor.test.ts`:
- Around line 53-82: Mock SmartPasteService.resolvePaste in both
applySelectionAsMarkdown tests so they verify editor selection replacement and
callback behavior without relying on the renderer’s exact HTML output. Configure
the mock with representative converted content and update the insertContent
assertions to use that controlled result, matching the existing mock pattern in
the file.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d67e04d6-64a5-4500-8cfd-3f4952bcf9c5

📥 Commits

Reviewing files that changed from the base of the PR and between c86dee8 and 6a6dbdb.

📒 Files selected for processing (24)
  • ui/web/tests/unit/adapters/networkStatus.test.ts
  • ui/web/tests/unit/components/AuthForm.test.tsx
  • ui/web/tests/unit/components/EditorMenuBar.test.tsx
  • ui/web/tests/unit/components/ErrorBoundary.test.tsx
  • ui/web/tests/unit/components/ExportProgressDialog.test.tsx
  • ui/web/tests/unit/components/ImportProgressDialog.test.tsx
  • ui/web/tests/unit/components/VirtualNoteList.test.tsx
  • ui/web/tests/unit/components/executeEditorCommand.test.ts
  • ui/web/tests/unit/components/features/account/DeleteAccountDialog.test.tsx
  • ui/web/tests/unit/components/features/notes/MoreActionsMenu.test.tsx
  • ui/web/tests/unit/components/features/notes/Sidebar.test.tsx
  • ui/web/tests/unit/components/features/public/PublicSharePageClient.test.tsx
  • ui/web/tests/unit/components/features/search/AiSearchPresetSelector.test.tsx
  • ui/web/tests/unit/components/features/search/ChunkSearchItem.test.tsx
  • ui/web/tests/unit/components/features/search/NoteSearchResults.test.tsx
  • ui/web/tests/unit/components/features/settings/DeleteAccountPanel.test.tsx
  • ui/web/tests/unit/components/features/wordpress/ExportToWordPressButton.test.tsx
  • ui/web/tests/unit/components/theme-toggle.test.tsx
  • ui/web/tests/unit/hooks/use-mobile.test.tsx
  • ui/web/tests/unit/hooks/use-toast.test.tsx
  • ui/web/tests/unit/hooks/useNoteData.test.tsx
  • ui/web/tests/unit/hooks/useNotesQuery.test.tsx
  • ui/web/tests/unit/hooks/useTagSuggestions.test.ts
  • ui/web/tests/unit/lib/editor.test.ts

Comment thread ui/web/tests/unit/components/AuthForm.test.tsx
@koreyba

koreyba commented Jul 23, 2026

Copy link
Copy Markdown
Owner Author

Updated branch with fixes for CodeRabbit feedback, SonarQube issues, and build validation.

@sonarqubecloud

Copy link
Copy Markdown

@koreyba
koreyba merged commit cb82931 into main Jul 23, 2026
23 of 24 checks passed
@koreyba
koreyba deleted the unit-tests-coverage branch July 23, 2026 10:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant