diff --git a/frontend/src/__mocks__/mockGoogleRpcStatusKF.ts b/frontend/src/__mocks__/mockGoogleRpcStatusKF.ts new file mode 100644 index 0000000000..007a13bb73 --- /dev/null +++ b/frontend/src/__mocks__/mockGoogleRpcStatusKF.ts @@ -0,0 +1,19 @@ +import { GoogleRpcStatusKF } from '~/concepts/pipelines/kfTypes'; + +type MockGoogleRpcStatusKF = { message?: string }; + +export const mockSuccessGoogleRpcStatus = ({ + message = '', +}: MockGoogleRpcStatusKF): GoogleRpcStatusKF => ({ + code: 0, + message, + details: [], +}); + +export const mockCancelledGoogleRpcStatus = ({ + message = '', +}: MockGoogleRpcStatusKF): GoogleRpcStatusKF => ({ + code: 1, + message, + details: [], +}); diff --git a/frontend/src/__tests__/cypress/cypress/e2e/modelRegistry/ModelRegistry.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/modelRegistry/ModelRegistry.cy.ts index 72afbdc94b..606c71765d 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/modelRegistry/ModelRegistry.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/modelRegistry/ModelRegistry.cy.ts @@ -50,12 +50,22 @@ const initIntercepts = ({ ); cy.interceptOdh( - `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/${MODEL_REGISTRY_API_VERSION}/registered_models`, + `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/registered_models`, + { + path: { serviceName: 'modelregistry-sample', apiVersion: MODEL_REGISTRY_API_VERSION }, + }, mockRegisteredModelList({ size: registeredModelsSize }), ); cy.interceptOdh( - `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/${MODEL_REGISTRY_API_VERSION}/registered_models/1/versions`, + `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/registered_models/:registeredModelId/versions`, + { + path: { + serviceName: 'modelregistry-sample', + apiVersion: MODEL_REGISTRY_API_VERSION, + registeredModelId: 1, + }, + }, mockModelVersionList({ items: modelVersions }), ); }; diff --git a/frontend/src/__tests__/cypress/cypress/e2e/modelRegistry/ModelVersionDetails.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/modelRegistry/ModelVersionDetails.cy.ts index 96681bd689..1eefad6aa1 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/modelRegistry/ModelVersionDetails.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/modelRegistry/ModelVersionDetails.cy.ts @@ -38,12 +38,27 @@ const initIntercepts = () => { ); cy.interceptOdh( - `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/${MODEL_REGISTRY_API_VERSION}/registered_models/1`, + `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/registered_models/:registeredModelId`, + { + path: { + serviceName: 'modelregistry-sample', + apiVersion: MODEL_REGISTRY_API_VERSION, + registeredModelId: 1, + }, + }, + mockRegisteredModel({}), ); cy.interceptOdh( - `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/${MODEL_REGISTRY_API_VERSION}/registered_models/1/versions`, + `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/registered_models/:registeredModelId/versions`, + { + path: { + serviceName: 'modelregistry-sample', + apiVersion: MODEL_REGISTRY_API_VERSION, + registeredModelId: 1, + }, + }, mockModelVersionList({ items: [ mockModelVersion({ name: 'Version 1', author: 'Author 1', registeredModelId: '1' }), @@ -58,8 +73,14 @@ const initIntercepts = () => { ); cy.interceptOdh( - `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/${MODEL_REGISTRY_API_VERSION}/model_versions/:id`, - { path: { id: '1' } }, + `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/model_versions/:modelVersionId`, + { + path: { + serviceName: 'modelregistry-sample', + apiVersion: MODEL_REGISTRY_API_VERSION, + modelVersionId: 1, + }, + }, mockModelVersion({ id: '1', name: 'Version 1', @@ -110,13 +131,26 @@ const initIntercepts = () => { ); cy.interceptOdh( - `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/${MODEL_REGISTRY_API_VERSION}/model_versions/:id`, - { path: { id: '2' } }, + `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/model_versions/:modelVersionId`, + { + path: { + serviceName: 'modelregistry-sample', + apiVersion: MODEL_REGISTRY_API_VERSION, + modelVersionId: 2, + }, + }, mockModelVersion({ id: '2', name: 'Version 2' }), ); cy.interceptOdh( - `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/${MODEL_REGISTRY_API_VERSION}/model_versions/1/artifacts`, + `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/model_versions/:modelVersionId/artifacts`, + { + path: { + serviceName: 'modelregistry-sample', + apiVersion: MODEL_REGISTRY_API_VERSION, + modelVersionId: 1, + }, + }, mockModelArtifactList(), ); }; diff --git a/frontend/src/__tests__/cypress/cypress/e2e/modelRegistry/ModelVersions.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/modelRegistry/ModelVersions.cy.ts index 2900791bb5..8d743f93da 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/modelRegistry/ModelVersions.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/modelRegistry/ModelVersions.cy.ts @@ -83,17 +83,32 @@ const initIntercepts = ({ cy.interceptK8s(ModelRegistryModel, mockModelRegistry({})); cy.interceptOdh( - `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/${MODEL_REGISTRY_API_VERSION}/registered_models`, + `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/registered_models`, + { path: { serviceName: 'modelregistry-sample', apiVersion: MODEL_REGISTRY_API_VERSION } }, mockRegisteredModelList({ size: registeredModelsSize }), ); cy.interceptOdh( - `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/${MODEL_REGISTRY_API_VERSION}/registered_models/1/versions`, + `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/registered_models/:registeredModelId/versions`, + { + path: { + serviceName: 'modelregistry-sample', + apiVersion: MODEL_REGISTRY_API_VERSION, + registeredModelId: 1, + }, + }, mockModelVersionList({ items: modelVersions }), ); cy.interceptOdh( - `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/${MODEL_REGISTRY_API_VERSION}/registered_models/1`, + `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/registered_models/:registeredModelId`, + { + path: { + serviceName: 'modelregistry-sample', + apiVersion: MODEL_REGISTRY_API_VERSION, + registeredModelId: 1, + }, + }, mockRegisteredModel({}), ); }; diff --git a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/CompareRuns.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/CompareRuns.cy.ts index 7378c82039..a70a1d62eb 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/CompareRuns.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/CompareRuns.cy.ts @@ -7,7 +7,6 @@ import { buildMockPipelineV2, buildMockPipelines, buildMockPipelineVersionV2, - buildMockPipelineVersionsV2, mockProjectK8sResource, mockRouteK8sResource, buildMockRunKF, @@ -23,6 +22,7 @@ import { compareRunsListTable, compareRunParamsTable, } from '~/__tests__/cypress/cypress/pages/pipelines/compareRuns'; +import { mockCancelledGoogleRpcStatus } from '~/__mocks__/mockGoogleRpcStatusKF'; const projectName = 'test-project-name'; const initialMockPipeline = buildMockPipelineV2({ display_name: 'Test pipeline' }); @@ -90,21 +90,24 @@ describe('Compare runs', () => { }); it('valid number of runs but it is invalid', () => { - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs/invalid_run_id`, + path: { namespace: projectName, serviceName: 'dspa', runId: 'invalid_run_id' }, }, { statusCode: 404 }, ).as('invalidRun'); + compareRunsGlobal.visit(projectName, mockExperiment.experiment_id, ['invalid_run_id']); cy.wait('@invalidRun'); compareRunsGlobal.findInvalidRunsError().should('exist'); }); it('invalid runs are removed from url', () => { - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs/invalid_run_id`, + path: { namespace: projectName, serviceName: 'dspa', runId: 'invalid_run_id' }, }, { statusCode: 404 }, ).as('invalidRun'); @@ -121,18 +124,12 @@ describe('Compare runs', () => { }); it('other failed requests dont change the url ', () => { - const errorRun = { - error: { - code: 1, // cancelled - message: 'Run cancelled by caller', - details: [], - }, - }; - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs/invalid_run_id`, + path: { namespace: projectName, serviceName: 'dspa', runId: 'invalid_run_id' }, }, - errorRun, + mockCancelledGoogleRpcStatus({ message: 'Run cancelled by caller' }), ).as('invalidRun'); compareRunsGlobal.visit(projectName, mockExperiment.experiment_id, [ 'invalid_run_id', @@ -224,36 +221,37 @@ const initIntercepts = () => { mockProjectK8sResource({ k8sName: projectName, displayName: projectName }), ]), ); - - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines`, + path: { namespace: projectName, serviceName: 'dspa' }, }, buildMockPipelines([initialMockPipeline]), ); - - cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipeline_versions`, - }, - buildMockPipelineVersionsV2([initialMockPipelineVersion]), - ); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments/:experimentId', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/experiments/${mockExperiment.experiment_id}`, + path: { + namespace: projectName, + serviceName: 'dspa', + experimentId: mockExperiment.experiment_id, + }, }, mockExperiment, ); - cy.intercept( + + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs/${mockRun.run_id}`, + path: { namespace: projectName, serviceName: 'dspa', runId: mockRun.run_id }, }, mockRun, ).as('validRun'); - cy.intercept( + + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs/${mockRun2.run_id}`, + path: { namespace: projectName, serviceName: 'dspa', runId: mockRun2.run_id }, }, mockRun2, ); diff --git a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/Experiments.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/Experiments.cy.ts index 25ee6881aa..8749b0185d 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/Experiments.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/Experiments.cy.ts @@ -6,8 +6,6 @@ import { mockK8sResourceList, buildMockPipelineV2, buildMockPipelines, - buildMockPipelineVersionV2, - buildMockPipelineVersionsV2, mockProjectK8sResource, mockRouteK8sResource, } from '~/__mocks__'; @@ -28,9 +26,6 @@ import { const projectName = 'test-project-name'; const initialMockPipeline = buildMockPipelineV2({ display_name: 'Test pipeline' }); -const initialMockPipelineVersion = buildMockPipelineVersionV2({ - pipeline_id: initialMockPipeline.pipeline_id, -}); const mockExperiments = [ buildMockExperimentKF({ display_name: 'Test experiment 1', @@ -270,39 +265,38 @@ const initIntercepts = () => { mockProjectK8sResource({ k8sName: projectName, displayName: projectName }), ]), ); - - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines`, + path: { namespace: projectName, serviceName: 'dspa' }, }, buildMockPipelines([initialMockPipeline]), ); - cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipeline_versions`, - }, - buildMockPipelineVersionsV2([initialMockPipelineVersion]), - ); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs`, + path: { namespace: projectName, serviceName: 'dspa' }, }, { runs: [] }, ); - cy.intercept( - { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/recurringruns`, - }, + + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns', { - recurringRuns: [], + path: { namespace: projectName, serviceName: 'dspa' }, }, + { recurringRuns: [] }, ); - cy.intercept( + + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments/:experimentId', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/experiments/${mockExperiments[0].experiment_id}`, + path: { + namespace: projectName, + serviceName: 'dspa', + experimentId: mockExperiments[0].experiment_id, + }, }, mockExperiments[0], ); diff --git a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/ManageRuns.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/ManageRuns.cy.ts index fc7cedf793..4e2bff3fa2 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/ManageRuns.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/ManageRuns.cy.ts @@ -22,7 +22,7 @@ const initialRunIds = ['test-run-1', 'test-run-2']; const mockRuns = Array(11) .fill(buildMockRunKF()) - .map((mockRun: Partial, index) => ({ + .map((mockRun: PipelineRunKFv2, index) => ({ ...mockRun, display_name: `Test run ${index + 1}`, run_id: `test-run-${index + 1}`, @@ -95,10 +95,10 @@ describe('Manage runs', () => { }); it('navigates to "Compare runs" page with updated run IDs when "Update" toolbar action is clicked', () => { - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs/test-run-3`, + path: { namespace: projectName, serviceName: 'dspa', runId: 'test-run-3' }, }, mockRuns[2], ); @@ -117,10 +117,10 @@ const initIntercepts = () => { configIntercept(); dspaIntercepts(projectName); projectsIntercept([{ k8sName: projectName, displayName: 'Test project' }]); - - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines`, + path: { namespace: projectName, serviceName: 'dspa' }, }, buildMockPipelines([buildMockPipelineV2({ pipeline_id: pipelineId })]), ); @@ -130,37 +130,32 @@ const initIntercepts = () => { pipeline_id: pipelineId, }); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines/${pipelineId}/versions`, + path: { namespace: projectName, serviceName: 'dspa', pipelineId }, }, buildMockPipelineVersionsV2([mockPipelineVersion]), ); - cy.intercept( - { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/experiments/${experimentId}`, - }, + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments/:experimentId', + { path: { namespace: projectName, serviceName: 'dspa', experimentId } }, buildMockExperimentKF({ experiment_id: experimentId }), ); initialRunIds.forEach((selectedRunId) => { - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs/${selectedRunId}`, + path: { namespace: projectName, serviceName: 'dspa', runId: selectedRunId }, }, - mockRuns.find((mockRun) => mockRun.run_id === selectedRunId), + mockRuns.find((mockRun) => mockRun.run_id === selectedRunId) as PipelineRunKFv2, ); }); - - cy.intercept( - { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs`, - }, + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs', + { path: { namespace: projectName, serviceName: 'dspa' } }, { runs: mockRuns, total_size: mockRuns.length, diff --git a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineCreateRuns.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineCreateRuns.cy.ts index 5810460402..a4e6850b52 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineCreateRuns.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineCreateRuns.cy.ts @@ -69,18 +69,6 @@ describe('Pipeline create runs', () => { }); describe('Runs', () => { - beforeEach(() => { - mockExperiments.forEach((experiment) => { - cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/experiments/${experiment.experiment_id}`, - }, - experiment, - ); - }); - }); - it('switches to scheduled runs from triggered', () => { // Mock experiments, pipelines & versions for form select dropdowns createRunPage.mockGetExperiments(projectName, mockExperiments); @@ -471,10 +459,14 @@ describe('Pipeline create runs', () => { describe('Schedules', () => { beforeEach(() => { mockExperiments.forEach((experiment) => { - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments/:experimentId', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/experiments/${experiment.experiment_id}`, + path: { + namespace: projectName, + serviceName: 'dspa', + experimentId: experiment.experiment_id, + }, }, experiment, ); @@ -725,19 +717,17 @@ const initIntercepts = () => { configIntercept(); dspaIntercepts(projectName); projectsIntercept([{ k8sName: projectName, displayName: 'Test project' }]); - - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/recurringruns`, + path: { namespace: projectName, serviceName: 'dspa' }, }, { recurringRuns: initialMockRecurringRuns, total_size: initialMockRecurringRuns.length }, ); - - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs`, + path: { namespace: projectName, serviceName: 'dspa' }, }, { runs: initialMockRuns, total_size: initialMockRuns.length }, ); diff --git a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineDeleteRuns.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineDeleteRuns.cy.ts index df21d654d2..d4b96250d4 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineDeleteRuns.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineDeleteRuns.cy.ts @@ -3,7 +3,6 @@ import { mockDataSciencePipelineApplicationK8sResource } from '~/__mocks__/mockD import { mockDscStatus } from '~/__mocks__/mockDscStatus'; import { mockK8sResourceList } from '~/__mocks__/mockK8sResourceList'; import { mockNotebookK8sResource } from '~/__mocks__/mockNotebookK8sResource'; -import { mockPipelineKFv2 } from '~/__mocks__/mockPipelineKF'; import { buildMockJobKF } from '~/__mocks__/mockJobKF'; import { mockProjectK8sResource } from '~/__mocks__/mockProjectK8sResource'; import { mockRouteK8sResource } from '~/__mocks__/mockRouteK8sResource'; @@ -23,7 +22,7 @@ import { RouteModel, SecretModel, } from '~/__tests__/cypress/cypress/utils/models'; -import { mock200Status } from '~/__mocks__/mockK8sStatus'; +import { mockSuccessGoogleRpcStatus } from '~/__mocks__/mockGoogleRpcStatusKF'; const initIntercepts = () => { cy.interceptOdh( @@ -32,17 +31,11 @@ const initIntercepts = () => { installedComponents: { 'data-science-pipelines-operator': true }, }), ); - cy.intercept( - { - method: 'POST', - pathname: '/api/service/pipelines/test-project/dspa/apis/v2beta1/pipelines/test-pipeline', - }, - mockPipelineKFv2({}), - ); - cy.intercept( + + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns', { - method: 'GET', - pathname: '/api/service/pipelines/test-project/dspa/apis/v2beta1/recurringruns', + path: { namespace: 'test-project', serviceName: 'dspa' }, }, { recurringRuns: [ @@ -51,10 +44,10 @@ const initIntercepts = () => { ], }, ); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs', { - method: 'GET', - pathname: '/api/service/pipelines/test-project/dspa/apis/v2beta1/runs', + path: { namespace: 'test-project', serviceName: 'dspa' }, }, { runs: [ @@ -63,13 +56,7 @@ const initIntercepts = () => { ], }, ); - cy.intercept( - { - method: 'POST', - pathname: '/api/service/pipelines/test-project/dspa/apis/v2beta1/pipelines', - }, - mockPipelineKFv2({}), - ); + cy.interceptK8s(RouteModel, mockRouteK8sResource({ notebookName: 'ds-pipeline-dspa' })); cy.interceptK8s(SecretModel, mockSecretK8sResource({ name: 'ds-pipeline-config' })); cy.interceptK8s(SecretModel, mockSecretK8sResource({ name: 'pipelines-db-password' })); @@ -101,20 +88,18 @@ describe('Pipeline runs', () => { schedulesDeleteModal.findSubmitButton().should('be.disabled'); schedulesDeleteModal.findInput().type('test-pipeline'); schedulesDeleteModal.findSubmitButton().should('be.enabled'); - - cy.intercept( + cy.interceptOdh( + 'DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns/:recurringRunId', { - method: 'DELETE', - pathname: - '/api/service/pipelines/test-project/dspa/apis/v2beta1/recurringruns/test-pipeline', + path: { namespace: 'test-project', serviceName: 'dspa', recurringRunId: 'test-pipeline' }, }, - mock200Status({}), + mockSuccessGoogleRpcStatus({}), ).as('deleteJobPipeline'); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns', { - method: 'GET', - pathname: '/api/service/pipelines/test-project/dspa/apis/v2beta1/recurringruns', + path: { namespace: 'test-project', serviceName: 'dspa' }, }, { recurringRuns: [ @@ -150,29 +135,30 @@ describe('Pipeline runs', () => { schedulesDeleteModal.findSubmitButton().should('be.disabled'); schedulesDeleteModal.findInput().type('Delete 2 schedules'); schedulesDeleteModal.findSubmitButton().should('be.enabled'); - - cy.intercept( + cy.interceptOdh( + 'DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns/:recurringRunId', { - method: 'DELETE', - pathname: - '/api/service/pipelines/test-project/dspa/apis/v2beta1/recurringruns/test-pipeline', + path: { namespace: 'test-project', serviceName: 'dspa', recurringRunId: 'test-pipeline' }, }, - mock200Status({}), + mockSuccessGoogleRpcStatus({}), ).as('deleteJobPipeline-1'); - cy.intercept( + cy.interceptOdh( + 'DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns/:recurringRunId', { - method: 'DELETE', - pathname: - '/api/service/pipelines/test-project/dspa/apis/v2beta1/recurringruns/other-pipeline', + path: { + namespace: 'test-project', + serviceName: 'dspa', + recurringRunId: 'other-pipeline', + }, }, - mock200Status({}), + mockSuccessGoogleRpcStatus({}), ).as('deleteJobPipeline-2'); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns', { - method: 'GET', - pathname: '/api/service/pipelines/test-project/dspa/apis/v2beta1/recurringruns', + path: { namespace: 'test-project', serviceName: 'dspa' }, }, { recurringRuns: [] }, ).as('getRuns'); @@ -202,18 +188,18 @@ describe('Pipeline runs', () => { runsDeleteModal.findInput().type('test-pipeline'); runsDeleteModal.findSubmitButton().should('be.enabled'); - cy.intercept( + cy.interceptOdh( + 'DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', { - method: 'DELETE', - pathname: '/api/service/pipelines/test-project/dspa/apis/v2beta1/runs/test-pipeline', + path: { namespace: 'test-project', serviceName: 'dspa', runId: 'test-pipeline' }, }, - mock200Status({}), + mockSuccessGoogleRpcStatus({}), ).as('deleteRunPipeline'); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs', { - method: 'GET', - pathname: '/api/service/pipelines/test-project/dspa/apis/v2beta1/runs', + path: { namespace: 'test-project', serviceName: 'dspa' }, }, { runs: [buildMockRunKF({ run_id: 'other-pipeline', display_name: 'other-pipeline' })] }, ).as('getRuns'); @@ -249,27 +235,25 @@ describe('Pipeline runs', () => { runsDeleteModal.findSubmitButton().should('be.disabled'); runsDeleteModal.findInput().type('Delete 2 runs'); runsDeleteModal.findSubmitButton().should('be.enabled'); - - cy.intercept( + cy.interceptOdh( + 'DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', { - method: 'DELETE', - pathname: '/api/service/pipelines/test-project/dspa/apis/v2beta1/runs/test-pipeline', + path: { namespace: 'test-project', serviceName: 'dspa', runId: 'test-pipeline' }, }, - mock200Status({}), + mockSuccessGoogleRpcStatus({}), ).as('deleteRunPipeline-1'); - cy.intercept( + cy.interceptOdh( + 'DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', { - method: 'DELETE', - pathname: '/api/service/pipelines/test-project/dspa/apis/v2beta1/runs/other-pipeline', + path: { namespace: 'test-project', serviceName: 'dspa', runId: 'other-pipeline' }, }, - mock200Status({}), + mockSuccessGoogleRpcStatus({}), ).as('deleteRunPipeline-2'); - - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs', { - method: 'GET', - pathname: '/api/service/pipelines/test-project/dspa/apis/v2beta1/runs', + path: { namespace: 'test-project', serviceName: 'dspa' }, }, { runs: [] }, ).as('getRuns'); diff --git a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineRuns.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineRuns.cy.ts index 94128cf585..4022815c81 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineRuns.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineRuns.cy.ts @@ -186,11 +186,10 @@ describe('Pipeline runs', () => { state: RuntimeStateKF.SUCCEEDED, }), ); - - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs`, + path: { namespace: projectName, serviceName: 'dspa' }, }, { runs: mockRuns.slice(0, 10), @@ -216,10 +215,10 @@ describe('Pipeline runs', () => { // test Next button pagination.findPreviousButton().should('be.disabled'); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs`, + path: { namespace: projectName, serviceName: 'dspa' }, }, { runs: mockRuns.slice(10, 15), @@ -242,10 +241,10 @@ describe('Pipeline runs', () => { // test Previous button pagination.findNextButton().should('be.disabled'); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs`, + path: { namespace: projectName, serviceName: 'dspa' }, }, { runs: mockRuns.slice(0, 10), @@ -257,10 +256,10 @@ describe('Pipeline runs', () => { activeRunsTable.findRows().should('have.length', 10); // 20 per page - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/runs`, + path: { namespace: projectName, serviceName: 'dspa' }, }, { runs: mockRuns.slice(0, 15), @@ -834,10 +833,10 @@ describe('Pipeline runs', () => { }), ); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/recurringruns`, + path: { namespace: projectName, serviceName: 'dspa' }, }, { recurringRuns: mockJobRuns.slice(0, 10), @@ -862,10 +861,10 @@ describe('Pipeline runs', () => { // test Next button pagination.findFirstButton().should('be.disabled'); pagination.findPreviousButton().should('be.disabled'); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/recurringruns`, + path: { namespace: projectName, serviceName: 'dspa' }, }, { recurringRuns: mockJobRuns.slice(10, 15), @@ -889,10 +888,10 @@ describe('Pipeline runs', () => { //test first button pagination.findLastButton().should('be.disabled'); pagination.findNextButton().should('be.disabled'); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/recurringruns`, + path: { namespace: projectName, serviceName: 'dspa' }, }, { recurringRuns: mockJobRuns.slice(0, 10), @@ -908,10 +907,10 @@ describe('Pipeline runs', () => { //test last button pagination.findFirstButton().should('be.disabled'); pagination.findPreviousButton().should('be.disabled'); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/recurringruns`, + path: { namespace: projectName, serviceName: 'dspa' }, }, { recurringRuns: mockJobRuns.slice(10, 15), @@ -935,10 +934,10 @@ describe('Pipeline runs', () => { // test Previous button pagination.findLastButton().should('be.disabled'); pagination.findNextButton().should('be.disabled'); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/recurringruns`, + path: { namespace: projectName, serviceName: 'dspa' }, }, { recurringRuns: mockJobRuns.slice(0, 10), @@ -951,16 +950,17 @@ describe('Pipeline runs', () => { pipelineRunJobTable.findRows().should('have.length', 10); // 20 per page - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/recurringruns`, + path: { namespace: projectName, serviceName: 'dspa' }, }, { recurringRuns: mockJobRuns.slice(0, 15), total_size: 15, }, ); + pagination.selectToggleOption('20 per page'); pipelineRunJobTable.getRowByName('another-pipeline-0').find().should('exist'); @@ -1062,19 +1062,17 @@ const initIntercepts = () => { ]), ); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines`, + path: { namespace: projectName, serviceName: 'dspa' }, }, buildMockPipelines([buildMockPipelineV2({ pipeline_id: pipelineId })]), ); - cy.intercept( - { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines/${pipelineId}/versions`, - }, + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions', + { path: { namespace: projectName, serviceName: 'dspa', pipelineId } }, buildMockPipelineVersionsV2(mockVersions), ); }; diff --git a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/Pipelines.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/Pipelines.cy.ts index 9d5a655be3..712e9c6247 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/Pipelines.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/Pipelines.cy.ts @@ -30,6 +30,7 @@ import { mockSecretK8sResource } from '~/__mocks__/mockSecretK8sResource'; import { PipelineKFv2 } from '~/concepts/pipelines/kfTypes'; import { be } from '~/__tests__/cypress/cypress/utils/should'; import { tablePagination } from '~/__tests__/cypress/cypress/pages/components/Pagination'; +import { mockSuccessGoogleRpcStatus } from '~/__mocks__/mockGoogleRpcStatusKF'; const projectName = 'test-project-name'; const initialMockPipeline = buildMockPipelineV2({ display_name: 'Test pipeline' }); @@ -774,13 +775,14 @@ describe('Pipelines', () => { .click(); pipelineDeleteModal.shouldBeOpen(); pipelineDeleteModal.findInput().type(initialMockPipeline.display_name); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines`, + path: { namespace: projectName, serviceName: 'dspa' }, }, buildMockPipelines([]), ).as('refreshPipelines'); + pipelineDeleteModal.findSubmitButton().click(); cy.wait('@deletePipeline'); @@ -808,13 +810,18 @@ describe('Pipelines', () => { .click(); pipelineDeleteModal.shouldBeOpen(); pipelineDeleteModal.findInput().type(initialMockPipelineVersion.display_name); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines/${initialMockPipeline.pipeline_id}/versions`, + path: { + namespace: projectName, + serviceName: 'dspa', + pipelineId: initialMockPipeline.pipeline_id, + }, }, buildMockPipelineVersionsV2([]), ).as('refreshVersions'); + pipelineDeleteModal.findSubmitButton().click(); cy.wait('@deleteVersion'); @@ -1020,13 +1027,14 @@ describe('Pipelines', () => { // test Next button pagination.findPreviousButton().should('be.disabled'); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines`, + path: { namespace: projectName, serviceName: 'dspa' }, }, buildMockPipelines(mockPipelinesv2.slice(10, 20), 25), ).as('refreshPipelines'); + pagination.findNextButton().click(); cy.wait('@refreshPipelines').then((interception) => { @@ -1041,10 +1049,10 @@ describe('Pipelines', () => { pipelinesTable.findRows().should('have.length', '10'); // test Previous button - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines`, + path: { namespace: projectName, serviceName: 'dspa' }, }, buildMockPipelines(mockPipelinesv2.slice(0, 10), 25), ).as('getFirstTenPipelines'); @@ -1061,10 +1069,10 @@ describe('Pipelines', () => { pipelinesTable.getRowByName('Test pipeline-0').find().should('exist'); // 20 per page - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines`, + path: { namespace: projectName, serviceName: 'dspa' }, }, buildMockPipelines(mockPipelinesv2.slice(0, 20), 22), ); @@ -1116,42 +1124,43 @@ const initIntercepts = ({ ]), ); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines`, + path: { namespace: projectName, serviceName: 'dspa' }, }, buildMockPipelines(mockPipelines, totalSize, nextPageToken), ).as('getPipelines'); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions', { - method: 'GET', - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines/${initialMockPipeline.pipeline_id}/versions`, + path: { + namespace: projectName, + serviceName: 'dspa', + pipelineId: initialMockPipeline.pipeline_id, + }, }, buildMockPipelineVersionsV2([initialMockPipelineVersion]), ); }; const createDeleteVersionIntercept = (pipelineId: string, pipelineVersionId: string) => - cy.intercept( + cy.interceptOdh( + 'DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions/:pipelineVersionId', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines/${pipelineId}/versions/${pipelineVersionId}`, - method: 'DELETE', + path: { namespace: projectName, serviceName: 'dspa', pipelineId, pipelineVersionId }, times: 1, }, - { - body: {}, - }, + mockSuccessGoogleRpcStatus({}), ); const createDeletePipelineIntercept = (pipelineId: string) => - cy.intercept( + cy.interceptOdh( + 'DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId', { - pathname: `/api/service/pipelines/${projectName}/dspa/apis/v2beta1/pipelines/${pipelineId}`, - method: 'DELETE', + path: { namespace: projectName, serviceName: 'dspa', pipelineId }, times: 1, }, - { - body: {}, - }, + mockSuccessGoogleRpcStatus({}), ); diff --git a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelinesList.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelinesList.cy.ts index fb3b0984b0..3bd182b849 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelinesList.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelinesList.cy.ts @@ -81,13 +81,14 @@ describe('PipelinesList', () => { DataSciencePipelineApplicationModel, mockDataSciencePipelineApplicationK8sResource({}), ); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines', { - method: 'GET', - pathname: '/api/service/pipelines/test-project/dspa/apis/v2beta1/pipelines', + path: { namespace: 'test-project', serviceName: 'dspa' }, }, buildMockPipelines([]), ).as('pipelines'); + projectDetails.visitSection('test-project', 'pipelines-projects'); pipelinesSection.findImportPipelineSplitButton().should('be.enabled').click(); @@ -130,17 +131,21 @@ describe('PipelinesList', () => { DataSciencePipelineApplicationModel, mockDataSciencePipelineApplicationK8sResource({}), ); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines', { - pathname: '/api/service/pipelines/test-project/dspa/apis/v2beta1/pipelines', + path: { namespace: 'test-project', serviceName: 'dspa' }, }, buildMockPipelines([initialMockPipeline]), ); - - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions', { - method: 'GET', - pathname: `/api/service/pipelines/test-project/dspa/apis/v2beta1/pipelines/${initialMockPipeline.pipeline_id}/versions`, + path: { + namespace: 'test-project', + serviceName: 'dspa', + pipelineId: initialMockPipeline.pipeline_id, + }, }, buildMockPipelineVersionsV2([initialMockPipelineVersion]), ); diff --git a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelinesTopology.cy.ts b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelinesTopology.cy.ts index 2089994c58..f0240a21d4 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelinesTopology.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelinesTopology.cy.ts @@ -28,7 +28,6 @@ import { RouteModel, SecretModel, } from '~/__tests__/cypress/cypress/utils/models'; -import { mock200Status } from '~/__mocks__/mockK8sStatus'; import { deleteModal } from '~/__tests__/cypress/cypress/pages/components/DeleteModal'; const projectId = 'test-project'; @@ -106,67 +105,41 @@ const initIntercepts = () => { namespace: projectId, }), ); - cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${projectId}/dspa/apis/v2beta1/pipelines`, - }, - { pipelines: [mockPipeline] }, - ); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId', { - method: 'GET', - pathname: `/api/service/pipelines/${projectId}/dspa/apis/v2beta1/pipelines/${mockPipeline.pipeline_id}`, + path: { namespace: projectId, serviceName: 'dspa', pipelineId: mockPipeline.pipeline_id }, }, mockPipeline, ); - cy.intercept( - { - method: 'GET', - pathname: `/api/service/pipelines/${projectId}/dspa/apis/v2beta1/pipelines/${mockPipeline.pipeline_id}/versions`, - }, + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions', + { path: { namespace: projectId, serviceName: 'dspa', pipelineId: mockPipeline.pipeline_id } }, buildMockPipelineVersionsV2([mockVersion, mockVersion2]), ); - - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns/:recurringRunId', { - method: 'GET', - pathname: `/api/service/pipelines/${projectId}/dspa/apis/v2beta1/recurringruns/${mockJob.recurring_run_id}`, + path: { namespace: projectId, serviceName: 'dspa', recurringRunId: mockJob.recurring_run_id }, }, mockJob, ); - cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${projectId}/dspa/apis/v2beta1/recurringruns`, - }, - { recurringRuns: [mockJob] }, - ); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', { - method: 'GET', - pathname: `/api/service/pipelines/${projectId}/dspa/apis/v2beta1/runs/${mockRun.run_id}`, + path: { namespace: projectId, serviceName: 'dspa', runId: mockRun.run_id }, }, mockRun, ); - cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${projectId}/dspa/apis/v2beta1/runs`, - }, - { runs: [mockRun] }, - ); - cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${projectId}/dspa/apis/v2beta1/pipelines/${mockPipeline.pipeline_id}/versions`, - }, - [mockVersion], - ); - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions/:pipelineVersionId', { - method: 'GET', - pathname: `/api/service/pipelines/${projectId}/dspa/apis/v2beta1/pipelines/${mockPipeline.pipeline_id}/versions/${mockVersion.pipeline_version_id}`, + path: { + namespace: projectId, + serviceName: 'dspa', + pipelineId: mockPipeline.pipeline_id, + pipelineVersionId: mockVersion.pipeline_version_id, + }, }, mockVersion, ); @@ -247,12 +220,17 @@ describe('Pipeline topology', () => { pipelineDetails.selectActionDropdownItem('Delete pipeline version'); deleteModal.shouldBeOpen(); deleteModal.findInput().type(mockVersion.display_name); - cy.intercept( + cy.interceptOdh( + 'DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions/:pipelineVersionId', { - method: 'DELETE', - pathname: `/api/service/pipelines/${projectId}/dspa/apis/v2beta1/pipelines/${mockPipeline.pipeline_id}/versions/${mockVersion.pipeline_version_id}`, + path: { + namespace: projectId, + serviceName: 'dspa', + pipelineId: mockPipeline.pipeline_id, + pipelineVersionId: mockVersion.pipeline_version_id, + }, }, - mock200Status({}), + {}, ).as('deletePipelineVersion'); deleteModal.findSubmitButton().click(); @@ -260,10 +238,15 @@ describe('Pipeline topology', () => { }); it('page details are updated when a new pipeline version is selected', () => { - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions/:pipelineVersionId', { - method: 'GET', - pathname: `/api/service/pipelines/${projectId}/dspa/apis/v2beta1/pipelines/${mockPipeline.pipeline_id}/versions/${mockVersion2.pipeline_version_id}`, + path: { + namespace: projectId, + serviceName: 'dspa', + pipelineId: mockPipeline.pipeline_id, + pipelineVersionId: mockVersion2.pipeline_version_id, + }, }, mockVersion2, ); @@ -275,10 +258,15 @@ describe('Pipeline topology', () => { }); it('page details are updated after uploading a new version', () => { - cy.intercept( + cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions/:pipelineVersionId', { - method: 'GET', - pathname: `/api/service/pipelines/${projectId}/dspa/apis/v2beta1/pipelines/${mockPipeline.pipeline_id}/versions/${mockVersion2.pipeline_version_id}`, + path: { + namespace: projectId, + serviceName: 'dspa', + pipelineId: mockPipeline.pipeline_id, + pipelineVersionId: mockVersion2.pipeline_version_id, + }, }, mockVersion2, ); @@ -286,10 +274,10 @@ describe('Pipeline topology', () => { pipelineDetails.selectActionDropdownItem('Upload new version'); pipelineVersionImportModal.findImportPipelineRadio().check(); pipelineVersionImportModal.findPipelineUrlInput().type('https://example.com/pipeline.yaml'); - cy.intercept( + cy.interceptOdh( + 'POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions', { - method: 'POST', - pathname: `/api/service/pipelines/${projectId}/dspa/apis/v2beta1/pipelines/${mockPipeline.pipeline_id}/versions`, + path: { namespace: projectId, serviceName: 'dspa', pipelineId: mockPipeline.pipeline_id }, }, mockVersion2, ).as('uploadNewPipelineVersion'); @@ -342,9 +330,15 @@ describe('Pipeline topology', () => { deleteModal.findInput().type(mockPipeline.display_name); cy.interceptOdh( - 'DELETE /api/service/pipelines/:projectId/dspa/apis/v2beta1/recurringruns/:pipeline_id', - { path: { projectId, pipeline_id: mockPipeline.pipeline_id } }, - mock200Status({}), + 'DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns/:recurringRunId', + { + path: { + namespace: projectId, + serviceName: 'dspa', + recurringRunId: mockPipeline.pipeline_id, + }, + }, + {}, ).as('deletepipelineRunJob'); deleteModal.findSubmitButton().click(); diff --git a/frontend/src/__tests__/cypress/cypress/pages/pipelines/cloneRunPage.ts b/frontend/src/__tests__/cypress/cypress/pages/pipelines/cloneRunPage.ts index 66a2f95ce4..dbc0d82e5d 100644 --- a/frontend/src/__tests__/cypress/cypress/pages/pipelines/cloneRunPage.ts +++ b/frontend/src/__tests__/cypress/cypress/pages/pipelines/cloneRunPage.ts @@ -15,21 +15,19 @@ class CloneRunPage extends CreateRunPage { } mockGetRun(namespace: string, run: PipelineRunKFv2) { - return cy.intercept( + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', { - method: 'GET', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/runs/${run.run_id}`, + path: { namespace, serviceName: 'dspa', runId: run.run_id }, }, run, ); } mockGetRecurringRun(namespace: string, recurringRun: PipelineRunJobKFv2) { - return cy.intercept( - { - method: 'GET', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/recurringruns/${recurringRun.recurring_run_id}`, - }, + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns/:recurringRunId', + { path: { namespace, serviceName: 'dspa', recurringRunId: recurringRun.recurring_run_id } }, recurringRun, ); } @@ -38,31 +36,32 @@ class CloneRunPage extends CreateRunPage { namespace: string, pipelineVersion: PipelineVersionKFv2, ): Cypress.Chainable { - return cy.intercept( + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions/:pipelineVersionId', { - method: 'GET', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/pipelines/${pipelineVersion.pipeline_id}/versions/${pipelineVersion.pipeline_version_id}`, + path: { + namespace, + serviceName: 'dspa', + pipelineId: pipelineVersion.pipeline_id, + pipelineVersionId: pipelineVersion.pipeline_version_id, + }, }, pipelineVersion, ); } mockGetPipeline(namespace: string, pipeline: PipelineKFv2): Cypress.Chainable { - return cy.intercept( - { - method: 'GET', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/pipelines/${pipeline.pipeline_id}`, - }, + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId', + { path: { namespace, serviceName: 'dspa', pipelineId: pipeline.pipeline_id } }, pipeline, ); } mockGetExperiment(namespace: string, experiment: ExperimentKFv2): Cypress.Chainable { - return cy.intercept( - { - method: 'GET', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/experiments/${experiment.experiment_id}`, - }, + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments/:experimentId', + { path: { namespace, serviceName: 'dspa', experimentId: experiment.experiment_id } }, experiment, ); } diff --git a/frontend/src/__tests__/cypress/cypress/pages/pipelines/createRunPage.ts b/frontend/src/__tests__/cypress/cypress/pages/pipelines/createRunPage.ts index 93fe5ff409..5ff7f6680b 100644 --- a/frontend/src/__tests__/cypress/cypress/pages/pipelines/createRunPage.ts +++ b/frontend/src/__tests__/cypress/cypress/pages/pipelines/createRunPage.ts @@ -159,16 +159,20 @@ export class CreateRunPage { } mockGetExperiments(namespace: string, experiments?: ExperimentKFv2[]): Cypress.Chainable { - return cy.intercept( - { pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/experiments` }, + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments', + { + path: { namespace, serviceName: 'dspa' }, + }, buildMockExperiments(experiments), ); } mockGetPipelines(namespace: string, pipelines: PipelineKFv2[]): Cypress.Chainable { - return cy.intercept( + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines', { - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/pipelines`, + path: { namespace, serviceName: 'dspa' }, }, buildMockPipelines(pipelines), ); @@ -179,11 +183,9 @@ export class CreateRunPage { versions: PipelineVersionKFv2[], pipelineId: string, ): Cypress.Chainable { - return cy.intercept( - { - method: 'GET', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/pipelines/${pipelineId}/versions`, - }, + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions', + { path: { namespace, serviceName: 'dspa', pipelineId } }, buildMockPipelineVersionsV2(versions), ); } @@ -193,10 +195,10 @@ export class CreateRunPage { pipelineVersion: PipelineVersionKFv2, { run_id, ...run }: Partial, ): Cypress.Chainable { - return cy.intercept( + return cy.interceptOdh( + 'POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs', { - method: 'POST', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/runs`, + path: { namespace, serviceName: 'dspa' }, times: 1, }, (req) => { @@ -222,12 +224,9 @@ export class CreateRunPage { pipelineVersion: PipelineVersionKFv2, { recurring_run_id, ...recurringRun }: Partial, ): Cypress.Chainable { - return cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/recurringruns`, - times: 1, - }, + return cy.interceptOdh( + 'POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns', + { path: { namespace, serviceName: 'dspa' }, times: 1 }, (req) => { const data = { display_name: recurringRun.display_name, diff --git a/frontend/src/__tests__/cypress/cypress/pages/pipelines/experiments.ts b/frontend/src/__tests__/cypress/cypress/pages/pipelines/experiments.ts index ac6be2ab3f..4dec2da85a 100644 --- a/frontend/src/__tests__/cypress/cypress/pages/pipelines/experiments.ts +++ b/frontend/src/__tests__/cypress/cypress/pages/pipelines/experiments.ts @@ -35,10 +35,10 @@ class ExperimentsTabs { activeExperiments: ExperimentKFv2[], archivedExperiments: ExperimentKFv2[] = [], ) { - return cy.intercept( + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments', { - method: 'GET', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/experiments`, + path: { namespace, serviceName: 'dspa' }, }, (req) => { const { predicates } = JSON.parse(req.query.filter.toString()); @@ -72,11 +72,9 @@ class ExperimentsTable { } mockArchiveExperiment(experimentId: string, namespace: string) { - return cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/experiments/${experimentId}:archive`, - }, + return cy.interceptOdh( + 'POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments/:experimentId', + { path: { namespace, serviceName: 'dspa', experimentId: `${experimentId}:archive` } }, (req) => { req.reply({ body: {} }); }, @@ -84,11 +82,9 @@ class ExperimentsTable { } mockRestoreExperiment(experimentId: string, namespace: string) { - return cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/experiments/${experimentId}:unarchive`, - }, + return cy.interceptOdh( + 'POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments/:experimentId', + { path: { namespace, serviceName: 'dspa', experimentId: `${experimentId}:unarchive` } }, (req) => { req.reply({ body: {} }); }, diff --git a/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineFilterBar.ts b/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineFilterBar.ts index 95dcce235c..5cdbc82e4c 100644 --- a/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineFilterBar.ts +++ b/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineFilterBar.ts @@ -70,10 +70,10 @@ class PipelineRunFilterBar extends PipelineFilterBar { } mockExperiments(experiments: ExperimentKFv2[], namespace: string) { - return cy.intercept( + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments', { - method: 'GET', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/experiments`, + path: { namespace, serviceName: 'dspa' }, }, { experiments, diff --git a/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineImportModal.ts b/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineImportModal.ts index 4f7bdacebe..d9a30e87d7 100644 --- a/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineImportModal.ts +++ b/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineImportModal.ts @@ -52,10 +52,10 @@ class PipelineImportModal extends Modal { } mockCreatePipelineAndVersion(params: CreatePipelineAndVersionKFData, namespace: string) { - return cy.intercept( + return cy.interceptOdh( + 'POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/create', { - method: 'POST', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/pipelines/create`, + path: { namespace, serviceName: 'dspa' }, times: 1, }, buildMockPipelineV2(params.pipeline), @@ -63,12 +63,9 @@ class PipelineImportModal extends Modal { } mockUploadPipeline(params: Partial, namespace: string) { - return cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/pipelines/upload`, - times: 1, - }, + return cy.interceptOdh( + 'POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/upload', + { path: { namespace, serviceName: 'dspa' }, times: 1 }, buildMockPipelineV2(params), ); } diff --git a/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineRunTable.ts b/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineRunTable.ts index 46af7584be..662c31ea89 100644 --- a/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineRunTable.ts +++ b/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineRunTable.ts @@ -66,11 +66,9 @@ class PipelineRunsTable { } mockRestoreRun(runId: string, namespace: string) { - return cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/runs/${runId}:unarchive`, - }, + return cy.interceptOdh( + 'POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', + { path: { namespace, serviceName: 'dspa', runId: `${runId}:unarchive` } }, (req) => { req.reply({ body: {} }); }, @@ -78,11 +76,9 @@ class PipelineRunsTable { } mockArchiveRun(runId: string, namespace: string) { - return cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/runs/${runId}:archive`, - }, + return cy.interceptOdh( + 'POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId', + { path: { namespace, serviceName: 'dspa', runId: `${runId}:archive` } }, (req) => { req.reply({ body: {} }); }, @@ -95,10 +91,10 @@ class PipelineRunsTable { namespace: string, times?: number, ) { - return cy.intercept( + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs', { - method: 'GET', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/runs`, + path: { namespace, serviceName: 'dspa' }, ...(times && { times }), }, (req) => { @@ -160,40 +156,40 @@ class PipelineRunJobTable extends PipelineRunsTable { } mockGetJobs(jobs: PipelineRunJobKFv2[], namespace: string) { - return cy.intercept( - { - method: 'GET', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/recurringruns`, - }, + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns', + { path: { namespace, serviceName: 'dspa' } }, { recurringRuns: jobs, total_size: jobs.length }, ); } mockGetJob(job: PipelineRunJobKFv2, namespace: string) { - return cy.intercept( - { - method: 'GET', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/recurringruns/${job.recurring_run_id}`, - }, + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns/:recurringRunId', + { path: { namespace, serviceName: 'dspa', recurringRunId: job.recurring_run_id } }, job, ); } mockEnableJob(job: PipelineRunJobKFv2, namespace: string) { - return cy.intercept( + return cy.interceptOdh( + 'POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns/:recurringRunId', { - method: 'POST', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/recurringruns/${job.recurring_run_id}:enable`, + path: { + namespace, + serviceName: 'dspa', + recurringRunId: `${job.recurring_run_id}:'enable'`, + }, }, {}, ); } mockDisableJob(job: PipelineRunJobKFv2, namespace: string) { - return cy.intercept( + return cy.interceptOdh( + 'POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns/:recurringRunId', { - method: 'POST', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/recurringruns/${job.recurring_run_id}:disable`, + path: { namespace, serviceName: 'dspa', recurringRunId: `${job.recurring_run_id}:disable` }, }, {}, ); diff --git a/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineVersionImportModal.ts b/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineVersionImportModal.ts index bd905e4852..042c67494e 100644 --- a/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineVersionImportModal.ts +++ b/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelineVersionImportModal.ts @@ -74,23 +74,17 @@ class PipelineImportModal extends Modal { } mockCreatePipelineVersion(params: CreatePipelineVersionKFData, namespace: string) { - return cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/pipelines/${params.pipeline_id}/versions`, - times: 1, - }, + return cy.interceptOdh( + 'POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions', + { path: { namespace, serviceName: 'dspa', pipelineId: params.pipeline_id }, times: 1 }, buildMockPipelineVersionV2(params), ); } mockUploadVersion(params: Partial, namespace: string) { - return cy.intercept( - { - method: 'POST', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/pipelines/upload_version`, - times: 1, - }, + return cy.interceptOdh( + 'POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/upload_version', + { path: { namespace, serviceName: 'dspa' }, times: 1 }, buildMockPipelineVersionV2(params), ); } diff --git a/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelinesTable.ts b/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelinesTable.ts index 45a2ab7078..c91f0522e0 100644 --- a/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelinesTable.ts +++ b/frontend/src/__tests__/cypress/cypress/pages/pipelines/pipelinesTable.ts @@ -69,41 +69,42 @@ class PipelinesTable { } mockDeletePipeline(pipeline: PipelineKFv2, namespace: string) { - return cy.intercept( - { - method: 'DELETE', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/pipelines/${pipeline.pipeline_id}`, - }, + return cy.interceptOdh( + 'DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId', + { path: { namespace, serviceName: 'dspa', pipelineId: pipeline.pipeline_id } }, {}, ); } mockDeletePipelineVersion(version: PipelineVersionKFv2, namespace: string) { - return cy.intercept( + return cy.interceptOdh( + 'DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions/:pipelineVersionId', { - method: 'DELETE', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/pipelines/${version.pipeline_id}/versions/${version.pipeline_version_id}`, + path: { + namespace, + serviceName: 'dspa', + pipelineId: version.pipeline_id, + pipelineVersionId: version.pipeline_version_id, + }, }, {}, ); } mockGetPipelines(pipelines: PipelineKFv2[], namespace: string) { - return cy.intercept( + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines', { - method: 'GET', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/pipelines`, + path: { namespace, serviceName: 'dspa' }, }, buildMockPipelines(pipelines), ); } mockGetPipelineVersions(versions: PipelineVersionKFv2[], pipelineId: string, namespace: string) { - return cy.intercept( - { - method: 'GET', - pathname: `/api/service/pipelines/${namespace}/dspa/apis/v2beta1/pipelines/${pipelineId}/versions`, - }, + return cy.interceptOdh( + 'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions', + { path: { namespace, serviceName: 'dspa', pipelineId } }, buildMockPipelineVersionsV2(versions), ); } diff --git a/frontend/src/__tests__/cypress/cypress/support/commands/odh.ts b/frontend/src/__tests__/cypress/cypress/support/commands/odh.ts index 6d02d1558b..478386288e 100644 --- a/frontend/src/__tests__/cypress/cypress/support/commands/odh.ts +++ b/frontend/src/__tests__/cypress/cypress/support/commands/odh.ts @@ -1,4 +1,4 @@ -import { K8sResourceListResult, K8sStatus } from '@openshift/dynamic-plugin-sdk-utils'; +import { K8sResourceListResult } from '@openshift/dynamic-plugin-sdk-utils'; import type { GenericStaticResponse, RouteHandlerController } from 'cypress/types/net-stubbing'; import { BaseMetricCreationResponse, BaseMetricListResponse } from '~/api'; import { @@ -32,6 +32,19 @@ import type { PrometheusQueryRangeResponse, PrometheusQueryResponse, } from '~/types'; +import { + ExperimentKFv2, + GoogleRpcStatusKF, + ListExperimentsResponseKF, + ListPipelineRunJobsResourceKF, + ListPipelineRunsResourceKF, + ListPipelineVersionsKF, + ListPipelinesResponseKF, + PipelineKFv2, + PipelineRunJobKFv2, + PipelineRunKFv2, + PipelineVersionKFv2, +} from '~/concepts/pipelines/kfTypes'; type SuccessErrorResponse = { success: boolean; @@ -46,7 +59,7 @@ type OdhResponse = type Replacement = Record; type Query = Record; -type Options = { path?: Replacement; query?: Query } | null; +type Options = { path?: Replacement; query?: Query; times?: number } | null; /* eslint-disable @typescript-eslint/no-namespace */ declare global { @@ -318,35 +331,194 @@ declare global { ): Cypress.Chainable; interceptOdh( - type: `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/v1alpha3/registered_models`, - response: OdhResponse, + type: `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/registered_models`, + options: { path: { serviceName: string; apiVersion: string } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/registered_models/:registeredModelId`, + options: { path: { serviceName: string; apiVersion: string; registeredModelId: number } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/model_versions/:modelVersionId`, + options: { + path: { serviceName: string; apiVersion: string; modelVersionId: number }; + }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/model_versions/:modelVersionId/artifacts`, + options: { path: { serviceName: string; apiVersion: string; modelVersionId: 1 } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions/:pipelineVersionId`, + options: { + path: { + namespace: string; + serviceName: string; + pipelineId: string; + pipelineVersionId: string; + }; + }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions/:pipelineVersionId`, + options: { + path: { + namespace: string; + serviceName: string; + pipelineId: string; + pipelineVersionId: string; + }; + times?: number; + }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId`, + options: { path: { namespace: string; serviceName: string; pipelineId: string } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId`, + options: { + path: { namespace: string; serviceName: string; pipelineId: string }; + times?: number; + }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/upload_version`, + options: { path: { namespace: string; serviceName: string }; times?: number }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions`, + options: { + path: { namespace: string; serviceName: string; pipelineId: string }; + times?: number; + }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions`, + options: { path: { namespace: string; serviceName: string; pipelineId: string } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines`, + options: { path: { namespace: string; serviceName: string } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns/:recurringRunId`, + options: { path: { namespace: string; serviceName: string; recurringRunId: string } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns/:recurringRunId`, + options: { path: { namespace: string; serviceName: string; recurringRunId: string } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns/:recurringRunId`, + options: { path: { namespace: string; serviceName: string; recurringRunId: string } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/create`, + options: { path: { namespace: string; serviceName: string }; times?: number }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/upload`, + options: { path: { namespace: string; serviceName: string }; times?: number }, + response: OdhResponse, ): Cypress.Chainable; interceptOdh( - type: `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/v1alpha3/registered_models/1`, - response: OdhResponse, + type: `GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs`, + options: { path: { namespace: string; serviceName: string } }, + response: OdhResponse, ): Cypress.Chainable; interceptOdh( - type: `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/v1alpha3/model_versions/:id`, - options: { path: { id: string } }, - response: OdhResponse, + type: `POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs`, + options: { path: { namespace: string; serviceName: string }; times?: number }, + response: OdhResponse, ): Cypress.Chainable; interceptOdh( - type: `GET /api/service/modelregistry/modelregistry-sample/api/model_registry/v1alpha3/model_versions/1/artifacts`, - response: OdhResponse, + type: `DELETE /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId`, + options: { path: { namespace: string; serviceName: string; runId: string } }, + response: OdhResponse, ): Cypress.Chainable; interceptOdh( - type: 'GET /api/service/modelregistry/modelregistry-sample/api/model_registry/v1alpha3/registered_models/1/versions', - response: OdhResponse, + type: `GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId`, + options: { path: { namespace: string; serviceName: string; runId: string } }, + response: OdhResponse, ): Cypress.Chainable; interceptOdh( - type: 'DELETE /api/service/pipelines/:projectId/dspa/apis/v2beta1/recurringruns/:pipeline_id', - options: { path: { projectId: string; pipeline_id: string } }, - response: OdhResponse, + type: `POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/runs/:runId`, + options: { path: { namespace: string; serviceName: string; runId: string } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments`, + options: { path: { namespace: string; serviceName: string } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments/:experimentId`, + options: { path: { namespace: string; serviceName: string; experimentId: string } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments/:experimentId`, + options: { path: { namespace: string; serviceName: string; experimentId: string } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `POST /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns`, + options: { path: { namespace: string; serviceName: string }; times?: number }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: `GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/recurringruns`, + options: { path: { namespace: string; serviceName: string } }, + response: OdhResponse, + ): Cypress.Chainable; + + interceptOdh( + type: 'GET /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/registered_models/:registeredModelId/versions', + options: { path: { serviceName: string; apiVersion: string; registeredModelId: number } }, + response: OdhResponse, ): Cypress.Chainable; interceptOdh( @@ -361,11 +533,6 @@ declare global { }, response: OdhResponse<{ notebook: NotebookKind; isRunning: boolean }>, ): Cypress.Chainable; - - interceptOdh( - type: 'GET /api/service/modelregistry/modelregistry-sample/api/model_registry/v1alpha3/registered_models/1', - response: OdhResponse, - ): Cypress.Chainable; } } } @@ -397,6 +564,9 @@ Cypress.Commands.add( pathname = pathname.replace(new RegExp(`:${part}\\b`), replacement); }); } - return cy.intercept({ method, pathname, query: options?.query }, response); + return cy.intercept( + { method, pathname, query: options?.query, ...(options?.times && { times: options.times }) }, + response, + ); }, );