Skip to content

Conversation

dpanshug
Copy link
Contributor

@dpanshug dpanshug commented Jul 21, 2025

RHOAIENG-28418

Description

Added context, route, APIs, backend proxy

Screenshot 2025-07-21 at 9 55 53 PM Screenshot 2025-07-22 at 3 36 10 PM

How Has This Been Tested?

Run backend:
export FEAST_REGISTRY_SERVICE_HOST=localhost && export FEAST_REGISTRY_SERVICE_PORT=8445 && cd backend && npm run start:dev

Enable port forwarding:
kubectl port-forward -n default svc/feast-multiproject-registry-rest 8445:443

Run frontend:
npm run start:dev

Test Impact

Added unit tests for hooks

Request review criteria:

Self checklist (all need to be checked):

  • The developer has manually tested the changes and verified that the changes work
  • Testing instructions have been added in the PR body (for PRs involving changes that are not immediately obvious).
  • The developer has added tests or explained why testing cannot be added (unit or cypress tests for related changes)

If you have UI changes:

  • Included any necessary screenshots or gifs if it was a UI change.
  • Included tags to the UX team if it was a UI/UX change.

After the PR is posted & before it merges:

  • The developer has tested their solution on a cluster by using the image produced by the PR to main

Summary by CodeRabbit

Summary by CodeRabbit

  • New Features

    • Introduced a new Feature Store area with project and entity management, including API integrations and React context for state management.
    • Added React hooks for fetching Feature Store projects, entities, and custom resources with pagination and error handling.
    • Added components for selecting projects and viewing entities, supporting dynamic navigation and improved UI flows.
    • Added centralized error handling utilities for Feature Store API interactions.
    • Added support for Feature Store API versioning and standardized UI label constants.
  • Refactor

    • Replaced previous context-based project management with a new context and hooks architecture.
    • Updated routing and navigation for Feature Store pages to support new project and entity structures.
    • Adjusted component props and data flows to accommodate new data types and APIs.
    • Simplified and reorganized Feature Store selectors and navigators for better maintainability.
    • Updated import paths and removed deprecated files to streamline the codebase.
  • Bug Fixes

    • Enhanced error and loading state handling in Feature Store components and hooks.
  • Tests

    • Added comprehensive tests for new hooks and utility functions related to Feature Store API interactions and state management.
    • Added tests for API functions and error handling utilities.
  • Chores

    • Updated environment configuration to support new backend services.
    • Updated type definitions and constants to standardize Feature Store API usage and improve maintainability.
  • Revert

    • Removed deprecated context and navigator components related to the old Feature Store project management approach.

* Backend proxy setup
* Routes
* Context
* Hooks
* API
* Unit tests
Copy link
Contributor

coderabbitai bot commented Jul 21, 2025

Walkthrough

This change implements a new architecture for Feature Store project and entity management, introducing new backend and frontend APIs, React hooks, and context providers. It refactors the frontend to use API-driven project/entity data, removes legacy project context, and adds comprehensive tests for the new hooks. Several new components and utility modules are introduced, while obsolete files are deleted or refactored.

Changes

File(s) Change Summary
.env.development Added Feast registry service host/port environment variables.
backend/src/routes/api/service/featurestore/index.ts, backend/src/types.ts Added FeatureStoreKind type and new proxied service for FeatureStore CRs.
frontend/src/__mocks__/mockDataSources.ts, frontend/src/__mocks__/mockFeatureServices.ts, frontend/src/__mocks__/mockFeatureStoreProject.ts, frontend/src/__mocks__/mockFeatureViews.ts Updated import paths for types.
frontend/src/__mocks__/mockEntities.ts Updated types, import path, and return value to include pagination.
frontend/src/api/featureStore/custom.ts, frontend/src/api/featureStore/errorUtils.ts Added new API call functions and error handling utilities.
frontend/src/concepts/areas/const.ts Commented out required Feast operator component for Feature Store area.
frontend/src/concepts/featureStore/context/FeatureStoreProjectContext.tsx, frontend/src/concepts/featureStore/useFeatureStoreEnabled.ts, frontend/src/pages/featureStore/screens/FeatureStoreProjectSelectorNavigator.tsx Deleted legacy project context/provider and selector navigator.
frontend/src/k8sTypes.ts Added optional to field to RouteKind type.
frontend/src/pages/featureStore/FeatureStore.tsx Updated import paths and redirect path function signature.
frontend/src/pages/featureStore/FeatureStoreContext.tsx Introduced new Feature Store context/provider and hooks.
frontend/src/pages/featureStore/FeatureStoreCoreLoader.tsx Refactored to use new context, hooks, and error/empty state logic.
frontend/src/pages/featureStore/FeatureStoreRoutes.tsx Simplified routing, updated route and redirect logic.
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreCR.spec.tsx, frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreEntities.spec.tsx, frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreObject.spec.tsx, frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreProjects.test.tsx Added comprehensive tests for new hooks and utilities.
frontend/src/pages/featureStore/apiHooks/useFeatureStoreAPIState.tsx, frontend/src/pages/featureStore/apiHooks/useFeatureStoreCR.tsx, frontend/src/pages/featureStore/apiHooks/useFeatureStoreEnitites.tsx, frontend/src/pages/featureStore/apiHooks/useFeatureStoreObject.tsx, frontend/src/pages/featureStore/apiHooks/useFeatureStoreProjects.tsx Added new React hooks for Feature Store API, CR, entities, projects, and object extraction.
frontend/src/pages/featureStore/const.ts Added constants and enum for Feature Store API and UI.
frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelector.tsx Refactored to use new hooks, types, and props for project selection.
frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelectorNavigator.tsx Added new navigator component using updated hooks and navigation logic.
frontend/src/pages/featureStore/screens/entities/FeatureStoreEntities.tsx, frontend/src/pages/featureStore/screens/entities/FeatureStoreEntitiesListView.tsx Added new components for entity list display and management.
frontend/src/pages/featureStore/types.ts Introduced pagination types, updated API signatures, and added new API interfaces.
frontend/src/api/featureStore/__tests__/custom.spec.ts, frontend/src/api/featureStore/__tests__/errorUtils.spec.ts Added tests for feature store API functions and error handling utilities.
frontend/src/pages/featureStore/screens/components/InvalidFeatureStoreProject.tsx Added component to display invalid project error with navigation.
frontend/src/pages/featureStore/utils.ts Added utility to get display names for feature store objects.

Sequence Diagram(s)

sequenceDiagram
    participant UI as User Interface
    participant FSContext as FeatureStoreContextProvider
    participant Hooks as FeatureStore Hooks
    participant API as FeatureStore API (custom.ts)
    participant Backend as Backend Proxy Service

    UI->>FSContext: Render with children
    FSContext->>Hooks: Provide API state, current project
    UI->>Hooks: useFeatureStoreProjects/useFeatureStoreEntities
    Hooks->>API: listFeatureStoreProject/getEntities
    API->>Backend: Proxy API request (GET /projects or /entities)
    Backend-->>API: Return project/entity list
    API-->>Hooks: Return data or error
    Hooks-->>UI: Provide loading, data, or error state
Loading

Estimated code review effort

4 (~90 minutes)

Possibly related PRs

Suggested labels

lgtm, approved, area/quality

Suggested reviewers

  • pnaik1

Poem

🐇
In burrows deep, we’ve cleared the way,
For Feature Stores to shine today.
With hooks and tests, new paths align,
Projects and entities now intertwine.
Old context gone, new APIs appear—
Let’s hop ahead, the future’s here!
🌱


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 16b5562 and 797edfc.

📒 Files selected for processing (1)
  • backend/src/routes/api/service/featurestore/index.ts (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • backend/src/routes/api/service/featurestore/index.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Lint
✨ Finishing Touches
  • 📝 Generate Docstrings

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
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: 8

🔭 Outside diff range comments (2)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreEnitites.tsx (1)

1-39: Fix filename typo: "Enitites" should be "Entities".

The filename contains a typo - useFeatureStoreEnitites.tsx should be useFeatureStoreEntities.tsx. Please rename the file to correct this spelling error.

frontend/src/pages/featureStore/FeatureStoreCoreLoader.tsx (1)

66-68: Update user-facing message for consistency

The user title and description still reference "Feature Store project" but should be updated to match the new "service" terminology.

-      const userTitle = 'Start by requesting a Feature Store project';
+      const userTitle = 'Start by requesting access to the Feature Store service';
       const userDescription =
-        'Feature Store projects allow you and your team to organize and collaborate on resources within separate namespaces. To request a project, contact your administrator.';
+        'The Feature Store service allows you and your team to organize and collaborate on resources within separate namespaces. To request access, contact your administrator.';
🧹 Nitpick comments (15)
.env.development (1)

22-25: Address dotenv-linter warnings & keep POSIX newline

dotenv-linter flags the new block as unordered and missing a trailing newline.
While ordering is purely cosmetic, many tooling chains fail CI on lint warnings or missing EOF newline.

 MODEL_REGISTRY_NAMESPACE=odh-model-registries

 FEAST_REGISTRY_SERVICE_HOST=localhost
 FEAST_REGISTRY_SERVICE_PORT=8443
+

Adds the blank line and silences the EndingBlankLine warning.
Re-ordering (namespace before host) is optional but recommended for a clean make lint.

frontend/src/pages/featureStore/screens/entities/FeatureStoreEntitiesListView.tsx (2)

9-9: Remove console.log statement.

Console.log statements should be removed from production code. Consider using a proper logging solution or remove this debugging statement.

-  console.log(entities);

4-11: Component appears to be a placeholder implementation.

While the component structure and TypeScript typing are correct, this appears to be a stub implementation that doesn't actually display the entities data. Consider implementing the actual list view functionality or add a TODO comment if this is intentionally incomplete.

backend/src/routes/api/service/featurestore/index.ts (1)

21-22: Improve type safety in the readiness check function.

The readiness check uses any type for the condition parameter, which reduces type safety. Consider defining a proper type for the condition object.

-  (resource) =>
-    !!resource.status?.conditions?.find((c: any) => c.type === 'Registry' && c.status === 'True'),
+  (resource) =>
+    !!resource.status?.conditions?.find((c: { type: string; status: string }) => c.type === 'Registry' && c.status === 'True'),
frontend/src/pages/featureStore/apiHooks/useFeatureStoreObject.tsx (1)

7-14: Consider adding enum validation for better type safety.

The function uses type assertion without validating that the extracted string is actually a valid FeatureStoreObject enum value. Consider adding validation to prevent runtime issues.

export function getFeatureStoreObjectFromPath(pathname: string): FeatureStoreObject {
  const featureStoreObject = pathname.split('/')[2];
  if (featureStoreObject) {
-    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
-    return featureStoreObject as FeatureStoreObject;
+    if (Object.values(FeatureStoreObject).includes(featureStoreObject as FeatureStoreObject)) {
+      // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
+      return featureStoreObject as FeatureStoreObject;
+    }
  }
  return FeatureStoreObject.ENTITIES; // TODO: change default to overview page once we have it
}
frontend/src/api/featureStore/errorUtils.ts (1)

7-26: Consider adding JSDoc documentation for the main error handler.

The handleFeatureStoreFailures function is a key utility that would benefit from documentation explaining its purpose, parameters, and error handling behavior.

+/**
+ * Handles feature store API failures by normalizing error responses
+ * @param promise - The API promise to wrap with error handling
+ * @returns Promise that resolves with the result or throws normalized errors
+ */
 export const handleFeatureStoreFailures = <T>(promise: Promise<T>): Promise<T> =>
frontend/src/pages/featureStore/apiHooks/useFeatureStoreAPIState.tsx (1)

9-21: Consider adding JSDoc documentation for the hook.

This hook would benefit from documentation explaining its purpose, parameters, and return values, especially since it's a key part of the feature store API integration.

+/**
+ * Hook for managing Feature Store API state
+ * @param hostPath - The host path for API requests, or null if not available
+ * @returns Tuple containing the API state and refresh function
+ */
 const useFeatureStoreAPIState = (
   hostPath: string | null,
 ): [apiState: FeatureStoreAPIState, refreshAPIState: () => void] => {
frontend/src/pages/featureStore/apiHooks/useFeatureStoreCR.tsx (1)

18-31: Consider removing redundant filtering.

The implementation filters Feature Store CRs twice:

  1. Via labelSelector query parameter (line 23)
  2. Manual filtering of the results (lines 26-28)

Since the label selector should already filter the results on the server side, the manual filtering appears redundant.

Consider simplifying to:

const listFeatureStoreCR = async (): Promise<FeatureStoreKind | null> => {
  const labelSelector = `${FEATURE_STORE_UI_LABEL_KEY}=${FEATURE_STORE_UI_LABEL_VALUE}`;
  
  const featureStoreCRs = await k8sListResource<FeatureStoreKind>({
    model: FeatureStoreModel,
    queryOptions: { queryParams: { labelSelector } },
  });

-  const filteredFeatureStoreCR = featureStoreCRs.items.filter(
-    (cr) => cr.metadata.labels?.[FEATURE_STORE_UI_LABEL_KEY] === FEATURE_STORE_UI_LABEL_VALUE,
-  );

-  return filteredFeatureStoreCR[0] || null;
+  return featureStoreCRs.items[0] || null;
};
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreProjects.test.tsx (1)

48-229: Consider adding a test for abort signal behavior

The test suite comprehensively covers various scenarios, but it would be beneficial to add a test case that verifies the abort signal behavior when the component unmounts before the API call completes.

Add a test case to verify abort signal functionality:

+  it('should abort the request when component unmounts', async () => {
+    let capturedSignal: AbortSignal | undefined;
+    
+    useFeatureStoreAPIMock.mockReturnValue({
+      api: {
+        listFeatureStoreProject: jest.fn().mockImplementation((opts) => {
+          capturedSignal = opts.signal;
+          return new Promise(() => {}); // Never resolves
+        }),
+      },
+      apiAvailable: true,
+    } as unknown as ReturnType<typeof useFeatureStoreAPI>);
+
+    const renderResult = testHook(useFeatureStoreProjects)();
+    
+    // Wait a tick for the effect to run
+    await act(async () => {
+      await Promise.resolve();
+    });
+    
+    expect(capturedSignal).toBeDefined();
+    expect(capturedSignal?.aborted).toBe(false);
+    
+    // Unmount the hook
+    renderResult.unmount();
+    
+    expect(capturedSignal?.aborted).toBe(true);
+  });
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreCR.spec.tsx (1)

1-1: File naming inconsistency detected

This test file uses .spec.tsx extension while useFeatureStoreProjects.test.tsx uses .test.tsx. Consider standardizing the test file naming convention across the codebase.

frontend/src/pages/featureStore/FeatureStoreContext.tsx (3)

22-28: Consider removing the TypeScript assertion in default context values.

The type assertion on line 24 could be avoided by providing a more type-safe default value or restructuring the default state.

export const FeatureStoreContext = React.createContext<FeatureStoreContextType>({
-  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
-  apiState: { apiAvailable: false, api: null as unknown as FeatureStoreAPIs },
+  apiState: { apiAvailable: false, api: {} as FeatureStoreAPIs },
  refreshAPIState: () => undefined,
  currentProject: undefined,
  setCurrentProject: () => undefined,
});

Alternatively, consider defining a proper default API object that matches the FeatureStoreAPIs interface.


44-46: Potential unnecessary re-renders from effect dependency.

The effect synchronizes currentProject with the URL parameter, but since both are derived from the same source, this might cause unnecessary re-renders.

Consider whether this effect is necessary. If fsProjectName changes trigger component re-renders anyway, you might be able to use fsProjectName directly as currentProject or implement a more efficient synchronization:

- const [currentProject, setCurrentProject] = React.useState<string | undefined>(fsProjectName);
-
- React.useEffect(() => {
-   setCurrentProject(fsProjectName);
- }, [fsProjectName]);
+ const [currentProject, setCurrentProject] = React.useState<string | undefined>();
+
+ React.useEffect(() => {
+   if (fsProjectName !== currentProject) {
+     setCurrentProject(fsProjectName);
+   }
+ }, [fsProjectName, currentProject]);

66-73: Consider renaming for clarity and consistency.

The hook returns refreshAllAPI but the context property is named refreshAPIState. Consider using consistent naming throughout the interface.

export const useFeatureStoreAPI = (): UseFeatureStoreAPI => {
-  const { apiState, refreshAPIState: refreshAllAPI } = React.useContext(FeatureStoreContext);
+  const { apiState, refreshAPIState } = React.useContext(FeatureStoreContext);

  return {
-    refreshAllAPI,
+    refreshAPIState,
    ...apiState,
  };
};

Or update the type definition to match:

type UseFeatureStoreAPI = FeatureStoreAPIState & {
-  refreshAllAPI: () => void;
+  refreshAPIState: () => void;
};
frontend/src/pages/featureStore/types.ts (2)

3-10: Consider camelCase naming for consistency with TypeScript conventions.

The pagination type uses snake_case naming (total_count, total_pages, has_next, has_previous) which is inconsistent with typical TypeScript/JavaScript camelCase conventions used elsewhere in the codebase. If this naming comes directly from the backend API response, this is acceptable for maintaining API contract alignment.


185-186: Consider consistent naming convention.

The functional changes look good, but consider naming consistency: listFeatureStoreProject vs getEntities. Both methods perform similar list/get operations but use different verbs.

Consider standardizing to either:

-  listFeatureStoreProject: GetProjects;
-  getEntities: GetEntities;
+  getProjects: GetProjects;
+  getEntities: GetEntities;

Or:

-  listFeatureStoreProject: GetProjects;
-  getEntities: GetEntities;
+  listProjects: GetProjects;
+  listEntities: GetEntities;
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 516a831 and 439a217.

📒 Files selected for processing (34)
  • .env.development (1 hunks)
  • backend/src/routes/api/service/featurestore/index.ts (1 hunks)
  • backend/src/types.ts (1 hunks)
  • frontend/src/__mocks__/mockDataSources.ts (1 hunks)
  • frontend/src/__mocks__/mockEntities.ts (2 hunks)
  • frontend/src/__mocks__/mockFeatureServices.ts (1 hunks)
  • frontend/src/__mocks__/mockFeatureStoreProject.ts (1 hunks)
  • frontend/src/__mocks__/mockFeatureViews.ts (1 hunks)
  • frontend/src/api/featureStore/custom.ts (1 hunks)
  • frontend/src/api/featureStore/errorUtils.ts (1 hunks)
  • frontend/src/concepts/areas/const.ts (1 hunks)
  • frontend/src/concepts/featureStore/context/FeatureStoreProjectContext.tsx (0 hunks)
  • frontend/src/concepts/featureStore/useFeatureStoreEnabled.ts (0 hunks)
  • frontend/src/k8sTypes.ts (1 hunks)
  • frontend/src/pages/featureStore/FeatureStore.tsx (2 hunks)
  • frontend/src/pages/featureStore/FeatureStoreContext.tsx (1 hunks)
  • frontend/src/pages/featureStore/FeatureStoreCoreLoader.tsx (4 hunks)
  • frontend/src/pages/featureStore/FeatureStoreRoutes.tsx (1 hunks)
  • frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreCR.spec.tsx (1 hunks)
  • frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreEntities.spec.tsx (1 hunks)
  • frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreObject.spec.tsx (1 hunks)
  • frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreProjects.test.tsx (1 hunks)
  • frontend/src/pages/featureStore/apiHooks/useFeatureStoreAPIState.tsx (1 hunks)
  • frontend/src/pages/featureStore/apiHooks/useFeatureStoreCR.tsx (1 hunks)
  • frontend/src/pages/featureStore/apiHooks/useFeatureStoreEnitites.tsx (1 hunks)
  • frontend/src/pages/featureStore/apiHooks/useFeatureStoreObject.tsx (1 hunks)
  • frontend/src/pages/featureStore/apiHooks/useFeatureStoreProjects.tsx (1 hunks)
  • frontend/src/pages/featureStore/const.ts (1 hunks)
  • frontend/src/pages/featureStore/screens/FeatureStoreProjectSelectorNavigator.tsx (0 hunks)
  • frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelector.tsx (4 hunks)
  • frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelectorNavigator.tsx (1 hunks)
  • frontend/src/pages/featureStore/screens/entities/FeatureStoreEntities.tsx (1 hunks)
  • frontend/src/pages/featureStore/screens/entities/FeatureStoreEntitiesListView.tsx (1 hunks)
  • frontend/src/pages/featureStore/types.ts (4 hunks)
💤 Files with no reviewable changes (3)
  • frontend/src/concepts/featureStore/useFeatureStoreEnabled.ts
  • frontend/src/pages/featureStore/screens/FeatureStoreProjectSelectorNavigator.tsx
  • frontend/src/concepts/featureStore/context/FeatureStoreProjectContext.tsx
🧰 Additional context used
🧠 Learnings (20)
📓 Common learnings
Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/__tests__/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.
frontend/src/__mocks__/mockDataSources.ts (4)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.

Learnt from: christianvogt
PR: #4381
File: frontend/src/tests/cypress/tsconfig.json:9-9
Timestamp: 2025-06-19T20:38:32.485Z
Learning: In the ODH Dashboard project, the frontend/src/__tests__/cypress/tsconfig.json file intentionally has an empty files array to disable type checking for Cypress test files. This is part of the monorepo structure where Cypress was separated into its own package but type checking is deliberately disabled for it.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.

frontend/src/__mocks__/mockFeatureServices.ts (6)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/utils/**/*.ts : All API calls must be in utility functions in utils/; don't make inline API requests in tests.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.

frontend/src/__mocks__/mockFeatureStoreProject.ts (6)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.

Learnt from: christianvogt
PR: #4381
File: frontend/src/tests/cypress/tsconfig.json:9-9
Timestamp: 2025-06-19T20:38:32.485Z
Learning: In the ODH Dashboard project, the frontend/src/__tests__/cypress/tsconfig.json file intentionally has an empty files array to disable type checking for Cypress test files. This is part of the monorepo structure where Cypress was separated into its own package but type checking is deliberately disabled for it.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.

.env.development (1)

Learnt from: ConorOM1
PR: #4423
File: frontend/src/tests/cypress/cypress/fixtures/resources/yaml/model_registry.yaml:12-12
Timestamp: 2025-06-27T11:00:06.871Z
Learning: For ModelRegistry resources in frontend/src/__tests__/cypress/cypress/fixtures/resources/yaml/model_registry.yaml, the oauthProxy: {} empty configuration is sufficient to enable the OAuth proxy. The ModelRegistry operator enables the proxy by default when this key is present, without requiring explicit enabled: true flags or image specifications.

frontend/src/__mocks__/mockFeatureViews.ts (8)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use .navigate() methods in page objects for navigation instead of cy.visit() in tests.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : MANDATORY: Use page objects for ALL UI interactions; NEVER use cy.findByTestId(), cy.findByRole(), or cy.get() directly in test files.

Learnt from: christianvogt
PR: #4381
File: frontend/src/tests/cypress/tsconfig.json:9-9
Timestamp: 2025-06-19T20:38:32.485Z
Learning: In the ODH Dashboard project, the frontend/src/__tests__/cypress/tsconfig.json file intentionally has an empty files array to disable type checking for Cypress test files. This is part of the monorepo structure where Cypress was separated into its own package but type checking is deliberately disabled for it.

frontend/src/pages/featureStore/FeatureStore.tsx (3)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use .navigate() methods in page objects for navigation instead of cy.visit() in tests.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.

frontend/src/pages/featureStore/apiHooks/useFeatureStoreObject.tsx (1)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.

backend/src/routes/api/service/featurestore/index.ts (1)

Learnt from: ConorOM1
PR: #4423
File: frontend/src/tests/cypress/cypress/fixtures/resources/yaml/model_registry.yaml:12-12
Timestamp: 2025-06-27T11:00:06.871Z
Learning: For ModelRegistry resources in frontend/src/__tests__/cypress/cypress/fixtures/resources/yaml/model_registry.yaml, the oauthProxy: {} empty configuration is sufficient to enable the OAuth proxy. The ModelRegistry operator enables the proxy by default when this key is present, without requiring explicit enabled: true flags or image specifications.

frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreObject.spec.tsx (10)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : MANDATORY: Use page objects for ALL UI interactions; NEVER use cy.findByTestId(), cy.findByRole(), or cy.get() directly in test files.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/fixtures/e2e/*.yaml : Store test-specific data in YAML fixture files with descriptive names like testFeatureName.yaml.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use .navigate() methods in page objects for navigation instead of cy.visit() in tests.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/pages/**/*.ts : All actions (e.g., .click(), .type()) must be performed in the test itself, not inside the page object method.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/pages/**/*.ts : All selectors must be encapsulated in page object methods; page objects should return Cypress chainables or other page objects.

frontend/src/__mocks__/mockEntities.ts (2)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.

frontend/src/pages/featureStore/const.ts (2)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.

frontend/src/pages/featureStore/FeatureStoreRoutes.tsx (1)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.

frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelectorNavigator.tsx (1)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use .navigate() methods in page objects for navigation instead of cy.visit() in tests.

frontend/src/api/featureStore/errorUtils.ts (1)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/utils/**/*.ts : All API calls must be in utility functions in utils/; don't make inline API requests in tests.

frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelector.tsx (3)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/pages/**/*.ts : All selectors must be encapsulated in page object methods; page objects should return Cypress chainables or other page objects.

frontend/src/pages/featureStore/FeatureStoreCoreLoader.tsx (2)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/pages/**/*.ts : All selectors must be encapsulated in page object methods; page objects should return Cypress chainables or other page objects.

frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreEntities.spec.tsx (11)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/fixtures/e2e/*.yaml : Store test-specific data in YAML fixture files with descriptive names like testFeatureName.yaml.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Delete test projects, PVCs, and other resources after tests using after() hooks.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/utils/**/*.ts : All API calls must be in utility functions in utils/; don't make inline API requests in tests.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : MANDATORY: Use page objects for ALL UI interactions; NEVER use cy.findByTestId(), cy.findByRole(), or cy.get() directly in test files.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/fixtures/e2e/test-variables.yml.example : Use test-variables.yml.example as template for what gets checked in.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Tags should be specified in the test file, in the it() block options, e.g. it('...', { tags: ['@tag'] }, ...).

frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreCR.spec.tsx (10)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/fixtures/e2e/*.yaml : Store test-specific data in YAML fixture files with descriptive names like testFeatureName.yaml.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Delete test projects, PVCs, and other resources after tests using after() hooks.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Tags should be specified in the test file, in the it() block options, e.g. it('...', { tags: ['@tag'] }, ...).

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : MANDATORY: Use page objects for ALL UI interactions; NEVER use cy.findByTestId(), cy.findByRole(), or cy.get() directly in test files.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/utils/**/*.ts : All API calls must be in utility functions in utils/; don't make inline API requests in tests.

frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreProjects.test.tsx (11)

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Delete test projects, PVCs, and other resources after tests using after() hooks.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Use descriptive file names matching feature area, e.g., testFeatureName.cy.ts for main functionality.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Never hardcode namespaces in tests or utilities; always derive namespaces from test variables or environment variables.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : All linting errors must be fixed: use object destructuring, proper formatting, no unused variables/imports, no any types unless necessary.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/**/*.{ts,tsx} : Don't create TypeScript interfaces for test data; use direct object access patterns.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/ : Group related tests in feature directories under tests/e2e.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/utils/**/*.ts : All API calls must be in utility functions in utils/; don't make inline API requests in tests.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/fixtures/e2e/*.yaml : Store test-specific data in YAML fixture files with descriptive names like testFeatureName.yaml.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : MANDATORY: Use page objects for ALL UI interactions; NEVER use cy.findByTestId(), cy.findByRole(), or cy.get() directly in test files.

Learnt from: christianvogt
PR: #4381
File: frontend/src/tests/cypress/tsconfig.json:9-9
Timestamp: 2025-06-19T20:38:32.485Z
Learning: In the ODH Dashboard project, the frontend/src/__tests__/cypress/tsconfig.json file intentionally has an empty files array to disable type checking for Cypress test files. This is part of the monorepo structure where Cypress was separated into its own package but type checking is deliberately disabled for it.

Learnt from: CR
PR: opendatahub-io/odh-dashboard#0
File: .cursor/rules/cypress-e2e.mdc:0-0
Timestamp: 2025-07-21T11:49:57.416Z
Learning: Applies to frontend/src/tests/cypress/cypress/tests/e2e/**/*.cy.ts : Tags should be specified in the test file, in the it() block options, e.g. it('...', { tags: ['@tag'] }, ...).

🧬 Code Graph Analysis (16)
frontend/src/pages/featureStore/FeatureStore.tsx (1)
frontend/src/pages/featureStore/FeatureStoreRoutes.tsx (1)
  • featureStoreRoute (8-12)
frontend/src/pages/featureStore/screens/entities/FeatureStoreEntitiesListView.tsx (1)
frontend/src/pages/featureStore/types.ts (1)
  • EntityList (47-50)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreEnitites.tsx (3)
frontend/src/utilities/useFetch.ts (1)
  • FetchStateObject (37-43)
frontend/src/pages/featureStore/types.ts (1)
  • EntityList (47-50)
frontend/src/pages/featureStore/FeatureStoreContext.tsx (1)
  • useFeatureStoreAPI (66-73)
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreObject.spec.tsx (2)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreObject.tsx (2)
  • getFeatureStoreObjectFromPath (7-14)
  • useFeatureStoreObject (16-19)
frontend/src/__tests__/unit/testUtils/hooks.ts (1)
  • testHook (112-133)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreCR.tsx (3)
frontend/src/k8sTypes.ts (1)
  • FeatureStoreKind (1647-1693)
frontend/src/pages/featureStore/const.ts (2)
  • FEATURE_STORE_UI_LABEL_KEY (2-2)
  • FEATURE_STORE_UI_LABEL_VALUE (3-3)
frontend/src/api/models/odh.ts (1)
  • FeatureStoreModel (66-71)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreProjects.tsx (3)
frontend/src/utilities/useFetch.ts (1)
  • FetchStateObject (37-43)
frontend/src/pages/featureStore/types.ts (1)
  • ProjectList (31-34)
frontend/src/pages/featureStore/FeatureStoreContext.tsx (1)
  • useFeatureStoreAPI (66-73)
frontend/src/__mocks__/mockEntities.ts (1)
frontend/src/pages/featureStore/types.ts (1)
  • EntityList (47-50)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreAPIState.tsx (2)
frontend/src/pages/featureStore/types.ts (1)
  • FeatureStoreAPIs (184-187)
frontend/src/api/featureStore/custom.ts (2)
  • listFeatureStoreProject (7-12)
  • getEntities (14-23)
backend/src/types.ts (1)
frontend/src/k8sTypes.ts (2)
  • FeatureStoreKind (1647-1693)
  • K8sCondition (134-142)
frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelectorNavigator.tsx (2)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreObject.tsx (1)
  • useFeatureStoreObject (16-19)
frontend/src/pages/featureStore/FeatureStoreContext.tsx (1)
  • useFeatureStoreProject (75-85)
frontend/src/api/featureStore/custom.ts (5)
frontend/src/k8sTypes.ts (1)
  • K8sAPIOptions (291-295)
frontend/src/pages/featureStore/types.ts (2)
  • ProjectList (31-34)
  • EntityList (47-50)
frontend/src/api/featureStore/errorUtils.ts (1)
  • handleFeatureStoreFailures (7-26)
frontend/src/api/proxyUtils.ts (1)
  • proxyGET (70-79)
frontend/src/pages/featureStore/const.ts (1)
  • FEATURE_STORE_API_VERSION (1-1)
frontend/src/api/featureStore/errorUtils.ts (1)
frontend/src/concepts/modelRegistry/types.ts (1)
  • ModelRegistryError (150-153)
frontend/src/pages/featureStore/FeatureStoreCoreLoader.tsx (5)
frontend/src/concepts/userSSAR/useAccessAllowed.ts (1)
  • useAccessAllowed (15-35)
frontend/src/api/models/odh.ts (1)
  • FeatureStoreModel (66-71)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreCR.tsx (1)
  • useFeatureStoreCR (33-52)
frontend/src/pages/featureStore/FeatureStoreContext.tsx (1)
  • FeatureStoreContextProvider (30-60)
frontend/src/pages/featureStore/FeatureStoreRoutes.tsx (1)
  • featureStoreRoute (8-12)
frontend/src/pages/featureStore/FeatureStoreContext.tsx (4)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreAPIState.tsx (1)
  • FeatureStoreAPIState (7-7)
frontend/src/pages/featureStore/types.ts (1)
  • FeatureStoreAPIs (184-187)
frontend/src/concepts/areas/index.ts (2)
  • conditionalArea (10-10)
  • SupportedArea (11-11)
frontend/src/pages/featureStore/apiHooks/useFeatureStoreCR.tsx (1)
  • useFeatureStoreCR (33-52)
frontend/src/pages/featureStore/types.ts (1)
frontend/src/k8sTypes.ts (1)
  • K8sAPIOptions (291-295)
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreProjects.test.tsx (4)
frontend/src/pages/featureStore/FeatureStoreContext.tsx (1)
  • useFeatureStoreAPI (66-73)
frontend/src/pages/featureStore/types.ts (1)
  • ProjectList (31-34)
frontend/src/__mocks__/mockFeatureStoreProject.ts (1)
  • mockFeatureStoreProject (3-14)
frontend/src/__tests__/unit/testUtils/hooks.ts (2)
  • testHook (112-133)
  • standardUseFetchStateObject (172-185)
🪛 dotenv-linter (3.3.0)
.env.development

[warning] 22-22: [UnorderedKey] The MODEL_REGISTRY_NAMESPACE key should go before the MODEL_REGISTRY_SERVICE_HOST key


[warning] 25-25: [EndingBlankLine] No blank line at the end of the file

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Cypress-Setup
  • GitHub Check: Lint
🔇 Additional comments (34)
frontend/src/pages/featureStore/const.ts (1)

1-9: LGTM – centralised constants improve cohesion

The constants & enum are self-contained, immutable, and typed – good move.
No issues spotted.

frontend/src/__mocks__/mockFeatureServices.ts (1)

2-2: LGTM! Clean import path refactor.

The import path update aligns with the centralization of feature store types to the pages/featureStore directory, which is consistent with the broader architecture changes in this PR.

frontend/src/concepts/areas/const.ts (1)

223-223: Temporary disabling of Feast operator requirement acknowledged.

The TODO comment clearly indicates this is intentional until the latest Feast operator is released. This allows Feature Store development to proceed without the operator dependency.

frontend/src/k8sTypes.ts (1)

631-636: LGTM! Standard Kubernetes Route specification extension.

The optional to field addition follows standard Kubernetes/OpenShift Route specifications and supports traffic routing features without breaking existing implementations.

frontend/src/pages/featureStore/FeatureStore.tsx (2)

4-4: LGTM! Component import path correctly updated.

The import path reflects the component's relocation to the components subdirectory, improving code organization.


23-25: LGTM! Function signature updated to match new routing architecture.

The getRedirectPath prop now correctly accepts two parameters (featureStoreObject, featureStoreProject) matching the updated featureStoreRoute function signature from FeatureStoreRoutes.tsx. This aligns with the new routing structure introduced in this PR.

backend/src/routes/api/service/featurestore/index.ts (1)

4-23: Well-structured proxy service implementation.

The service configuration is well-designed with proper API group specification, local development support via environment variables, and appropriate readiness checking logic for the FeatureStore registry service.

frontend/src/pages/featureStore/apiHooks/useFeatureStoreProjects.tsx (1)

7-36: Excellent hook implementation following React best practices.

The hook is well-structured with proper error handling, sensible default state, and appropriate use of the useFetch pattern. The API availability check and memoized callback ensure reliable data fetching behavior.

frontend/src/__mocks__/mockEntities.ts (2)

1-2: Import path update aligns with refactor.

The import path change from concepts/featureStore to pages/featureStore and type updates to EntityList are consistent with the broader architectural refactor.


28-38: Mock data structure correctly updated for EntityList type.

The function signature and return type updates properly align with the new EntityList structure, and the pagination mock values are reasonable and consistent.

frontend/src/pages/featureStore/apiHooks/useFeatureStoreEnitites.tsx (1)

7-36: Well-implemented hook following established patterns.

The hook implementation is excellent, properly handling the optional project parameter, API availability checks, and providing sensible defaults. The logic is consistent with other feature store hooks.

frontend/src/pages/featureStore/apiHooks/useFeatureStoreObject.tsx (1)

16-19: Clean and simple hook implementation.

The hook provides a straightforward interface for accessing the current feature store object from the URL, properly leveraging React Router's useLocation hook.

frontend/src/pages/featureStore/apiHooks/useFeatureStoreAPIState.tsx (1)

12-18: LGTM - Clean hook implementation.

The useCallback with empty dependencies is appropriate here since listFeatureStoreProject and getEntities are imported functions that don't change between renders. The memoization properly prevents unnecessary API object recreations.

frontend/src/pages/featureStore/screens/entities/FeatureStoreEntities.tsx (1)

17-58: LGTM - Well-structured component with proper state handling.

The component follows good practices:

  • Proper separation of concerns with hooks for data fetching
  • Comprehensive state handling (loading, error, empty)
  • Clear component composition with ApplicationsPage wrapper
  • Appropriate integration with project selector navigator
frontend/src/pages/featureStore/apiHooks/__tests__/useFeatureStoreObject.spec.tsx (2)

15-33: Excellent test coverage for path extraction function.

The tests comprehensively cover the getFeatureStoreObjectFromPath function with multiple scenarios including normal paths, default fallbacks, and deep nested paths. The test cases are well-named and verify the expected behavior.


35-119: Thorough testing of hook behavior and stability.

The hook tests cover all important scenarios:

  • Basic functionality with different pathnames
  • Default behavior when no feature store object is present
  • Hook updates when location changes
  • Hook stability when location remains the same
  • Proper mock verification

The use of testHook utility and proper mock management demonstrates good testing practices.

backend/src/types.ts (1)

1310-1354: LGTM - Comprehensive FeatureStoreKind type definition.

The type definition is well-structured and follows Kubernetes CRD patterns appropriately:

  • Properly extends K8sResourceCommon for consistency with other K8s resources
  • Required and optional fields are correctly marked
  • Comprehensive spec and status fields cover the expected functionality
  • Uses existing types like K8sCondition for consistency
  • The use of Record<string, any> for services is appropriate for flexible configuration

This type definition provides a solid foundation for the backend Feature Store API integration.

frontend/src/pages/featureStore/FeatureStoreRoutes.tsx (2)

8-12: LGTM - Clean route function implementation.

The updated featureStoreRoute function properly handles optional project parameters with clean conditional path construction.


15-21: Route structure looks well organized.

The simplified routing structure with direct index and entities routes is cleaner than the previous nested approach. The use of FeatureStoreCoreLoader as the parent route element provides good separation of concerns.

frontend/src/pages/featureStore/apiHooks/useFeatureStoreCR.tsx (1)

33-52: Hook implementation follows best practices.

The hook properly uses useCallback to memoize the fetch function and useFetch with appropriate initial state configuration.

frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelectorNavigator.tsx (2)

8-16: Component structure is well-designed.

The component properly separates concerns by accepting a getRedirectPath function as a prop and using appropriate hooks for navigation and state management.


19-27: Empty-string fallback aligns with component logic

The FeatureStoreProjectSelector explicitly checks for featureStoreProject === '' (line 48), so using currentProject ?? '' ensures the selector’s “no project” state works as intended. No changes needed here.

frontend/src/api/featureStore/custom.ts (1)

7-12: API function structure follows good patterns.

The higher-order function approach with partial application of hostPath and proper error handling integration is well-designed.

frontend/src/pages/featureStore/screens/components/FeatureStoreProjectSelector.tsx (2)

19-31: Well-executed refactoring to new data structure.

The component correctly adapts to the new ProjectList type by accessing the projects array property throughout the implementation while maintaining existing functionality.


10-11: Updated callback signature handled correctly.

The component properly uses the new onSelection callback signature, passing the featureStoreObject parameter in both "All projects" (line 50) and specific project selection (line 63) scenarios.

Also applies to: 50-50, 63-63

frontend/src/pages/featureStore/FeatureStoreContext.tsx (5)

1-9: Clean import organization and proper TypeScript extensions.

The imports are well-organized and use the proper file extensions for TypeScript modules. The hash-tilde import path syntax is consistent with the project's module resolution setup.


11-16: Well-defined context type interface.

The FeatureStoreContextType interface clearly defines all the context properties with appropriate types, providing good TypeScript support for consumers.


35-37: Robust hostPath construction with proper null handling.

The conditional logic properly handles the case when featureStoreCR is null, ensuring the hostPath is appropriately set for the API state hook.


75-85: Clean and focused project management hook.

The useFeatureStoreProject hook provides a clean interface for project state management, following React patterns well.


30-33: conditionalArea wrapper verified

The conditionalArea HOC in frontend/src/concepts/areas/AreaComponent.tsx accepts a SupportedArea and an optional isFullPage flag, then correctly wraps the passed component in <AreaComponent area={area} isFullPage={isFullPage}>. Your usage in FeatureStoreContextProvider aligns with this signature—no changes required.

frontend/src/pages/featureStore/types.ts (4)

31-34: LGTM!

Clean wrapper type that properly combines the existing project data structure with pagination metadata.


47-50: LGTM!

Consistent with the ProjectList pattern, properly extending the existing EntityList to include pagination support.


180-180: LGTM!

Clean API contract with proper typing and async support. The name is more concise while maintaining clarity.


182-182: LGTM!

Well-designed function type that allows optional project-based filtering while maintaining consistency with the GetProjects pattern.

Copy link

codecov bot commented Jul 21, 2025

Codecov Report

Attention: Patch coverage is 38.56209% with 94 lines in your changes missing coverage. Please review.

Project coverage is 82.21%. Comparing base (59fae39) to head (797edfc).
Report is 24 commits behind head on main.

Files with missing lines Patch % Lines
...end/src/pages/featureStore/FeatureStoreContext.tsx 0.00% 22 Missing ⚠️
.../src/pages/featureStore/FeatureStoreCoreLoader.tsx 0.00% 20 Missing ⚠️
frontend/src/pages/featureStore/utils.ts 0.00% 11 Missing ⚠️
...omponents/FeatureStoreProjectSelectorNavigator.tsx 0.00% 9 Missing ⚠️
...ureStore/screens/entities/FeatureStoreEntities.tsx 0.00% 8 Missing ⚠️
...screens/components/FeatureStoreProjectSelector.tsx 0.00% 6 Missing ⚠️
.../featureStore/apiHooks/useFeatureStoreAPIState.tsx 0.00% 5 Missing ⚠️
...tend/src/pages/featureStore/FeatureStoreRoutes.tsx 0.00% 4 Missing ⚠️
.../screens/components/InvalidFeatureStoreProject.tsx 0.00% 4 Missing ⚠️
.../screens/entities/FeatureStoreEntitiesListView.tsx 0.00% 4 Missing ⚠️
... and 1 more
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #4509      +/-   ##
==========================================
- Coverage   82.26%   82.21%   -0.05%     
==========================================
  Files        1785     1806      +21     
  Lines       37541    37893     +352     
  Branches    11193    11272      +79     
==========================================
+ Hits        30884    31155     +271     
- Misses       6657     6738      +81     
Files with missing lines Coverage Δ
backend/src/types.ts 100.00% <ø> (ø)
frontend/src/api/featureStore/custom.ts 100.00% <100.00%> (ø)
frontend/src/api/featureStore/errorUtils.ts 100.00% <100.00%> (ø)
frontend/src/concepts/areas/const.ts 100.00% <ø> (ø)
frontend/src/k8sTypes.ts 100.00% <ø> (ø)
.../pages/featureStore/apiHooks/useFeatureStoreCR.tsx 100.00% <100.00%> (ø)
.../featureStore/apiHooks/useFeatureStoreEnitites.tsx 100.00% <100.00%> (ø)
...es/featureStore/apiHooks/useFeatureStoreObject.tsx 100.00% <100.00%> (ø)
.../featureStore/apiHooks/useFeatureStoreProjects.tsx 100.00% <100.00%> (ø)
frontend/src/pages/featureStore/const.ts 100.00% <100.00%> (ø)
... and 11 more

... and 63 files with indirect coverage changes


Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 59fae39...797edfc. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@dpanshug dpanshug force-pushed the feature-store-api branch from a7174d3 to ee9fb2d Compare July 22, 2025 05:14
@dpanshug dpanshug requested a review from pnaik1 July 22, 2025 06:40
@pnaik1
Copy link
Contributor

pnaik1 commented Jul 22, 2025

/lgtm

@openshift-ci openshift-ci bot added the lgtm label Jul 22, 2025
@claudialphonse78
Copy link
Contributor

/lgtm

@openshift-ci openshift-ci bot removed the lgtm label Jul 22, 2025
Copy link
Contributor

@manaswinidas manaswinidas left a comment

Choose a reason for hiding this comment

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

/lgtm but there is stray console.log that will be removed in an upcoming PR - this is blocking all the other stories in the epic - so merging this

}: {
entities: EntityList;
}): React.ReactElement => {
console.log(entities);
Copy link
Contributor

Choose a reason for hiding this comment

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

Do we need this console.log?

Copy link
Contributor

openshift-ci bot commented Jul 22, 2025

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: manaswinidas

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-merge-bot openshift-merge-bot bot merged commit 2b24c01 into opendatahub-io:main Jul 22, 2025
40 checks passed
@coderabbitai coderabbitai bot mentioned this pull request Jul 29, 2025
6 tasks
d0w pushed a commit to d0w/odh-dashboard that referenced this pull request Jul 29, 2025
* Feature Store Context and API setup:
* Backend proxy setup
* Routes
* Context
* Hooks
* API
* Unit tests

* remove title icon

* import updates and few changes

* adding unit tests

* PR review updates

* Invalid project selector

* adding prefix in proxy
openshift-merge-bot bot pushed a commit that referenced this pull request Aug 11, 2025
* add feature flag (#4431)

* Add model metrics for KServe refactor (#4346)

* added lmeval improvements (#4438)

* serving runtime version status label and tests (#4398)

* Rhoaieng 26502 (#4440)

* Enable pipelines tests affected by RHOAIENG-24702

* enable test affected by RHOAIENG-27515

* Lint fixes

* Add feature flag for Feature store (#4437)

* Fixed bug where storage class select wouldn't appear in NIM Modal (#4427)

* Enhance ManageNIMServingModal to support OpenShift default storage class and improve storage class selection logic

- Added support for OpenShift default storage class in ManageNIMServingModal.
- Updated logic to prefer ODH default storage class over OpenShift default when both are available.
- Introduced a new prop `showDefaultWhenNoConfig` in StorageClassSelect to control visibility and enablement of storage class options based on configuration availability.
- Added comprehensive tests for ManageNIMServingModal and StorageClassSelect to cover new functionality and edge cases.

* removed debug logging

* removed extension on ts import

* fixed awkward logic

* fix: PVC resizing doesn't trigger a redeployment (#4334)

* fix: PVC resizing doesn't trigger a redeployment

* one annotation solution

* updated tests

* fixed lint

* NIM isolation

* generic version

* fix: lint

* deleted comment

* Serving refactor: Add tokens and hardware accelerators (#4441)

* Add tokens and hardware accelerators

* Remove unused kserve auth function

* Cypress e2e Test - Verify a model version can be registered via versions view (#4444)

* add test for registering via version view

* add page object with timeout

* enhance test

* add empty state object, update test

* update test object

* use common mr login function

* create versions page object

* remove duplicate v2 check

* add database checks

* update login pattern to standard approach

* sanitise queries

* add uid to object storage model

* update and apply nav method

* add feature flag tag

* fixed provider filter in resources (#4443)

* fixed provider filter in resources

* updated mocks for start basic workbench card

* made new component hidden from enabled page

* removed deprecated usage of useQueryParams

* Allow empty requested/limit for CPU and memory when hardware profile is disabled (#4407)

* Serving refactor: Show deployments of all projects in global page (#4451)

* Show deployments of all projects in global page

* Fix padding issue

* Fix spacing issue

* Fix deployment status bug (#4446)

* Cypress e2e Test - Verify model registry permissions can be managed (#4456)

* add new registry permissions test

* lint fix

* new line lint

* Change "Launch application" to "Open application" (#4409)

* change launch application to open application

* change link

* remove readme change

* Update Model Registry Plugin with latest upstream changes. (#4455)

* Update model-registry to 21197e57471e2a7fc6a09e178147540e8e218a94

* Revert changes

* Update model-registry to 6545c37be18e2ead22e2d0ba83ae7874c3bd8680

* Revert overriden files

* Pipeline failure feedback 2 (#4436)

* moved over changes from pipeline-failure-feedback manually into newest branch; also adjusted title and description upon erroring out

also: now only showing errors that have actual messages (reduce noise)

* working on finishing this up...now that i have an actual cluster/backend to use again :)

* removing the ignoreTimeout; not using anymore per UX

* cleaning up code

* removing timeout hacks that sped up development

* using server timeout directly now

* adjusted comment; next: remove the new css

* adding an overrideTimeout

* linter fix + removing unneeded timeOut alert

* fixed unit test

* (using cursor) added a div with an id for the mock tests; they are passing locally now

* used cursor to add section to ignore ChunkLoadErrors

* linter fix

* style (scss) changes removed

* Add toast notification upon successful datascience pipeline configuration (#4350)

* add polling

* fix linking

* remove unused util

* fix lint

* protect against null array

* change to use notificationwatchercontext

* fix autolint

* add test

* add testids

* change error msg

* remove comment

* fix linting

* adjust redundant const

* change time check

* use dspipelinekind metadata namespace

* use dspaloaded and server timeout functions

* fix lint

* add polling

* fix linking

* remove unused util

* fix lint

* protect against null array

* change to use notificationwatchercontext

* fix autolint

* add test

* add testids

* change error msg

* remove comment

* fix linting

* adjust redundant const

* change time check

* use dspipelinekind metadata namespace

* adjust notifications to not show during modal

* remove info notification

* fix imports

* check for undefined

* fix tests

* fix notifs

* add cypress tests

* e2e test (#4403)

* Microcopy updates for "project-scoped" items (#4448)

* microcopy updates

* ChunkLoadError fix

* microcopy updates

* Remove list and listitem imports

* Update test with global-scoped name

* li ul changes

* lint error fix

* adjust the content tags

* Update manageAcceleratorProfiles.cy.ts

* edit label microcopy (#4458)

* split frontend lint task into two separate runs (#4461)

* run type checking in all packages with turbo (#4381)

* run type checking in all packages with turbo

* remove type-check from unit test script as it is run separately

* Updates and enhancements for 'Verify the filters on Resources page' e2e test (#4463)

* enhance test with backend validation

* use inline types

* check namespace

* implement rhoai specific checks

* add self-managed step

* add navigate method

* update tags and apply lint

* Add more approvers (#4464)

* Fix type errors for array in es2021 (#4467)

* Add stopping status to model deployments (#4421)

* RHOAIENG-29339: Filter out outdated notebook image tags and only validate UI version dropdown for images with 2+ non-outdated versions\n\nThis change updates the Cypress workbench image/version test to:\n- Filter out outdated notebook image tags (using the opendatahub.io/image-tag-outdated annotation)\n- Only validate the UI version dropdown when there are 2 or more non-outdated versions for an image\n- Skip UI validation for images with only 1 non-outdated version, matching current UI behavior\n\nThis ensures the test is robust and cluster-agnostic, and resolves failures due to outdated or single-version images.\n\nJira: https://issues.redhat.com/browse/RHOAIENG-29339 (#4471)

* Quarantine model serving tests due to [Product Bug: RHOAIENG-29340]

* Small change for quarantine branch RHOAIENG-29340

* Remove accidentally added web-ui directory from index

* Update Hardware profile admin page (#4400)

* Update hardware profile CRD, add local queue and workload priority class options

* Added kueue fields to the details popover in HWP select

* easier to use feature flags via a button in the header (#4237)

* moved over a lot; the button is showing again.  need to control when/how the banner shows again tho

* better; need a break: next: compare tests (since files changed....)"

* tweaks re pr review

* tests are at lest running.....

* yay passing :)

* lint/prettier fixes

* unit test fix

* linter fix (unused import)

* lint fix (added space)

* fixing linter test error; (test runs locally just fine of course)

* fixing merge error

* Retrieve default local queue name from DSC (#4462)

* Remove deleted crd from kustomization file (#4478)

* Temporarily restore dashboard HWP crd (#4480)

* Serving refactor: Add modelmesh as a platform shortcircuit option (#4459)

* Add modelmesh as a platform shortcircuit option

* Fix eslint oom

* Add dependencies to package.json

* Update icon

* Internal model serving endpoint (#4475)

* Update Label url to Internal

* Updated Internal label test in cypress

* Upgrade cluster storage modal (#4457)

* upgrade cluster storage to include model context

* remove isGeneralPurpose useEffect

* remove redundant annotation setting

* feat: Enhance the dashboard to support deploying NIM with a PVC (#4447)

* v1

* fix: lint

* hide on edit

* refactor: DEFAULT_MODEL_PATH

* model pvc dropdown

* deletion logic

* fix: lint

* fix for current tests

* fix:lint

* lint

* defaultMockInferenceServiceData

* added testid's

* tests + info

* coderabbitai

* deleted comment

* no model is selected + relativeTime

* Change how model deployment links appear (#4442)

* Change how model deployment links appear

* Cypress fixes

* Adjustments from feedback

* Move instances of isModelStopped into a util

* Move duplicated code into shared resource

* Rebase fixes

* Integrate stop start changes

* Small fixes

* Fix issue with metrics link

* Quick fix for stopping

---------

Co-authored-by: Griffin-Sullivan <[email protected]>

* Remove Product Bug references and @Bug tags from model serving tests (#4488)

- Removed '[Product Bug: RHOAIENG-29340]' from describe blocks
- Removed '@Bug' tags from all test configurations
- Fixed linter formatting issues for tag arrays
- Tests are now unquarantined and ready for execution

* RHOAIENG-25339: Update application of hardware profiles in all workloads (#4413)

* conditionally set resources

* added unit tests

* bring back lost changes

* fixed unit tests

* fixed mock tests

* remove logic to unset resources for harware profiles

* added new annotation

* added new annotation to the serving runtime

* Revert "fixed mock tests"

This reverts commit 805f14d6294b429f5c4e0647f1606fdcc7141f8c.

* fix lint

* added a check for acc profile

* fix mock tests

* fixed more tests

* fix mode serving mock test

* added a better check

* fixed tests

* removed console

* fixed unit test

* Feature flag modal re-organization (#4481)

* starting on separating feature flags into groups

* comments and scaffolding

* starting with cursor...added tabs

* better

* better

* better

* better

* flags redistributed onto tabs now; easier to find the active ones

* no longer having indeterminate  checkboxes

* cleanup

* cleanup

* restoring package.json

* added scrolling to *just* the content of the tab that needs it (tried to use patternfly but capability not there)

* did find a patternfly way; with chatgpt (better than cursor in this case)

* working on test

* removed debugging code

* removing PageSection (review feedback)

* linter fix (removing unused import)

* Create a set of Cursor rules for Cypress e2e Development  (#4485)

* chore: initial changes for Cypress E2E rules and setup

* docs(cypress-e2e): update rules for linting scripts, cy.get usage, and tagging per PR feedback

* docs(cypress-e2e): clarify lint/fix commands for root, frontend, and backend per feedback

* docs(cypress-e2e): update lint/fix instructions to frontend-only for E2E tests

* Feature Store Initial Setup (#4487)

* Add types, mocks, feature store project context, empty state and project selector for feature store. (#5)

* Add types and mocks for feast

* Add feature store project context and project selector

* feat(RHOAIENG-28417):added feature store code block common component

* feat(RHOAIENG-28415):added single label and tags with overflow and show all tags component

* feat(RHOAIENG-28413): added feature store side navigation routes

* feat(RHOAIENG-28413):uncommented the feature store flag check for routes

* feat(RHOAIENG-28413):rearranged the nav items below experiments in the navbar and minor content changes in name

* feat(RHOAIENG-28413):added core loader in the routes for feature store

* fix(context):added featurestore context in app file

* removed unused component

* fix(feast-context): moved the feast context to the feast routes level

* style: addressed review comments (text and spacing)

---------

Co-authored-by: Pushpa Padti <[email protected]>

* Add missing frontmatter to cypress-e2e.mdc rule file

- Added description, globs, and alwaysApply fields to match jira-creation.mdc format
- Enables proper rule configuration and LLM-driven relevance detection
- Addresses reviewer feedback about missing frontmatter section

* Fix globs field to be empty array instead of null

- Changed 'globs:' to 'globs: []' to ensure it parses as empty array
- Prevents type errors in rule-runner which expects a list
- Addresses PR reviewer feedback

* Fix bug when stopping model with confirmation modal (#4492)

* Update cluster storage connected resources (#4469)

* Update cluster storage connected resources

* update ConnectedResourcesProps

* RHOAIENG-27574: Filter Hardware profiles if kueue disabled (#4490)

* added filter logic

* added unit tests

* fixed lint

* moved the filter logic

* enum

* renamed

* updated tests

* removed unnecessary const

* fix dupl issie

* RHOAIENG-30110: The workload priority is not maintained when switching between local queue and not selectors. (#4496)

* fixed the bug

* added gutter

* added unit tests

* Kueue extras (#4489)

* Set default hwp namespace in notebooks to dashboard namespace, remove non-legacy hwp from model mesh, move hwp annotations from serving runtime to inference service

* Small fix

* Additional fixes

* Add test IDs for deployed model names in ModelMesh and plugin components (#4499)

* Add test IDs for deployed model names in ModelMesh and plugin components

- Add 'deployed-model-name' test ID to InferenceServiceTableRow for ModelMesh deployments
- Add 'deployed-model-name' test ID to DeploymentsTableRow for plugin-based deployments
- Fix syntax error in testSingleModelAdminCreation.cy.ts test file
- Update Cypress tests to use new test ID selectors

Supports RHOAIENG-29747 and RHOAIENG-29977

* Fix mock tests by restoring metrics-link test IDs while adding model name selectors

- Restore original metrics-link-{name} test IDs for backward compatibility with existing tests
- Add data-model-name='deployed-model-name' attributes as additional selectors
- Update findModelServerDeployedName method to use new generic selector
- Add findModelDeployedName method for table-based model selection

This fixes the mock test failures while maintaining both specific (metrics link) and general (model name) test selectors.

* Revert PR changes to InferenceServiceTableRow.tsx

* Update test selector to use data-testid instead of data-model-name

* Add deployed-model-name test ID to InferenceServiceTableRow

- Add data-testid='deployed-model-name' to both Link and span elements
- Preserve existing metrics-link functionality
- Update page object to use new test ID selector
- Add uncaught exception handler for JavaScript parsing errors
- Support both loaded and unloaded model states

* Update model serving tests: remove exception handling and fix project deletion timeout

- Remove unnecessary Cypress.on('uncaught:exception') handling from all model serving tests
- Set 5-minute timeout for project deletion due to RHOAIENG-19969
- Add TODO comments to review timeout once RHOAIENG-19969 is resolved
- Support proper test retries by waiting for project deletion completion
- Clean up test code to be more focused and maintainable

* Address review comments: use findByTestId and remove redundant data-model-name

- Update findModelDeployedName() in page object to use findByTestId('deployed-model-name') for consistency
- Remove redundant data-model-name attribute from InferenceServiceTableRow component
- Keep only data-testid='deployed-model-name' for test selection

Addresses review feedback from Griffin-Sullivan on PR #4499

* Update frontend/src/__tests__/cypress/cypress/pages/modelServing.ts

Co-authored-by: Griffin Sullivan <[email protected]>

* Remove unused findModelDeployedName method from page object

- Method was not used anywhere in the codebase
- Clean up unnecessary code for better maintainability

* Rename findModelServerName to findModelMetricsLink for clarity

- Renamed findModelServerName(name: string) to findModelMetricsLink(name: string) in ModelServingSection
- This method actually finds metrics links using metrics-link-${name}, not model server names
- Updated all test file references to use the new method name
- Kept the original findModelServerName() method for input fields unchanged
- Addresses naming confusion between different findModelServerName methods

Updated files:
- testSingleModelContributorCreation.cy.ts
- testSingleModelAdminCreation.cy.ts
- testDeployOCIModel.cy.ts
- testModelServingTolerations.cy.ts

---------

Co-authored-by: Griffin Sullivan <[email protected]>

* Remove dashboard hardware profiles CRD (#4500)

* Add 'Last Deployed' column to model deployments (#4468)

* Add 'Last Deployed' column to model deployments

* Adjust extension and modify for model mesh

* Add generic component for last deployed

* Cypress fix

* Fix sorting for models refactor

* Adjust to only show timestamp for 'Started' models

* fixed filtering behavior for model registry page (#4482)

* fixed filtering behavior for model registry page

* fixed tests

* added filtering for model version table

* removed file extension

* upversion dashboard (#4503)

* Workbench Test Maintenance - implement dynamic notebook image selection with backend fallback (#4502)

* feat: implement dynamic notebook image selection with backend fallback

- Replace hardcoded 'jupyter' image validation with dynamic selection
- Add selectNotebookImageWithBackendFallback utility function:
  - Try UI selection first (createSpawnerPage.findNotebookImage)
  - Fall back to backend query if UI element not found
  - Uses opendatahub.io/notebook-image-name annotation for display name
- Update workbench tests to use scoped validation (notebookRow.shouldHaveNotebookImageName)
- Centralize all OC commands in imageStreams.ts utility per Cypress E2E rules
- Handle environment variables (APPLICATIONS_NAMESPACE) internally in utilities
- Fix async/sync mixing issues in Cypress command chaining

Resolves: RHOAIENG-30224

* feat: complete dynamic image selection for testWorkbenchVariables.cy.ts

- Replace all hardcoded 'code-server' validations with dynamic approach
- Both tests now use selectNotebookImageWithBackendFallback for UI-first selection
- All 4 workbench instances now validate using getImageStreamDisplayName
- Handle complex test structure with multiple workbenches per test
- Proper async chaining for nested workbench creation flows
- All 6 workbench test files now consistently use dynamic image selection

All workbench tests (11 total) now passing with dynamic image selection:
✅ testWorkbenchControlSuite.cy.ts (2 tests)
✅ testWorkbenchCreation.cy.ts (2 tests)
✅ testWorkbenchImages.cy.ts (1 test)
✅ testWorkbenchNegativeTests.cy.ts (2 tests)
✅ testWorkbenchStatus.cy.ts (1 test)
✅ testWorkbenchVariables.cy.ts (2 tests) - COMPLETED
✅ workbenches.cy.ts (1 test)

Resolves: RHOAIENG-30224

* refactor: remove unused helper functions from imageStreams.ts

Address CodeRabbit AI feedback by removing dead code:
- Remove verifyNotebookImageDisplayName (unused)
- Remove validateNotebookRowImageName (unused)
- Remove shouldHaveNotebookImageNameFromImageStream (unused)
- Remove selectTestImageStream (unused)

All tests use getImageStreamDisplayName directly with manual validation,
making these helper functions redundant. This cleanup reduces code
duplication and maintains only the functions actually used:

✅ getImageStreamDisplayName - Core function used in all tests
✅ selectNotebookImageWithBackendFallback - Main selection function
✅ getAvailableNotebookImageStreams - Used by fallback logic
✅ getNotebookImageNames - Used by testWorkbenchImages.cy.ts

File size reduced from 273 lines to ~150 lines with no functionality lost.

* test: add @Workbenches tag to workbenches.cy.ts test

Add missing @Workbenches tag to the 'Verify users can create a workbench
and connect an existent PersistentVolume' test case.

This ensures the test is included when running workbench tests with
tag filtering (e.g., --env grepTags='@Workbenches').

* Add back hardware profiles crd (#4507)

* Add back hardware profiles crd

* Add description

* Deploy a Model from a PVC (#4449)

* deploy a model from pvc

* existing uri bug fix

* simplify useEffect and hide uri when pvc found

* Refactor: Avoid destructuring from process.env (#4510)

* add documentation on extensibility (#4501)

* add documentation on extensibility

* add link under 'developer readmes'

* add cypress tests for missing links (#4513)

* add cypress tests for help links

* Refactor: Avoid destructuring from process.env

---------

Co-authored-by: Lucas Fernandez <[email protected]>

* Serving refactor: Backport nim platform (#4493)

* Add refactor platform card

* Update NIM context to be generic

* Updating naming

* Add tests

* import consistency updates

* cleaner isPlatformEnabled

* Feature Store Context and API setup (#4509)

* Feature Store Context and API setup:
* Backend proxy setup
* Routes
* Context
* Hooks
* API
* Unit tests

* remove title icon

* import updates and few changes

* adding unit tests

* PR review updates

* Invalid project selector

* adding prefix in proxy

* Add fix to image streams notebook enabling annotation (#4522)

* Splitting feature store types.ts (#4529)

* Add skeleton for accelerator profile while loading (#4454)

* change loading checks and update components

* add state for component

* fix lint

* Update AcceleratorProfileSelectField.tsx

* fix loading state issues

* remove imports

* add test case

* DevFeatureFlag removal (#4517)

* Status refresh for the Model Registry's Deployments (#4466)

* MR status refresh

* fix lint: imports

* address comments

* Globals page exports routes with metrics too (#4519)

* Globals page exports routes with metrics too

* better metric link logic

* Initial folder structure for llama stack ui (RAG/Gen AI v3) (#4535)

* feat: integrate model registry into the deployment (#4450)

* PVC Serving E2E Test (#4494)

* Add E2E test for deploying from PVC

* pr fixes

* remove feature flag flip

* PVC serving microcopy updates (#4516)

* PVC serving microcopy updates

* Add HelperTextItem

* change to popover

* warning title change

* fix: update title and label text in Enable NIM dialog to reference personal key (#4536)

Signed-off-by: Olga Lavtar <[email protected]>

* Refactor RegisterCatlogModel and Remove useEffect (#4420)

* Refactor RegisterCatlogModel and remove useEffect

* model name fix for cypress test

* simplify the hook

* mapping suggestion fix

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* remove timeout from test

Co-authored-by: Robert Sun <[email protected]>

* timeout removal

Co-authored-by: Robert Sun <[email protected]>

* timeout removal

Co-authored-by: Robert Sun <[email protected]>

* remove the prefilled values test

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Robert Sun <[email protected]>

* aggregate get/list/watch permissions to project admins/contributors (#4497)

* chore: e2e Test Maintenance - Jul 24th 25' (#4538)

* RHOAIENG-30472: Standardize deleteKueueResources function options to match deleteOpenShiftProject pattern

- Add standardized options parameter with timeout, wait, and ignoreNotFound properties
- Implement same pattern and defaults as deleteOpenShiftProject for consistency
- Fix async/sync code mixing issues that caused Cypress errors
- Update test files to use new options parameter syntax with proper comma placement
- Maintain backward compatibility while improving code consistency

* Add exception handler for webpack-dev-server fallback errors in E2E tests

- Ignore 'Unexpected token <' errors that occur due to webpack-dev-server fallback
- Prevents E2E tests from failing due to these development environment issues
- Added alongside existing ChunkLoadError handler for consistent error handling

* Add quarantine steps to model serving E2E tests

- Add quarantine steps to testModelStopStart.cy.ts
- Add quarantine steps to testSingleModelAdminCreation.cy.ts
- Add quarantine steps to testSingleModelContributorCreation.cy.ts
- Fix formatting issues with tag arrays per prettier requirements

* Update frontend/src/__tests__/cypress/cypress/utils/oc_commands/distributedWorkloads.ts

Co-authored-by: Noam Manos <[email protected]>

* Improve robustness of Kueue resource deletion commands

- Replace && with || : ; to ensure all deletion attempts run independently
- Prevents cleanup from stopping if one resource doesn't exist
- Addresses review feedback from @manosnoam in PR #4538

Co-authored-by: Noam Manos <[email protected]>

---------

Co-authored-by: Noam Manos <[email protected]>

* Add version labels to refactored code (#4523)

* Add version labels to refactored code

* Add generic component

* Modify servingruntime to servingdetails, create shared version component

* Added entire repo for llama-stack-modular-ui (#4541)

* Added entire repo for llama-stack-modular-ui

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Removed .github

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Added .eslintignore

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Added gh actions

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Fix for lint errors

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Removed gh actions

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Ignoring tests in llama-stack-modular-ui directory

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

---------

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* [feat] Add real amd mock endpoints for Query and Chat completion (#4543)

This commit contains the following:
1. Mock and real endpoints for query.
2. Allows query when no DB is present.
3. Allows query when DB is present.

Signed-off-by: Varsha Prasad Narsing <[email protected]>
Co-authored-by: Matias Schimuneck <[email protected]>

* Add area/llama-stack-modular-ui label for PRs (#4551)

* Serving refactor  global models page backport (#4531)

* Add global models page backports

* Remove unused backport file

* Quarantine distributed workloads test - add bug tag and JIRA reference RHOAIENG-30510 (#4550)

* Unquarantine serving tests from RHOAIENG-30376 (#4554)

* add llama stack github action workflow (#4546)

* add llama stack workflow

* fix package.json in llama-stack-modular-ui

* change the workflow name

* feat: Add comprehensive OpenAPI documentation for Llama Stack Modular… (#4547)

* feat: Add OpenAPI documentation for Llama Stack Modular UI BFF

- Add comprehensive OpenAPI 3.0 specification for BFF endpoints
- Include /api/v1/query endpoint for RAG and chat completion
- Add vector database management endpoints
- Include model management endpoints
- Fix CORS configuration for healthcheck endpoint to enable Swagger UI
- Document only public-facing models and remove authentication requirements
- Add common schemas and responses in separate lib/common.yaml file

The OpenAPI documentation can be visualized using Swagger UI or any OpenAPI viewer.
Run the BFF with: make run STATIC_ASSETS_DIR=../frontend/dist MOCK_LS_CLIENT=true ALLOWED_ORIGINS="*"

* docs: Improve OpenAPI specification clarity and security definitions

- Add explicit security: [] to healthcheck and config endpoints for public access
- Clean up proxy endpoint descriptions by removing redundant authentication text
- Improve formatting consistency in OpenAPI specification
- Clarify which endpoints are public vs require authentication

---------

Co-authored-by: Matias Schimuneck <[email protected]>

* Bump form-data in /frontend/packages/model-registry/upstream/frontend (#4521)

Bumps [form-data](https://github.com/form-data/form-data) from 4.0.3 to 4.0.4.
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v4.0.3...v4.0.4)

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 4.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Manaswini Das <[email protected]>

* config: enable typecheck for source files, disable only for test files (#4562)

- Enable typecheck linter for regular source code files
- Disable typecheck only for test files (*_test.go) to avoid Ginkgo framework errors
- Maintain proper type checking for production code while allowing test framework functions

* Removed all code related to chatbot openshift auth and chatbot sharing visuals (#4561)

* Removed all code related to oAuth

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Fixed eslint

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Fixed eslint

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Fixed eslint

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Fixed eslint

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Fixed eslint

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Fixed eslint

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Fixed eslint

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

---------

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* exclude llama-stack-modular-ui in tsconfig.json (#4566)

* Removed out of date documentation files (#4567)

* make rwo tag always show (#4524)

* Quarantine model serving tests for Product Bug RHOAIENG-30799

- Added [Product Bug: RHOAIENG-30799] to describe blocks for all model serving tests
- Added @Bug tag to all affected test cases
- Quarantined tests in:
  - testSingleModelAdminCreation.cy.ts
  - testSingleModelContributorCreation.cy.ts
  - testModelPvcDeployment.cy.ts
  - testModelStopStart.cy.ts
  - testMultiModelAdminCreation.cy.ts
  - testDeployOCIModel.cy.ts
  - testSingleServingRuntimeCreation.cy.ts

* module federation documentation (#4556)

* Feature view api (#4553)

* Feature View
* Table
* Routes
* API Hooks
* Empty state

* Ensuring API availability for feature store

* Feature view tags overflow fix

* empty owner placeholder

* Coderabit updates

* Updating feature view online offline label

* cypress tests

* Update failed unit test

* Test updates

* Uncommenting mock status

* Port start / stop models to the plugin (#4533)

* Model Registry - ODH Enablement (#4540)

* Lucas' test MR container

* Update params.env

* Update deployment.yaml

* Update deployment.yaml

* Fix issue with overlay

* Get target ports referenced by name

* Revert namespace

* Avoid using labels in this overlay

---------

Co-authored-by: Andrew Ballantyne <[email protected]>
Co-authored-by: Lucas Fernandez <[email protected]>

* Serving refactor global cypress test fixes (#4555)

* Add global models page backports

* Remove unused backport file

* fixes

* small test update

* Remove comments

* Fix more tests

* Fix last deployed tooltip mouseenter

* feat: adapt base images to red hat and migrate from ubi8 to ubi9 (#4565)

* Cypress e2e Test - Verify models can be deployed from model registry (#4564)

* add new deploy test

* increase timeout

* handle empty registry condition

* deploy secret

* handle single registry condition

* improve timeout mechanism

* minor enhancements

* combine mr utils

* add page object

* lint

* remove initial validation

* move clickRegisterModelButton to new util

* update tests

* follow up missing changes in commit (#4576)

* Upgrade mod arch upstream (#4579)

* Update model-registry to b4c43a0dfc6864f9a630a011e71f48c48b695df1

* Revert changes that override upstream

* RHOAIENG-28909: Add Storage Class Provisioner "disk.csi.azure.com" to Storage Enums (#4528)

* added disk.csi.azure.com

* added RWOP

* added unit tests

* added RWX

* rwo only

* New LMEval E2E tests for TrustyAI (#4511)

* New LMEval E2E tests for TrustyAI

This commit adds comprehensive LMEval tests and related E2E utilities:

- Add 2 scenarios for LMEval using static and dynamic models
- Add LMEval job utilities for configuration and job verification
- Add ModelTestSetup utility for any e2e test setup
- Add YAML support to ESLint: eslint-plugin-yml, yaml-eslint-parser
- Update LMEval form components with missing test IDs

Signed-off-by: manosnoam [email protected]

* Fix CodeRabbitAI comments

Signed-off-by: manosnoam <[email protected]>

* Multiple fixes to address Reviewers comments

Signed-off-by: manosnoam <[email protected]>

* fix(lm-eval): Dynamically detect port for InferenceService connections

LMEval jobs were failing with ConnectionRefusedError because they were
connecting to InferenceService models on the default port 80, while the
ServingRuntime was configured to listen on a different container port.

This fix fetches the ServingRuntime associated with each
InferenceService and extracts the containerPort from its definition.
The port is then used to construct the correct internal cluster URL.

Signed-off-by: manosnoam <[email protected]>

* Update LMEval mock tests and page object

Signed-off-by: manosnoam <[email protected]>

* Split LMEval tests into static and dynamic test files

Signed-off-by: manosnoam <[email protected]>

* Fix CodeRabbitAI suggestions

Signed-off-by: manosnoam <[email protected]>

* Rebase lmeval_e2e branch

Signed-off-by: manosnoam <[email protected]>

* Quarantine testLMEvalDynamic due to bug RHOAIENG-30642

Signed-off-by: manosnoam <[email protected]>

* Fix accessibility violations (A11y) with plain buttons in LMEval form

Signed-off-by: manosnoam <[email protected]>

* Add testId to LMEvalTaskSection

Signed-off-by: manosnoam <[email protected]>

* Rename lmEval.ts to lmEvalFormPage.ts

Signed-off-by: manosnoam <[email protected]>

* Fix e2e.ts before hook to skip test suites based on tags

Signed-off-by: manosnoam <[email protected]>

* Update LMEval E2E page objects and tests

- Remove complex dropdown logic, enhance model selection
- Move cleanup function, remove fallback project name
- Enhance YAML parsing with error handling
- Login before test, to avoid session race conditions with devFeatureFlags
- Remove Tag for bug RHOAIENG-30642
- Update README.md

Signed-off-by: manosnoam <[email protected]>

---------

Signed-off-by: manosnoam [email protected]
Signed-off-by: manosnoam <[email protected]>

* E2E Test for Token Authentication (#4572)

* add E2E test to validate token authentication

* copy tokens from UI

* remove comment

* Serving refactor: fix project details tab cypress tests (#4580)

* Make test ids more consistent

* Update project test too

* Feature store entities (#4568)

* feat(RHOAIENG-28420):added constants and feature store route for entitiy details page

* feat(RHOAIENG-28420,RHOAIENG-28421):added hooks for feature store entities

* feat(reusable-components):added a common timestamp component,scrollable links popover and import changes

* feat(reusable-toolbar):added a common toolbar component

* feat(entities-detail-page):added entitities detail and list view component

* feat(entities-table):added entity table component and row component

* fix(lint):addressed linting errors  for relative imports

* fix(jest-test-cases):added hook test cases and fixed test cases for error utils and api integration

* fix(components): added route fixes, empty state and error state for entity details page

* feat(cypress):added cypress mocks and test cases

* fix:added common route function

* fix(review):added spec file for utility functions and rearranged the options in the filter to match the column

* Remove bug tags from model serving tests (#4585)

* add bug tag

* add description tag

* remove bug tags

* lint fix

* add ticket to oci test

* Add dashboard support for the pipelines Kubernetes native API (#4484)

* add section

* store

* adjust types

* remove console

* add crd connection

* begin kfp upstream changes

* revert kfp changes

* remove dataid word

* begin kfp upstream changes

* add support for new versions

* add mock tests

* fix tests and add k8s name checking

* fix lint

* adjust tests and add auto scroll

* fix unit test

* add deel equal

* add component for k8s checkbox

* change to smooth

* Add deploy button, dropdown button, and connection autofill button as extension in MR midstream (#4453)

* Add deploy button and dropdown button as extension in MR midstream

* Add autofill connection button as extension when registering model

* rebase

* Update the extensions

* Rebase and update

* Update plugin context for the MR app to unblock midstream standalone mode

* address feedback

* Revert change to mandatoryNamespace

Signed-off-by: Mike Turley <[email protected]>

* Attempt to give lint job more memory

Signed-off-by: Mike Turley <[email protected]>

---------

Signed-off-by: Mike Turley <[email protected]>
Co-authored-by: Mike Turley <[email protected]>

* Update MR e2e test `testArchiveModels' (#4586)

* update test

* add should_be_enabled

* add page object

* linter fixes

* lint

* add selectors

* Add edit model modal to refactor (#4573)

* consolidate hooks

* deprecate hooks

* replace hooks with default hook

* fixed tests

* remove auto patch code for admin page

* delete deprecated hooks

* clean up

* fixed issue

* updated comment

* Feature store toolbar component (#4593)

* Feature store toolbar component

* solving linting

* fix:resolved linting issues

---------

Co-authored-by: Claudia Alphonse <[email protected]>

* Doc upload in chatbot (#4612)

* Converted to new designs

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Removed some eslint ignore statements

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Added document upload functionality

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* Refactor

Signed-off-by: Agnieszka Gancarczyk <[email protected]>

* test fix

* test fix

---------

Signed-off-by: Agnieszka Gancarczyk <[email protected]>
Co-authored-by: pnaik1 <[email protected]>

* Increasing memory allocation to 8GB for lint tests (#4616)

* feat: Add OpenAPI serving to BFF (#4560)

- Add OpenAPI handler with JSON, YAML, and Swagger UI endpoints
- Support external references in OpenAPI specification
- Integrate OpenAPI routes with existing routing system
- Preserve static file serving functionality with STATIC_ASSETS_DIR
- Add comprehensive API documentation endpoints:
  * /openapi.json - OpenAPI specification in JSON format
  * /openapi.yaml - OpenAPI specification in YAML format
  * /swagger-ui - Interactive Swagger UI interface
  * /openapi - Redirect to Swagger UI

The BFF now serves both frontend static files and provides
comprehensive OpenAPI documentation for the API endpoints.

* Link refactor deploy buttons to existing deploy modal (#4542)

* Link refactor deploy buttons to existing deploy modal

* Adjustments from feedback

* Add toolbar for refactored global models page

* Small bug fixes

* Refine some areas

* Remove references to refresh

* Clean up code and fix deploy button in global no models

* Kueue microcopy changes (#4620)

* Adds user_token auth mode to llama stack module (#4596)

* Updates authentication to follow pattern used by model registry. Now supports user_token mode.

* fix: properly disable authentication if auth_method=disabled

* refactor: optimize TokenClientFactory performance and make API path prefix configurable

- Move TokenClientFactory creation from per-request to app-level initialization
- Add configurable APIPathPrefix to EnvConfig with default /api/v1
- Add --api-path-prefix command-line flag and API_PATH_PREFIX env var
- Replace hardcoded ApiPathPrefix constants with dynamic path generation methods
- Update middleware to use app.tokenFactory instead of recreating per request
- Update isAPIRoute function to be App method using configurable prefix
- Update all tests to work with new configurable approach
- Maintain backward compatibility with default /api/v1 prefix

This improves performance by eliminating per-request object creation and
provides flexibility for different deployment scenarios.

---------

Co-authored-by: Akram Ben Aissi <[email protected]>

* E2E test for model deployment with Kserve Raw (#4583)

* Cypress E2E test for model deployment with Kserve Raw -20579

* refactored code

* Addressed review comments

* Add [Product Bug: RHOAIENG-31261]  and Bug Tag to Quarantine the test

* update checkInferenceServiceState utility method to check deployment mode

* Update deployment mode conditions

* remove getDeploymentModeLength() function.

* refactored code

* refactored code

* fixed tests

* add feature page (#4574)

* add feature page

* feat:added test cases,tooltip, common filter changes

* feat:added fature views api in the odh cypress file

* fix:reused the generic filter component and removed the unused featurestoolbar

* changed the test id for the toolbar

---------

Co-authored-by: Claudia Alphonse <[email protected]>

* Unquarantine missed serving test from RHOAIENG-30799 bug (#4617)

* Feature services (#4571)

* Feature service

* Added project col

* Coderabbit comments

* Tests added

* Feature view links

* feature service dates

* Feature service toolbar

* fixing lint

* Lint fix

* fixing tests

* Fixing tests 2

* Replace project column

* Adding back type and mocks

* typo fix

* TruncatedText truncation for tooltips in HardwareProfileSelection helper description (#4578)

* fix tooltip

* adjust other overflow

* update truncate text

* adjust truncation options

* add scroll
:

* use panel

* add back in support for no truncation

* adjust text

* fix truncation for simpleselect

* change back to truncated text

* fix mouse enter hook

* Dspa caching rebased (#4621)

* dspa cache enablement; squashing all the commits:
 (rebasing on derek's branch: story-21309)

  * using cacheEnabled (instead of cache: {enabled: <value>})
  * autoscrolling when the alert shows up now so alert is not hidden
      *turning off autoscroll unless user interacted with it
  * added 'Loading...' text
  * renamed View->Manage for the modal
  * added toast
  * added tests
     * added to cypress mock test
  * playing with titles/text sizes
  * adjusting layout depending on the context
     * alert looks better and takes up entire width now, no matter the layout mode

* linter fix (import order )

* fixing tests

* updated tests; did lint fixes; removed the lint:changed from package.json

* fixing import

* working on package files....

* restoring package-lock.json

* restored base package files

* starting on review comments:  fixed one layout issue and using 'useNotificaton' instead of the context

* fixing button alignment in the modal

* small tweaks:  style removed, test code adjusted per review

* fixed import

* linter fix

* test fix

* fixing test (to use useNotification hook instead of registerNotification)

* removing tag that cursor added

* fixing more tests

* adding in a StackItem to add a margin without adding explicit css; tested that the auto-scroll to view the alert is still functional

* Refractor ChatbotMain.tsx file (#4624)

* remove @app alias

* create separate folder

* add hooks

* add unit test for hooks

* Rhoaieng 28422 - 	Entities tab - feature views (#4626)

* feat:added entity param for the feature views tab

* feat:added cypress test for feature views tab and updated usefeature views hook spec test

* feat:added feature view tab for entities

* feat:added classname and a fixed test case

* [feat] Allow context message to be an input from the user (#4603)

This change allows users to input context message from the user
instead of hardcoding it.

To test the change, use the mock client and run the command:

curl -X POST http://localhost:8080/api/v1/query \
  -H "Content-Type: application/json" \
  -d '{
    "content": "What is machine learning?",
    "vector_db_ids": ["my-vector-db-identifier"],
    "llm_model_id": "ollama/llama3.2-3b",
     "system_prompt": "You are a technical consultant. Provide concise, actionable insights based on the available context."
  }'

Signed-off-by: Varsha Prasad Narsing <[email protected]>

* Feature service details (#4628)

* Feature service

* Added project col

* Feature service toolbar

* Replace project column

* Feature service details

* tests update

* Coderabbit comments

* Fallback for no tags

* Fix case sensitivity: rename featureServiceDetails.tsx to FeatureServiceDetails.tsx

* Details page empty states

* Empty message update

* solving tests

* resolving conflicts

* revert

* revert comment

* Package and feature flag setup for model training (#4615)

* serving refactor: cypress project details model fixes (#4601)

* Add checking runtimeTemplates for deploy button

* Fix accessibility error

* More consistent testids

* Add testid for project details table too

* Add missing testid for change platform button

* Minor fix to make deploy button a link in the section overview

* fix type and short circuit some template api calls

* Fix deploy button not having a project in global

* Fix templates load state

* final fixes

* Add PR review guidelines and best practices (#4486)

* Add PR review guidelines and best practices

* Fix indentation, wording, add to PR template

* Fix Markdown formatting issues

* Fix MD007 issues

* Add more details about when to and when not to use useCallback

* Add code examples

* make content clearer and add examples

* Serving refactor cypress: Re-add deploy from registry button link (#4623)

* Make and use nav back to registry button

* Fix gap being gone when aria-disabled true

* chore(deps): Upgrade PatternFly to 6.3.0 release (#4435)

fix lint

chore(deps): bump versions to latest prerelease candidates

chore(deps): bump versions to latest prerelease candidates

chore(deps): bump versions to latest prerelease candidates, update table components

chore(deps): fix lint

chore(deps): fix lint

chore(deps): bump to stable release versions

chore(deps): add isHamburgerButton prop for page toggle animation

chore(deps): fix tabs bug, add TODO for table, remove BarsIcon as child of PageToggleButton

chore(deps): remove BarsIcon from imports in Header.tsx

chore(deps): apply usePageInsets prop instead of util classes to match page margins

chore(deps): bump to latest patch release versions

chore(deps): revert hasAnimations on opt-in components

chore(deps): revert hasAnimations on opt-in components

chore(deps): revert hasAnimations on opt-in components

chore(deps): revert Header.tsx to apply isHamburgerButton

* test: create unit tests for internal api handlers and cmd package (#4619)

* Feature view tab for features (#4631)

* Add CY_RETRY option for Cypress test retry configuration

- Add new CY_RETRY environment variable to control test retry behavior
- Document all Cypress environment configuration in testing.md
- Reference main documentation from cypress README to avoid duplication

Signed-off-by: manosnoam <[email protected]>

* Fix uncaught exception handler conflict in e2e.ts

Multiple uncaught:exception handlers were interfering in e2e.ts,
causing timeout errors to be ignored instead of failing tests.
For example, pipelines/topology.ts had a timeout error handler that was
overriding the global one, causing tests to run for 1.5+ hours
(until Jenkins killed them).

Fixed by consolidating into a single uncaught exception handler.

Signed-off-by: manosnoam <[email protected]>

* Add support for both process.env and --env variables for all CY_ vars

Signed-off-by: manosnoam <[email protected]>

* Make modular architecture workspace enabled so it works with plugins (#4595)

* Move 'Use existing settings' to top of Hardware Profile select list (#4627)

* change order

* add unit test

* move to new describe block

* add not exist assertion

* Add params.env to modular architecture overlay so the operator can inject the image (#4575)

* fix: Update NIM enable test to be more resilient (#4590)

* feat: implement robust NIM application enablement test with automatic manifest application

- Add comprehensive NIM application enablement test with automatic manifest application
- Create dedicated nimCommands.ts file for NIM-specific functions
- Implement robust NIM card detection and enable button handling
- Add proper error handling for cases where NIM is already enabled
- Improve test reliability with proper timeouts and element detection
- Add NIM manifest fixture for testing
- Resolve async/sync mixing issues and improve scrolling behavior
- Add @SanitySet3 tag for test categorization
- Fix linting issues and improve code formatting

* fix: resolve linting issues in NIM test files

- Fix unnecessary else after return in NIMCard.ts
- Fix prettier formatting issues in testEnableNIM.cy.ts
- Fix indentation and spacing in nimCommands.ts
- Add proper function name for test function to resolve func-names warning
- Ensure all files pass eslint and prettier checks

* refactor: simplify NIM test by removing already-enabled checks

- Remove all logic around checking if NIM was already enabled
- Simplify executeNIMTestSteps function to return void instead of boolean
- Remove unnecessary conditional logic and skip statements
- Clean up the test flow since deleteNIMAccount in before() handles cleanup
- Make the test more straightforward and focused on the enablement flow

* refactor: improve NIM test with better step logging and page object encapsulation

- Replace cy.log() with cy.step() for test steps to improve test reporting
- Add reload() method to ExplorePage class for better encapsulation
- Use explorePage.reload() instead of direct cy.reload() calls
- Keep informative cy.log() calls for context that don't represent test steps
- Improve test readability and maintainability

* refactor: move direct DOM selectors to NIMCard page object methods

- Add findDrawerPanel() method to NIMCard class for drawer panel selector
- Add findActionList() method to NIMCard class for action list selector
- Add findEnableButton() method to NIMCard class for enable button selector
- Replace direct cy.get() calls with page object methods in test
- Improve encapsulation and follow mandatory coding guidelines for UI interactions

---------

Co-authored-by: Noam Manos <[email protected]>

* Model serving fix cypress platform selection errors (#4602)

* Reuse same platform error alert

* Add error alert for details page too

* Verify Required type and add system instruction (#4638)

* add required file

* add required type and system instructions

* add source toggle button

* fix test

* microcopy change for pipeline caching section; no functional changes (#4643)

* microcopy change for pipeline caching section; no functional changes

* updated relevant test that checked the text

* RHOAIENG 29677 -Feature Views details section (#4635)

* feat:updated mocks and cypress tests for feature services,views,entities

* feat:added apis getfeatureviewbyname, added routes for data sources, and updated jest test files

* feat:added hooks changes for feature store

* feat:updated props in featurestorecodeblock, and constant changes for feature store objects

* feat:added filter utils function to handle feature views, and types and utils files

* feat:added filtering changes for project column for entities

* feat:added filtering changes for project column for features

* feat:added filtering changes for project column for feature services

* feat:added filtering changes for project column for feature views and removed the unused toolbar for feature views

* feat:added feature views details tab, details page and the consuming tab component

* feat:added feature view tabs component, and feature view schema and transformation component

* feat:added feature view lineage tab and feature view materialization tab component

* fix:test cases fixes

* fix(review-comments):resolved code rabbit and other review comments

* fix(review-comments):added fallback for not interaction code block

* fix(store-type-filter-feature-view):added custom filtering fix for the feature view for the store type filter

* fix(review-comments): added feature view materialization component with sorting, replaced the table less header for entity details part with flex

* fix:added compact variant for materialization component

* fix:added minor textual changes and test id changes

* cypress config file

* cypress config file added to tsconfig for cypress

* Migrate /images POST, PUT, and DELETE endpoints to frontend (#4470)

* PVC Model Path Helper Text Update (#4651)

* helper text

* pull out connected resources

* Add reviewers in llama-stack-modular-ui (rag-playground) (#4625)

* Add ChristianZaccaria as reviewer in llama-stack-modular-ui (rag-playground)

* Add Bobbins228 and Ygnas as reviewers in rag-playground

* Fix the pipelines run metrics table (#4652)

* Ignore store_session_info when displaying pipeline run metrics

This is an implementation detail not directly set by the user, so it
does not need to be displayed.

Signed-off-by: mprahl <[email protected]>

* Fix displaying pipeline run metrics with zero values

If a metric had a `0` value, the code would call `toString` on `boolValue`
which is undefined and caused the UI to crash until the pipeline run was
archived.

Signed-off-by: mprahl <[email protected]>

---------

Signed-off-by: mprahl <[email protected]>

* Update start / stop models with UX improvements (#4645)

* remove model name (#4653)

* Update Tekton output-image tags to version v2.35.1-odh (#4430)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* updated tekton (#4432)

* upversion dashboard (#4434)

* Upversion Dashboard

---------

Signed-off-by: Olga Lavtar <[email protected]>
Signed-off-by: Agnieszka Gancarczyk <[email protected]>
Signed-off-by: Varsha Prasad Narsing <[email protected]>
Signed-off-by: dependabot[bot] <[email protected]>
Signed-off-by: manosnoam [email protected]
Signed-off-by: manosnoam <[email protected]>
Signed-off-by: Mike Turley <[email protected]>
Signed-off-by: mprahl <[email protected]>
Co-authored-by: Katelynn Perry <[email protected]>
Co-authored-by: Griffin Sullivan <[email protected]>
Co-authored-by: Purva Naik <[email protected]>
Co-authored-by: Fede Alonso <[email protected]>
Co-authored-by: Pushpa Padti <[email protected]>
Co-authored-by: Theia <[email protected]>
Co-authored-by: mtalvi <[email protected]>
Co-authored-by: Emily Samoylov <[email protected]>
Co-authored-by: Conor O'Malley <[email protected]>
Co-authored-by: Robert Sun <[email protected]>
Co-authored-by: Juntao Wang <[email protected]>
Co-authored-by: Ashley McEntee <[email protected]>
Co-authored-by: Derek Xu <[email protected]>
Co-authored-by: Lucas Fernandez <[email protected]>
Co-authored-by: Jill Pelavin <[email protected]>
Co-authored-by: Arsheen Taj Syed <[email protected]>
Co-authored-by: Christian Vogt <[email protected]>
Co-authored-by: Anthony Coughlin <[email protected]>
Co-authored-by: Anthony Coughlin <[email protected]>
Co-authored-by: Nana Nosirova <[email protected]>
Co-authored-by: Sri Sai Sowjanya Darna <[email protected]>
Co-authored-by: Griffin-Sullivan <[email protected]>
Co-authored-by: Anish Surti <[email protected]>
Co-authored-by: Claudia Alphonse <[email protected]>
Co-authored-by: Lucas Fernandez <[email protected]>
Co-authored-by: Dipanshu Gupta <[email protected]>
Co-authored-by: Eder Ignatowicz <[email protected]>
Co-authored-by: olavtar <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Noam Manos <[email protected]>
Co-authored-by: Agnieszka Gancarczyk <[email protected]>
Co-authored-by: Varsha <[email protected]>
Co-authored-by: Matias Schimuneck <[email protected]>
Co-authored-by: Andrew Ballantyne <[email protected]>
Co-authored-by: Matias Schimuneck <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Akram Ben Aissi <[email protected]>
Co-authored-by: Andrew Ballantyne <[email protected]>
Co-authored-by: Mike Turley <[email protected]>
Co-authored-by: Anish Surti <[email protected]>
Co-authored-by: Alex Creasy <[email protected]>
Co-authored-by: Jenny <[email protected]>
Co-authored-by: IAN MILLER <[email protected]>
Co-authored-by: Gary Harden <[email protected]>
Co-authored-by: Christian Zaccaria <[email protected]>
Co-authored-by: Matt Prahl <[email protected]>
Co-authored-by: odh-devops-app[bot] <140140902+odh-devops-app[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
@coderabbitai coderabbitai bot mentioned this pull request Aug 12, 2025
6 tasks
antowaddle pushed a commit to antowaddle/odh-dashboard that referenced this pull request Aug 15, 2025
* Feature Store Context and API setup:
* Backend proxy setup
* Routes
* Context
* Hooks
* API
* Unit tests

* remove title icon

* import updates and few changes

* adding unit tests

* PR review updates

* Invalid project selector

* adding prefix in proxy
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.

4 participants