fix(ARTESCA-17607): fix Rubrik bucket name UX issues (points 2-6)#1213
Closed
damiengillesscality wants to merge 699 commits into
Closed
fix(ARTESCA-17607): fix Rubrik bucket name UX issues (points 2-6)#1213damiengillesscality wants to merge 699 commits into
damiengillesscality wants to merge 699 commits into
Conversation
…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.
…bility and context management
…o include 'ISV' and 'metadatasearch'
… credential update
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.
…lidation' into q/4.2
…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>
…on edit form pages
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.
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
Issue: ARTESCA-17418
Issue: ARTESCA-17418
…ser-radio' into q/4
…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>
Contributor
Hello damiengillesscality,My role is to assist you with the merge of this Available options
Available commands
Status report is not available. |
Contributor
Request integration branchesWaiting for integration branch creation to be requested by the user. To request integration branches, please comment on this pull request with the following command: Alternatively, the |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes points 2–6 from ARTESCA-17607 — UX issues on the bucket name field and form validation in the Rubrik ISV assistant.
{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 bothstring.minandstring.pattern.namemessages.helpTextfromfieldOverrides.bucketNamethroughbuildFields→BucketArrayField→BucketField→FormGroup.helpso the format requirement renders as visible text below the field instead of being hidden behind the IconHelp tooltip.tooltipfromfieldOverrides.bucketNamethrough the same chain so the platform-specific tooltip (usingListItem, consistent with other fields) is used instead of the fallback plain<Text>tooltip."Choose an unique name"→"Choose a unique name"indefaultBucketNameTooltip."Enables object lock on the bucket, making backups permanent and unchangeable.".Test plan
Bucket name must end with -rubrik-<number> (e.g. my-archive-rubrik-0)-rubrik-<N>suffix — same error messageMust end with -rubrik-<number> (e.g. my-archive-rubrik-0)is visible below the bucket name field without opening any tooltipnpx jest --testNamePattern="rubrik|Rubrik"🤖 Generated with Claude Code