Skip to content

fix(ARTESCA-17607): fix Rubrik bucket name UX issues (points 2-6)#1213

Closed
damiengillesscality wants to merge 699 commits into
development/3.0from
bugfix/ARTESCA-17607-rubrik-bucket-ux-fixes
Closed

fix(ARTESCA-17607): fix Rubrik bucket name UX issues (points 2-6)#1213
damiengillesscality wants to merge 699 commits into
development/3.0from
bugfix/ARTESCA-17607-rubrik-bucket-ux-fixes

Conversation

@damiengillesscality

@damiengillesscality damiengillesscality commented May 28, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes points 2–6 from ARTESCA-17607 — UX issues on the bucket name field and form validation in the Rubrik ISV assistant.

  • Point 2 — Error message discrepancy: {N} in the Joi message string was treated as a Joi template variable and resolved to empty, producing "must end with -rubrik-". Replaced with literal <number> in both string.min and string.pattern.name messages.
  • Point 3 — Help text visibility: Wired helpText from fieldOverrides.bucketName through buildFieldsBucketArrayFieldBucketFieldFormGroup.help so the format requirement renders as visible text below the field instead of being hidden behind the IconHelp tooltip.
  • Point 4 — Tooltip font size: Wired tooltip from fieldOverrides.bucketName through the same chain so the platform-specific tooltip (using ListItem, consistent with other fields) is used instead of the fallback plain <Text> tooltip.
  • Point 5 — "an unique": Fixed "Choose an unique name""Choose a unique name" in defaultBucketNameTooltip.
  • Point 6 — Immutable Backup help text: Updated to "Enables object lock on the bucket, making backups permanent and unchangeable.".

Test plan

  • In the Rubrik ISV assistant, enter a bucket name shorter than 3 chars — error should read Bucket name must end with -rubrik-<number> (e.g. my-archive-rubrik-0)
  • Enter a bucket name without the -rubrik-<N> suffix — same error message
  • Verify helper text Must end with -rubrik-<number> (e.g. my-archive-rubrik-0) is visible below the bucket name field without opening any tooltip
  • Verify the tooltip font matches other fields (uses ListItem structure)
  • Check the Immutable Backup toggle shows the updated helper text
  • Run unit tests: npx jest --testNamePattern="rubrik|Rubrik"

🤖 Generated with Claude Code

ZiyangLinScality and others added 30 commits February 17, 2026 10:08
…plication detection logic

- Introduced KASTEN_APPLICATION constant to constants.ts.
- Updated detectBucketApplication function to prioritize Kasten application detection.
- Refactored resource definitions for improved readability in policy functions.
Add type definitions for useIsVeeamCredentialsValid and
useChangeVeeamCredentials hooks to enable credential validation

feat(hooks): add VeeamCredentialContext for credential management

Implement Context-based pattern for Veeam credential validation:
- VeeamCredentialProvider checks library availability and calls hooks
- useVeeamCredentialManagement consumes context (always safe to call)
- Handles cache invalidation on successful credential updates
- Follows React Rules of Hooks (no conditional hook calls)

Tests cover credential states, library availability, and cache invalidation

fix: reorder import statements for clarity in VeeamCredentialContext

test: remove implementation details from useVeeamCredentialManagement tests
Add VeeamCredentialFields component with username/password inputs for
Veeam administrator credentials. Component integrates with VeeamCredentialContext
for validation and displays warning banner when credentials are required.
Includes toast notifications and comprehensive test coverage.
Cache invalidation for the veeam_credential_valid query belongs to the
Artesca library, which owns both the query and the mutation. Zenko-ui
should not reach into Artesca's query keys.
…ort and remove unused useDataBrowserS3Config hook
…Row components with enhanced capacity handling and validation

- Updated VeeamCapacityModal to include onCapacityUpdated callback for capacity updates.
- Refactored capacity validation logic and improved test cases for better clarity and coverage.
- Enhanced VeeamCapacityOverviewRow to handle capacity updates and display loading/error states more effectively.
With capacityCache in place, gcTime: 0 is unnecessary and causes
a "Loading..." flash on remount. Default caching + background
refetch provides better UX.

Co-authored-by: Cursor <cursoragent@cursor.com>
Monaco Editor required bundled static assets, custom loader config,
and theme handling. The core-ui Editor (CodeMirror-based) handles all
of this internally, reducing bundle size and maintenance overhead.
…ts to mock resolved values for better test reliability
…urity advisories

Added allowances for certain GitHub security advisories related to @scality/cloudserverclient and aws-sdk to facilitate dependency review until necessary upgrades are made.
…nt mocks

Added a custom ResizeObserver implementation and improved DOM measurement mocks in Jest setup to support tests requiring offset dimensions and getBoundingClientRect. Updated test utility to reflect changes in AutoSizer's dependency on these measurements.
…for CRR destination fields

- Introduced a new optional `role` property in the Replicationstreaminternalv1Destination interface for CRR replication.
- Added ReplicationCRRDestinationFields component to handle target bucket input for CRR replication.
- Updated DataBrowser component to include replication role settings and integrate the new fields for CRR destinations.
JBWatenbergScality and others added 26 commits May 22, 2026 15:17
normalizeStringifiedSchemaArgs and deriveHostBasePath had their JSDoc
blocks stacked at the top of the file, separated from the functions by
47 and 104 lines respectively. Move each block to sit directly above
the function it documents.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The library's createS3Tools wrapper now repairs LLM-stringified
object/array params against each tool's declared inputSchema, so the
in-host normalizeStringifiedSchemaArgs / resolveSchemaType duplicates
in createZenkoS3Tools.ts are no longer needed. Drop them and the
in-execute repair call — the library does it before our wrapper runs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat(ZKUI-472): WebMCP tools for AI agent automation
Part of the implementation plan from scality/agent-task#222.
Part of the implementation plan from scality/agent-task#222.
Part of the implementation plan from scality/agent-task#222.
- DataServiceRoleProvider: respect inlineLoader prop in the new
  accountName guard and use ReactElement children for Loader to
  fix the TS2747 build error
- ISVSummary.test: fix duplicate react-router import, fix
  QueryClientProvider import path (../../../../), and replace
  jest.restoreAllMocks() with targeted spy restore to avoid
  nuking the module-level useGetS3ServicePoint mock
- Routes.test: mock useAccounts for the update-user route test
  so DataServiceRoleProvider does not show the loading guard

Issue: ARTESCA-17583
…ating

On Finish, if STS role pre-warm fails show an error toast and abort
navigation instead of silently swallowing the error. Adds ToastProvider
to the shared test Wrapper so useToast() works across all ISVSummary
tests, and updates the rejection test to assert on the error toast and
the absence of navigation.

Issue: ARTESCA-17583
…hanism

Remove the setRolePromise call assertion from the success case — it
tests the implementation, not the feature. The navigation to the bucket
page is the observable outcome that matters.

Issue: ARTESCA-17583
The truststore tests override useDeployedApps with a mockImplementation
that destructures `kind` from its argument. jest.clearAllMocks() does
not reset mockImplementation, so the override leaked into the sidebar
Data Browser entry gating tests. useIsVeeamVBROnly calls useDeployedApps
with no arguments, causing a destructuring crash.

Adding an afterEach that restores the mock to return [] breaks the
leaked dependency.

Issue: ARTESCA-17583
…n assertions

- Remove mockAssumeRoleWithWebIdentity.toHaveBeenCalledWith assertion from
  the basic render test — children rendering already proves the feature
- Remove redundant toHaveBeenCalledWith from the remount test — there is
  only one role ARN in the test so the check adds no value
- Rename all tests to describe observable behavior rather than internal
  mechanisms (no AssumeRole, roleArn, assumeRoleQuery, credentialProvider,
  refetchInterval in names)

Issue: ARTESCA-17583
Part of the implementation plan from scality/agent-task#225.
- Merge duplicate testUtil import in ISVSummary.test.tsx
- DataServiceRoleProvider: remove @ts-expect-error on second loading
  guard and use the same <Loader><div>Loading...</div></Loader> pattern
  as the first guard for consistency
- Routes.test: restore useDeployedApps to the testUtil default
  implementation after truststore tests instead of setting to [],
  preventing any future leak to tests added after this describe block

Issue: ARTESCA-17583
Button from @scality/core-ui passes onClick straight to the native
button element, which ignores the return value. An async onClick that
rejects becomes an unhandled rejection. Wrap the async body in an IIFE
so onFinish returns void synchronously and all errors are caught inside.

Issue: ARTESCA-17583
…r modal

Adds three distinct tooltip states in the role selector table's role name cell:
- storage-usage-consumer-role: warning icon (Exclamation-circle) with
  "This role has limited access to some UI sections"
- Other Scality predefined roles: info icon with "This is a Scality predefined Role"
- Custom IAM roles: info icon with "Some UI sections may not be available
  depending on this role's permissions"

Icons gain ariaLabel props for screen-reader accessibility.

Issue: ZKUI-477
…nt/role selector modal

- Show info tooltip on all role name cells with role-specific messages:
  storage-usage-consumer-role gets a "limited access" message, other
  Scality predefined roles get a generic message, custom IAM roles warn
  that some UI sections may not be available
- Display a warning banner ("Data Browser unavailable for this role")
  at the top of the modal when storage-usage-consumer-role is selected
- Fix role name column wrapping by removing excessive marginRight and
  bumping minWidth to 16rem
- Add semantic ariaLabel values on all Info icons for accessibility

Issue: ZKUI-477
Replace weak length assertions and index-based queries with singular
findBy queries, and simplify async waits using findByText directly.

Issue: ZKUI-477
…M User' option

When the Veeam VBR Assistant finds no IAM user matching the expected name
for the selected account, the 'Use an existing IAM User' radio was silently
disabled with no explanation, causing users to assume the assistant was broken.

Issue: ARTESCA-17418
…ints 2-6)

- Point 2: fix Joi error message template — {N} was treated as a Joi variable
  and resolved to empty; replaced with literal <number> in both string.min and
  string.pattern.name messages so the full error always shows
- Point 3: wire helpText from fieldOverrides through buildFields → BucketArrayField
  → BucketField → FormGroup so it renders as visible helper text below the field
- Point 4: wire tooltip from fieldOverrides through the same chain so the platform
  tooltip (using ListItem) is used instead of the default Text-based tooltip,
  matching the font size of other fields
- Point 5: fix 'an unique' → 'a unique' in defaultBucketNameTooltip
- Point 6: update Immutable Backup helper text to
  'Enables object lock on the bucket, making backups permanent and unchangeable.'

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@bert-e

bert-e commented May 28, 2026

Copy link
Copy Markdown
Contributor

Hello damiengillesscality,

My role is to assist you with the merge of this
pull request. Please type @bert-e help to get information
on this process, or consult the user documentation.

Available options
name description privileged authored
/after_pull_request Wait for the given pull request id to be merged before continuing with the current one.
/bypass_author_approval Bypass the pull request author's approval
/bypass_build_status Bypass the build and test status
/bypass_commit_size Bypass the check on the size of the changeset TBA
/bypass_incompatible_branch Bypass the check on the source branch prefix
/bypass_jira_check Bypass the Jira issue check
/bypass_peer_approval Bypass the pull request peers' approval
/bypass_leader_approval Bypass the pull request leaders' approval
/approve Instruct Bert-E that the author has approved the pull request. ✍️
/create_pull_requests Allow the creation of integration pull requests.
/create_integration_branches Allow the creation of integration branches.
/no_octopus Prevent Wall-E from doing any octopus merge and use multiple consecutive merge instead
/unanimity Change review acceptance criteria from one reviewer at least to all reviewers
/wait Instruct Bert-E not to run until further notice.
Available commands
name description privileged
/help Print Bert-E's manual in the pull request.
/status Print Bert-E's current status in the pull request TBA
/clear Remove all comments from Bert-E from the history TBA
/retry Re-start a fresh build TBA
/build Re-start a fresh build TBA
/force_reset Delete integration branches & pull requests, and restart merge process from the beginning.
/reset Try to remove integration branches unless there are commits on them which do not appear on the source branch.

Status report is not available.

@bert-e

bert-e commented May 28, 2026

Copy link
Copy Markdown
Contributor

Request integration branches

Waiting for integration branch creation to be requested by the user.

To request integration branches, please comment on this pull request with the following command:

/create_integration_branches

Alternatively, the /approve and /create_pull_requests commands will automatically
create the integration branches.

@bert-e
bert-e deleted the bugfix/ARTESCA-17607-rubrik-bucket-ux-fixes branch May 28, 2026 09:57
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.

7 participants