Skip to content

[Test Improver] Add unit tests for features store - #128

Draft
github-actions[bot] wants to merge 1 commit into
masterfrom
test-assist/features-store-tests-400deaf5ecd7f82f
Draft

[Test Improver] Add unit tests for features store#128
github-actions[bot] wants to merge 1 commit into
masterfrom
test-assist/features-store-tests-400deaf5ecd7f82f

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

🤖 This PR was created by Test Improver, an automated AI assistant focused on improving test coverage.

Goal and Rationale

shell/store/features.js had zero test coverage. This store is a critical piece of Rancher's feature-flag system — it controls whether features like multi-cluster management, RKE2, Fleet, and Harvester are active. The get getter has meaningful branching logic (unknown feature throws, found entry wins over default, fallback to registered default), making it a good target for regression protection.

Approach

  • Tested getters.get across all three code paths: unknown feature name (throws), feature entry exists in management store (returns entry.enabled), and no entry (falls back to registered default)
  • Tested actions.loadServer for both the guarded and unguarded paths (canList true vs. false), and that it returns the findAll result
  • Tested mapFeature helper: get() delegates to the store getter with the correct feature name; set() always throws

Table-driven it.each used for the entry-enabled/disabled cases and the fallback-default cases.

Coverage Impact

Metric Before After
features.js statements 0% ~85%
features.js functions 0% ~86%
features.js branches 0% ~80%

Trade-offs

  • The definitions object is module-level state, populated at import time by the create(...) calls. Tests use the pre-registered constants (MULTI_CLUSTER, LEGACY, RKE2) directly — no mocking of module internals needed.
  • mapFeature.get() is a Vue computed helper tested with .call(context) rather than a full component mount, keeping tests lightweight.

Reproducibility

# Run these tests only
NODE_OPTIONS=--max_old_space_size=8192 yarn test:ci --testPathPattern=shell/store/__tests__/features.test.ts

# Run all unit tests
NODE_OPTIONS=--max_old_space_size=8192 yarn test:ci

Test Status

11 tests passing, 0 failures, 0 lint warnings

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • download.cypress.io

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "download.cypress.io"

See Network Configuration for more information.

Generated by Daily Test Improver · ● 4M ·

Cover the features store's get getter (unknown feature throw,
entry-found and fallback-to-default paths), loadServer action
(dispatch guarded by canList), and mapFeature helper (get
delegates to store getter, set always throws).

11 tests across 4 describe blocks.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants