Skip to content

Extract audit fallback test setup#350

Merged
leynos merged 9 commits into
mainfrom
feat/audit-utils-refactors
May 8, 2026
Merged

Extract audit fallback test setup#350
leynos merged 9 commits into
mainfrom
feat/audit-utils-refactors

Conversation

@leynos
Copy link
Copy Markdown
Owner

@leynos leynos commented May 3, 2026

Summary

This branch extracts the repeated retired-endpoint pnpm mock setup in the frontend audit utility tests so the fallback cases share one local helper while preserving their existing assertions and fetch setup.

No issue or roadmap task is referenced for this branch.

Review walkthrough

  • Start with frontend-pwa/scripts/audit-utils.test.mjs to see the new setupRetiredEndpointFallback helper inside the runAuditJson suite.
  • Then review the same file's retired-endpoint fallback tests to confirm only the repeated spawnSyncMock setup changed and the non-empty dependency fallback scenario remains separate.

Validation

  • make check-fmt: passed
  • make lint: passed
  • make test: passed
  • pnpm exec vitest run scripts/audit-utils.test.mjs from frontend-pwa: passed

Notes

The branch is intentionally limited to test refactoring. It does not change production source files or exported symbols.

Move the repeated retired-endpoint pnpm mock sequence into a local helper
inside the `runAuditJson` suite. Keep the non-empty dependency fallback
scenario on its existing setup so the test cases remain distinct.
Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

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

Sorry @leynos, you have reached your weekly rate limit of 2500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 3, 2026

Review Change Stack
No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: a248c770-2653-48ed-9f8e-8ab37dcc4dd1

📥 Commits

Reviewing files that changed from the base of the PR and between bc24947 and 6cdfb09.

📒 Files selected for processing (1)
  • frontend-pwa/scripts/audit-utils.test.mjs

This pull request refactors frontend test code and tightens test assertions for the audit utility suite, and updates dependency override parity checks and related fixtures.

Test refactor and assertion improvements

  • frontend-pwa/scripts/audit-utils.test.mjs
    • Introduced setupRetiredEndpointFallback({ dependencies } = {}) which now delegates to setupRetiredPnpmAudit to remove duplication of the 410 retired-endpoint fixture.
    • Added assertFallbackSpawnCalls() to centralise and assert the expected spawnSync call sequence for the retired-endpoint fallback path (pnpm audit --json then pnpm ls --json --depth Infinity; both with encoding: 'utf8').
    • Reworked tests to use the new helpers:
      • Bulk-advisory fallback and “happy path” cases call assertFallbackSpawnCalls() and now assert fetch was invoked exactly once and with the expected URL.
      • Two previously duplicated error-path tests are replaced with an it.each parameterised suite covering the bulk endpoint failure and blank-response rejection; the suite includes spawnSync and fetch assertions (including fetch call count).
      • Bulk advisory ID normalisation test updated to include spawn assertions and fetch call-count/URL assertions.
    • Added JSDoc for the new helpers (improves docstring coverage); commit message documents these docstring additions.

Dependency override parity and docs

  • package.json
    • Bumped override for basic-ftp from 5.3.0 → 5.3.1.
  • scripts/check-overrides-parity.mjs & scripts/check-overrides-parity.test.mjs
    • Added ip-address to the set of override keys validated for parity and updated test fixtures/expectations accordingly (tests now assert parity over basic-ftp, dompurify, ip-address, uuid).
  • docs/developers-guide.md
    • Updated example output for the override-parity check to include the expanded set of verified pinned dependencies.

Validation and remaining signals

  • Automated checks reported by the branch: make check-fmt, make lint, make test, and pnpm exec vitest run scripts/audit-utils.test.mjs passed.
  • Pre-merge tooling shows three inconclusive checks (property/proof, domain architecture, performance) that are tooling signals requiring re-run; actionable warning: docstring coverage previously at ~50% — JSDoc for assertFallbackSpawnCalls and setupRetiredEndpointFallback were added to address this (commit included).

Scope

  • Test-only changes and documentation; no production source files or exported APIs were modified.

Walkthrough

Introduce setupRetiredEndpointFallback and assertFallbackSpawnCalls for retired pnpm-audit fallback tests; add ip-address to override-parity checks, bump basic-ftp to 5.3.1, update parity-check script and tests, and refresh the developer-guide example output.

Changes

Retired endpoint fallback updates

Layer / File(s) Summary
Test Helper Definition
frontend-pwa/scripts/audit-utils.test.mjs
Add setupRetiredEndpointFallback({ dependencies } = {}) and assertFallbackSpawnCalls() to configure retired-audit and pnpm ls payloads and assert spawnSync calls include encoding: 'utf8'.
Fallback Test Updates
frontend-pwa/scripts/audit-utils.test.mjs
Replace inline setups with setupRetiredEndpointFallback() in fallback tests; call assertFallbackSpawnCalls() and add explicit assertions for fetch call counts and the bulk advisory URL where applicable.

Override parity and docs update

Layer / File(s) Summary
Override values changed
package.json, pnpm.overrides
Bump basic-ftp override from 5.3.0 to 5.3.1 in root and pnpm overrides; include ip-address in the override set.
Parity check script
scripts/check-overrides-parity.mjs
Add ip-address to OVERRIDES_TO_CHECK so parity validation includes that key.
Parity tests
scripts/check-overrides-parity.test.mjs
Update fixtures and assertions to include ip-address, adjust basic-ftp expectations to 5.3.1, and update console output expectations across test cases.
Docs example
docs/developers-guide.md
Refresh example output for the override-parity success case to show the expanded list of verified pinned dependencies (adds ip-address and uuid).

Sequence Diagram(s)

sequenceDiagram
  participant Test
  participant Helper
  participant spawnSync
  participant fetch
  Test->>Helper: setupRetiredEndpointFallback()
  Helper->>spawnSync: pnpm audit / pnpm ls outputs
  Test->>spawnSync: assertFallbackSpawnCalls()
  Test->>fetch: perform advisory request
  fetch-->>Test: mocked response
Loading

Poem

A tidy helper wakes the suite anew,
Fallbacks mocked and spawn calls true,
Parity lists extend their line,
basic-ftp climbs one patching sign,
Tests and docs now march in tune.


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 warning, 4 inconclusive)

Check name Status Explanation Resolution
Concurrency And State ⚠️ Warning The fetchBulkAdvisories async function establishes a 30-second timeout via AbortController but lacks test coverage for timeout triggering, abort signal propagation, and resource cleanup semantics. Add tests exercising timeout triggering: mock fetch to delay beyond 30s to verify AbortError handling, clearTimeout invocation, and proper error message generation for timeout scenarios.
Developer Documentation ❓ Inconclusive No result was produced after verification. Marking as INCONCLUSIVE. Re-run the check or adjust instructions to produce a final result.
Module-Level Documentation ❓ Inconclusive No result was produced after verification. Marking as INCONCLUSIVE. Re-run the check or adjust instructions to produce a final result.
Observability ❓ Inconclusive No result was produced after verification. Marking as INCONCLUSIVE. Re-run the check or adjust instructions to produce a final result.
Security And Privacy ❓ Inconclusive No result was produced after verification. Marking as INCONCLUSIVE. Re-run the check or adjust instructions to produce a final result.
✅ Passed checks (13 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarises the main change: extracting repeated test setup for audit fallback tests into a local helper, which aligns directly with the refactoring scope.
Description check ✅ Passed The description is thorough and directly relevant, detailing the test refactoring, the new helper introduced, validation results, and explicitly noting no production code changes.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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.
Testing (Overall) ✅ Passed Tests are substantive. All assertions verify implementation behaviour. Tests cover critical paths and would fail if key logic were removed. No vacuous assertions detected.
User-Facing Documentation ✅ Passed No user-facing functionality changes present. PR contains only internal test refactoring, developer guide updates, and dependency management. User guide documentation not required.
Testing (Unit And Behavioural) ✅ Passed Tests verify meaningful behaviour, edge cases, error paths, and invariants. Tests exercise runAuditJson boundary without testing internal helpers as standalone units.
Testing (Property / Proof) ✅ Passed PR introduces no invariants over ranges, states, or orderings. Changes are test refactoring, version bump, and parity validation only. Property testing not required.
Testing (Compile-Time / Ui) ✅ Passed PR refactors functional tests for audit utilities and parity checking. No compile-time behaviour or UI-adjacent output present. Uses unit assertions, not snapshots. Check not applicable.
Unit Architecture ✅ Passed Helpers maintain query/command separation. Dependencies are injectable and properly tested. Composability preserved. Duplication resolved via delegation.
Domain Architecture ✅ Passed The PR changes only build/deployment infrastructure, testing utilities, and documentation. No changes modify domain business logic. The PR does not violate domain architecture boundaries.
Performance And Resource Use ✅ Passed Changes maintain O(1) complexity over fixed array size. Test refactoring adds only helper functions. No algorithmic regressions, unbounded growth, repeated I/O, or unnecessary allocation.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/audit-utils-refactors

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

codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos leynos marked this pull request as ready for review May 3, 2026 23:45
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@frontend-pwa/scripts/audit-utils.test.mjs`:
- Around line 78-99: The helper setupRetiredEndpointFallback currently
duplicates the 410 retired-endpoint fixture by directly mocking spawnSyncMock
with createPnpmResult; replace its body to call the existing
setupRetiredPnpmAudit helper instead so the 410 payload/message is
centralized—specifically, remove the spawnSyncMock.mockReturnValueOnce(...)
chain in setupRetiredEndpointFallback and invoke setupRetiredPnpmAudit([{ name:
'frontend-pwa', dependencies }]) so createPnpmResult and the
ERR_PNPM_AUDIT_BAD_RESPONSE payload are provided by the single reusable
setupRetiredPnpmAudit implementation.
🪄 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: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 08272ee8-6a50-40ac-bbae-27492db035c5

📥 Commits

Reviewing files that changed from the base of the PR and between a13cedc and c24bd8b.

📒 Files selected for processing (1)
  • frontend-pwa/scripts/audit-utils.test.mjs

Comment thread frontend-pwa/scripts/audit-utils.test.mjs Outdated
@leynos

This comment was marked as resolved.

@coderabbitai

This comment was marked as resolved.

Replace duplicate 410 pnpm retry mock setup in setupRetiredEndpointFallback by reusing setupRetiredPnpmAudit for the shared retired-endpoint payload and message.
codescene-delta-analysis[bot]

This comment was marked as outdated.

coderabbitai[bot]

This comment was marked as resolved.

Add explicit assertions for the retired-endpoint fallback path so the tests
verify the pnpm audit command runs first, the dependency listing runs second,
and the bulk advisory endpoint is called.
codescene-delta-analysis[bot]

This comment was marked as outdated.

coderabbitai[bot]

This comment was marked as resolved.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented May 7, 2026

@coderabbitai Please suggest a fix for this issue and supply a prompt for an AI coding agent to enable it to apply the fix. Include the file and symbol names indicated in the issue at the head of your response. Ensure that this is validated against the current version of the codegraph.

If further refinement to address this finding would be deleterious, please supply a clear explanatory one to two paragraph markdown message I can paste into the CodeScene web ui's diagnostic suppression function so this diagnostic can be silenced.

frontend-pwa/scripts/audit-utils.test.mjs

Comment on file


  it('throws a clear error when the bulk advisory endpoint fails', async () => {
    setupRetiredPnpmAudit();
    setupRetiredEndpointFallback();

❌ New issue: Code Duplication
The module contains 2 functions with similar structure: 'rejects blank bulk advisory responses instead of treating them as empty JSON','throws a clear error when the bulk advisory endpoint fails'

@coderabbitai

This comment was marked as resolved.

Move the repeated retired-endpoint spawn call-order checks into a local
helper in the runAuditJson suite. Keep the asserted commands and encoding
options unchanged while removing duplicated test assertions.
codescene-delta-analysis[bot]

This comment was marked as outdated.

Pin `basic-ftp` and `ip-address` to patched releases in both Bun and
pnpm override blocks. Regenerate the lockfiles so the audit path resolves
away from the vulnerable transitive versions reported by pnpm audit.

Include `ip-address` in the override parity check so future security pins
stay aligned across both installers.
codescene-delta-analysis[bot]

This comment was marked as outdated.

Replace the duplicated retired-endpoint error-path tests with a single
table-driven Vitest case. Keep the mocked responses and fallback flow
assertions unchanged while removing the repeated test structure.
codescene-delta-analysis[bot]

This comment was marked as outdated.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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 `@frontend-pwa/scripts/audit-utils.test.mjs`:
- Around line 203-243: The table-driven test currently only checks call counts
for fetch but doesn't verify the actual fallback URL used; after the existing
expectations in the test for runAuditJson (i.e. after the spawnSync and fetch
call count assertions) add an assertion to verify that fetch was invoked with
the retired/fallback endpoint URL returned by setupRetiredEndpointFallback (or
the concrete fallback URL string) — locate the test using the names runAuditJson
and setupRetiredEndpointFallback and assert fetch.mock.calls[0][0] (or
equivalent first-argument check) equals the expected fallback URL to harden the
error-path test.
🪄 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: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8525adcb-dd3f-4e39-805a-e9561ce9be0c

📥 Commits

Reviewing files that changed from the base of the PR and between 087d7e7 and 33e1a18.

📒 Files selected for processing (1)
  • frontend-pwa/scripts/audit-utils.test.mjs

Comment thread frontend-pwa/scripts/audit-utils.test.mjs
@leynos
Copy link
Copy Markdown
Owner Author

leynos commented May 8, 2026

@coderabbitai Have the following now been resolved?

frontend-pwa/scripts/audit-utils.test.mjs (1)

199-212: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win
Assert fallback-path interactions in all three fallback-behaviour tests.
Add explicit checks after each runAuditJson() invocation to prove the fallback executed (pnpm audit --json then pnpm ls --json --depth Infinity, plus one bulk-endpoint fetch). Line 200, Line 215, and Line 244 currently validate result shape/error only.

Apply interaction assertions in the three tests
@@
   it('throws a clear error when the bulk advisory endpoint fails', async () => {
     setupRetiredEndpointFallback();
@@
     await expect(runAuditJson()).rejects.toThrow(
       'Bulk advisory audit failed (503 Service Unavailable)',
     );
+    expect(spawnSyncMock).toHaveBeenNthCalledWith(
+      1,
+      'pnpm',
+      ['audit', '--json'],
+      expect.objectContaining({ encoding: 'utf8' }),
+    );
+    expect(spawnSyncMock).toHaveBeenNthCalledWith(
+      2,
+      'pnpm',
+      ['ls', '--json', '--depth', 'Infinity'],
+      expect.objectContaining({ encoding: 'utf8' }),
+    );
+    expect(fetch).toHaveBeenCalledTimes(1);
+    expect(String(fetch.mock.calls[0][0])).toBe(
+      'https://registry.npmjs.org/-/npm/v1/security/advisories/bulk',
+    );
   });
@@
   it('normalizes advisory IDs from the bulk payload URL to lowercase groups', async () => {
     setupRetiredEndpointFallback();
@@
     expect(result.json.advisories).toEqual({
       'GHSA-vghf-hv5q-vc2g': expect.objectContaining({
         [githubAdvisoryIdKey]: 'GHSA-vghf-hv5q-vc2g',
         [packageNameKey]: 'validator',
       }),
     });
+    expect(spawnSyncMock).toHaveBeenNthCalledWith(
+      1,
+      'pnpm',
+      ['audit', '--json'],
+      expect.objectContaining({ encoding: 'utf8' }),
+    );
+    expect(spawnSyncMock).toHaveBeenNthCalledWith(
+      2,
+      'pnpm',
+      ['ls', '--json', '--depth', 'Infinity'],
+      expect.objectContaining({ encoding: 'utf8' }),
+    );
+    expect(fetch).toHaveBeenCalledTimes(1);
+    expect(String(fetch.mock.calls[0][0])).toBe(
+      'https://registry.npmjs.org/-/npm/v1/security/advisories/bulk',
+    );
   });
@@
   it('rejects blank bulk advisory responses instead of treating them as empty JSON', async () => {
     setupRetiredEndpointFallback();
@@
     await expect(runAuditJson()).rejects.toThrow(
       'Failed to parse bulk advisory audit JSON: response body was empty.',
     );
+    expect(spawnSyncMock).toHaveBeenNthCalledWith(
+      1,
+      'pnpm',
+      ['audit', '--json'],
+      expect.objectContaining({ encoding: 'utf8' }),
+    );
+    expect(spawnSyncMock).toHaveBeenNthCalledWith(
+      2,
+      'pnpm',
+      ['ls', '--json', '--depth', 'Infinity'],
+      expect.objectContaining({ encoding: 'utf8' }),
+    );
+    expect(fetch).toHaveBeenCalledTimes(1);
+    expect(String(fetch.mock.calls[0][0])).toBe(
+      'https://registry.npmjs.org/-/npm/v1/security/advisories/bulk',
+    );
   });

Also applies to: 214-241, 243-256

🤖 Prompt for AI Agents

@coderabbitai

This comment was marked as resolved.

Add the bulk advisory endpoint URL assertion to the retired-endpoint
error-path table test. Keep the existing mock flow and error assertions
unchanged while verifying the fallback request target.
codescene-delta-analysis[bot]

This comment was marked as outdated.

Add the missing fetch call-count assertion to the advisory ID fallback
test so it verifies both the request count and the bulk advisory URL.
codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented May 8, 2026

@coderabbitai Have the following failed checks now been resolved?

If further work is required, please provide an AI agent prompt for the remaining work to be done to address these failures.

Do not treat warnings as optional or aspirational. Where a change is out of scope for this PR, propose a GitHub issue unless one exists already.

🚥 Pre-merge checks | ✅ 14 | ❌ 4

❌ Failed checks (1 warning, 3 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Testing (Property / Proof) ❓ Inconclusive No result was produced after verification. Marking as INCONCLUSIVE. Re-run the check or adjust instructions to produce a final result.
Domain Architecture ❓ Inconclusive No result was produced after verification. Marking as INCONCLUSIVE. Re-run the check or adjust instructions to produce a final result.
Performance And Resource Use ❓ Inconclusive No result was produced after verification. Marking as INCONCLUSIVE. Re-run the check or adjust instructions to produce a final result.

@coderabbitai

This comment was marked as resolved.

Add JSDoc descriptions and return tags for the retired-endpoint fallback
helpers in the audit utility test suite. Keep the test logic unchanged
while improving docstring coverage.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 8, 2026

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
fd 'audit-utils.test.mjs' --exec cat {}

Length of output: 8406


Let me check whether a GitHub issue already exists for the snapshot-test requirement before proposing one.


🏁 Script executed:

#!/bin/bash
gh issue list --repo leynos/wildside --state open --search "snapshot audit" --json number,title,url
gh issue list --repo leynos/wildside --state open --search "snapshot advisory" --json number,title,url

Length of output: 6


No existing issue found. Creating one now.


🏁 Script executed:

#!/bin/bash
gh issue create \
  --repo leynos/wildside \
  --title "Add snapshot tests for complex advisory structures in audit-utils" \
  --body "## Summary

The audit-utils test suite in \`frontend-pwa/scripts/audit-utils.test.mjs\` validates advisory response structures using explicit \`toEqual\` assertions, but lacks snapshot tests for complex nested advisory payloads. This was identified as out of scope during the refactoring in PR `#350` but should be addressed as a follow-up.

## Background

During review of PR `#350` (https://github.com/leynos/wildside/pull/350), the **Testing (Compile-Time / UI)** check flagged that whilst the suite tests structured JSON audit output, it does not include snapshot assertions for complex nested advisory structures. Snapshot tests would catch unexpected regressions in the shape of advisory data returned by the bulk advisory endpoint fallback.

## Acceptance criteria

- Introduce Vitest snapshot tests (e.g. \`expect(result).toMatchSnapshot()\`) for at least one complex advisory payload in \`frontend-pwa/scripts/audit-utils.test.mjs\`.
- Snapshots should cover the normalised advisory structure produced by the bulk advisory fallback path (e.g. the \`'falls back to the bulk advisory endpoint'\` test case).
- Existing semantic assertions (\`toEqual\`, \`toHaveBeenNthCalledWith\`, etc.) must be retained alongside the new snapshots.
- \`pnpm exec vitest run scripts/audit-utils.test.mjs\` passes with no failures.

## References

- PR `#350`: https://github.com/leynos/wildside/pull/350
- Requested by: `@leynos`
"

Length of output: 46


@leynos: All checks have been resolved or tracked. Here is the full status:


✅ All resolved

Check Status Evidence
Testing (Overall) ✅ Resolved it.each block asserts spawnSyncMock.toHaveBeenNthCalledWith(1…2), fetch.toHaveBeenCalledTimes(1), and the bulk-advisory URL; 'normalizes advisory IDs' likewise has assertFallbackSpawnCalls(), fetch.toHaveBeenCalledTimes(1), and the URL assertion.
Unit Architecture ✅ Resolved setupRetiredEndpointFallback now delegates entirely to setupRetiredPnpmAudit([{ name: 'frontend-pwa', dependencies }]) — no inline spawnSyncMock calls remain.
Domain Architecture ⚠️ ✅ Resolved Same delegation fix eliminates the duplicated 410 fixture payload.
Performance And Resource Use ⚠️ ✅ Resolved DRY principle satisfied; single source of truth established.
Concurrency And State ⚠️ ✅ Resolved Single fixture definition in setupRetiredPnpmAudit; no duplicated shared state.
Module-Level Documentation ✅ Resolved /** @file Tests the shared audit helper, including the bulk advisory fallback. */ is present at the top of the file.

📋 Out of scope — tracked as issue

Check Status Action
Testing (Compile-Time / UI) ⚠️ Out of scope for this refactoring PR GitHub issue #353 created: Add snapshot tests for complex advisory structures in audit-utils

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