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 b2ef84955f..b0d2f4a320 100644 --- a/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineCreateRuns.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/e2e/pipelines/PipelineCreateRuns.cy.ts @@ -26,6 +26,10 @@ import { configIntercept, dspaIntercepts, projectsIntercept } from './intercepts const projectName = 'test-project-name'; const mockPipeline = buildMockPipelineV2(); +const mockNoVersionPipeline = buildMockPipelineV2({ + pipeline_id: 'no-version-pipeline', + display_name: 'No version pipeline', +}); const mockPipelineVersion = buildMockPipelineVersionV2({ pipeline_id: mockPipeline.pipeline_id }); const pipelineVersionRef = { pipeline_id: mockPipeline.pipeline_id, @@ -173,8 +177,9 @@ describe('Pipeline create runs', () => { // Mock experiments, pipelines & versions for form select dropdowns cloneRunPage.mockGetExperiments(mockExperiments); - cloneRunPage.mockGetPipelines([mockPipeline]); + cloneRunPage.mockGetPipelines([mockPipeline, mockNoVersionPipeline]); cloneRunPage.mockGetPipelineVersions([mockPipelineVersion], mockPipelineVersion.pipeline_id); + cloneRunPage.mockGetPipelineVersions([], mockNoVersionPipeline.pipeline_id); cloneRunPage.mockGetRun(mockRun); cloneRunPage.mockGetPipelineVersion(mockPipelineVersion); cloneRunPage.mockGetPipeline(mockPipeline); @@ -199,6 +204,13 @@ describe('Pipeline create runs', () => { paramsSection.findParamById('neighbors').find('input').should('have.value', '1'); paramsSection.findParamById('standard_scaler').should('have.value', 'false'); + // Verify switch to a no-version pipeline will show the correct result + cloneRunPage.findPipelineSelect().click(); + cloneRunPage.selectPipelineByName(mockNoVersionPipeline.display_name); + cloneRunPage.findPipelineVersionSelect().should('be.disabled'); + + cloneRunPage.findPipelineSelect().click(); + cloneRunPage.selectPipelineByName(mockPipeline.display_name); cloneRunPage.mockCreateRun(mockPipelineVersion, mockDuplicateRun).as('duplicateRun'); cloneRunPage.submit(); diff --git a/frontend/src/concepts/pipelines/content/createRun/useRunFormData.ts b/frontend/src/concepts/pipelines/content/createRun/useRunFormData.ts index c2d9ff6179..5e55adc90b 100644 --- a/frontend/src/concepts/pipelines/content/createRun/useRunFormData.ts +++ b/frontend/src/concepts/pipelines/content/createRun/useRunFormData.ts @@ -116,7 +116,7 @@ const useUpdatePipelineFormData = ( setFormValue('pipeline', pipeline); } - if (!formData.version && version) { + if (!formData.version && version && formData.pipeline?.pipeline_id === pipeline?.pipeline_id) { setFormValue('version', version); } }, [formData.pipeline, formData.version, pipeline, setFormValue, version]); diff --git a/frontend/src/concepts/pipelines/content/createRun/utils.ts b/frontend/src/concepts/pipelines/content/createRun/utils.ts index b28150ad2a..bd2804da16 100644 --- a/frontend/src/concepts/pipelines/content/createRun/utils.ts +++ b/frontend/src/concepts/pipelines/content/createRun/utils.ts @@ -43,7 +43,7 @@ const runTypeSafeDates = (runType: RunFormData['runType']): boolean => export const isFilledRunFormData = (formData: RunFormData): formData is SafeRunFormData => { const inputDefinitionParams = getInputDefinitionParams(formData.version); const hasRequiredInputParams = Object.entries(formData.params || {}).every( - ([paramKey, paramValue]) => inputDefinitionParams?.[paramKey].isOptional || paramValue !== '', + ([paramKey, paramValue]) => inputDefinitionParams?.[paramKey]?.isOptional || paramValue !== '', ); return (