Skip to content

Commit

Permalink
Set experiment as Default on create run/schedule page
Browse files Browse the repository at this point in the history
  • Loading branch information
DaoDaoNoCode committed Jul 11, 2024
1 parent 8a4261f commit 5bad39f
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import type {
PipelineRunKFv2,
PipelineVersionKFv2,
} from '~/concepts/pipelines/kfTypes';
import { buildMockExperiments, buildMockRunKF } from '~/__mocks__';
import { buildMockRunKF } from '~/__mocks__';
import { buildMockPipelines } from '~/__mocks__/mockPipelinesProxy';
import { buildMockPipelineVersionsV2 } from '~/__mocks__/mockPipelineVersionsProxy';
import { Contextual } from '~/__tests__/cypress/cypress/pages/components/Contextual';
Expand Down Expand Up @@ -159,13 +159,30 @@ export class CreateRunPage {
cy.findByTestId('pipeline-selector-table-list').find('td').contains(name).click();
}

mockGetExperiments(namespace: string, experiments?: ExperimentKFv2[]): Cypress.Chainable<null> {
mockGetExperiments(
namespace: string,
activeExperiments: ExperimentKFv2[],
archivedExperiments: ExperimentKFv2[] = [],
): Cypress.Chainable<null> {
return cy.interceptOdh(
'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments',
{
path: { namespace, serviceName: 'dspa' },
},
buildMockExperiments(experiments),
(req) => {
const { predicates } = JSON.parse(req.query.filter.toString());

if (predicates.length === 0) {
req.reply({ experiments: activeExperiments, total_size: activeExperiments.length });
} else {
const [{ string_value: experimentState }] = predicates;
if (experimentState === 'ARCHIVED') {
req.reply({ experiments: archivedExperiments, total_size: archivedExperiments.length });
} else {
req.reply({ experiments: activeExperiments, total_size: activeExperiments.length });
}
}
},
);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* eslint-disable camelcase */
import type { PipelineRecurringRunKFv2, PipelineRunKFv2 } from '~/concepts/pipelines/kfTypes';
import { InputDefinitionParameterType } from '~/concepts/pipelines/kfTypes';
import { InputDefinitionParameterType, StorageStateKF } from '~/concepts/pipelines/kfTypes';
import {
buildMockRunKF,
buildMockPipelineV2,
Expand Down Expand Up @@ -35,7 +35,12 @@ const mockExperiments = [
}),
buildMockExperimentKF({
display_name: 'Test experiment 2',
experiment_id: 'experiment-1',
experiment_id: 'experiment-2',
}),
buildMockExperimentKF({
display_name: 'Default',
experiment_id: 'default',
storage_state: StorageStateKF.ARCHIVED,
}),
];
const initialMockRuns = [
Expand Down Expand Up @@ -115,7 +120,11 @@ describe('Pipeline create runs', () => {
};

// Mock experiments, pipelines & versions for form select dropdowns
createRunPage.mockGetExperiments(projectName, mockExperiments);
createRunPage.mockGetExperiments(
projectName,
[mockExperiments[0], mockExperiments[1]],
[mockExperiments[2]],
);
createRunPage.mockGetPipelines(projectName, [mockPipeline]);
createRunPage.mockGetPipelineVersions(
projectName,
Expand All @@ -133,6 +142,7 @@ describe('Pipeline create runs', () => {
// Fill out the form without a schedule and submit
createRunPage.fillName('New run');
createRunPage.fillDescription('New run description');
createRunPage.findExperimentSelect().should('contain.text', 'Select an experiment');
createRunPage.findExperimentSelect().should('not.be.disabled').click();
createRunPage.selectExperimentByName('Test experiment 1');
createRunPage.findPipelineSelect().should('not.be.disabled').click();
Expand Down Expand Up @@ -181,7 +191,11 @@ describe('Pipeline create runs', () => {
});

// Mock experiments, pipelines & versions for form select dropdowns
cloneRunPage.mockGetExperiments(projectName, mockExperiments);
cloneRunPage.mockGetExperiments(
projectName,
[mockExperiments[0], mockExperiments[1]],
[mockExperiments[2]],
);
cloneRunPage.mockGetPipelines(projectName, [mockPipeline]);
cloneRunPage.mockGetPipelineVersions(
projectName,
Expand Down Expand Up @@ -257,7 +271,11 @@ describe('Pipeline create runs', () => {
};

// Mock experiments, pipelines & versions for form select dropdowns
createRunPage.mockGetExperiments(projectName, mockExperiments);
createRunPage.mockGetExperiments(
projectName,
[mockExperiments[0], mockExperiments[1]],
[mockExperiments[2]],
);
createRunPage.mockGetPipelines(projectName, [mockPipeline]);
createRunPage.mockGetPipelineVersions(
projectName,
Expand Down Expand Up @@ -386,7 +404,11 @@ describe('Pipeline create runs', () => {
};

// Mock experiments, pipelines & versions for form select dropdowns
createRunPage.mockGetExperiments(projectName, mockExperiments);
createRunPage.mockGetExperiments(
projectName,
[mockExperiments[0], mockExperiments[1]],
[mockExperiments[2]],
);
createRunPage.mockGetPipelines(projectName, [mockPipeline]);
createRunPage.mockGetPipelineVersions(
projectName,
Expand Down Expand Up @@ -486,22 +508,6 @@ describe('Pipeline create runs', () => {
});

describe('Schedules', () => {
beforeEach(() => {
mockExperiments.forEach((experiment) => {
cy.interceptOdh(
'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments/:experimentId',
{
path: {
namespace: projectName,
serviceName: 'dspa',
experimentId: experiment.experiment_id,
},
},
experiment,
);
});
});

it('switches to scheduled runs from triggered', () => {
visitLegacyRunsPage();
pipelineRunsGlobal.findSchedulesTab().click();
Expand Down Expand Up @@ -563,6 +569,7 @@ describe('Pipeline create runs', () => {
// Fill out the form with a schedule and submit
createSchedulePage.fillName('New recurring run');
createSchedulePage.fillDescription('New recurring run description');
createSchedulePage.findExperimentSelect().should('contain.text', 'Default');
createSchedulePage.findExperimentSelect().should('not.be.disabled').click();
createSchedulePage.selectExperimentByName('Test experiment 1');
createSchedulePage.findPipelineSelect().should('not.be.disabled').click();
Expand Down Expand Up @@ -817,4 +824,18 @@ const initIntercepts = () => {
pipeline_version_id: mockPipelineVersion.pipeline_version_id,
}),
);

mockExperiments.forEach((experiment) => {
cy.interceptOdh(
'GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/experiments/:experimentId',
{
path: {
namespace: projectName,
serviceName: 'dspa',
experimentId: experiment.experiment_id,
},
},
experiment,
);
});
};
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,15 @@ const InnerExperimentSelector: React.FC<
}) => {
const [isOpen, setOpen] = React.useState(false);

React.useEffect(() => {
const defaultExperiment = experiments.find(
(experiment) => experiment.display_name === 'Default',
);
if (initialLoaded && !selection && defaultExperiment) {
onSelect(defaultExperiment);
}
}, [selection, onSelect, experiments, initialLoaded]);

const toggleRef = React.useRef(null);
const menuRef = React.useRef(null);

Expand Down

0 comments on commit 5bad39f

Please sign in to comment.