Skip to content

Commit

Permalink
[RHOAIENG-4702] Improve unique naming for runs and versions in pipelines
Browse files Browse the repository at this point in the history
  • Loading branch information
jpuzz0 committed Jul 17, 2024
1 parent 279d95d commit 6c22045
Show file tree
Hide file tree
Showing 14 changed files with 510 additions and 148 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -144,11 +144,11 @@ export class CreateRunPage {
}

fillName(value: string): void {
this.findNameInput().type(value);
this.findNameInput().clear().type(value);
}

fillDescription(value: string): void {
this.findDescriptionInput().type(value);
this.findDescriptionInput().clear().type(value);
}

selectExperimentByName(name: string): void {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@ describe('Pipeline create runs', () => {
createRunPage.find();

// Fill out the form without a schedule and submit
createRunPage.fillName(initialMockRuns[0].display_name);
cy.findByTestId('duplicate-name-help-text').should('be.visible');
createRunPage.fillName('New run');
createRunPage.fillDescription('New run description');
createRunPage.findExperimentSelect().should('not.be.disabled').click();
Expand Down Expand Up @@ -561,6 +563,8 @@ describe('Pipeline create runs', () => {
createSchedulePage.find();

// Fill out the form with a schedule and submit
createRunPage.fillName(initialMockRecurringRuns[0].display_name);
cy.findByTestId('duplicate-name-help-text').should('be.visible');
createSchedulePage.fillName('New recurring run');
createSchedulePage.fillDescription('New recurring run description');
createSchedulePage.findExperimentSelect().should('not.be.disabled').click();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -364,8 +364,28 @@ describe('Pipelines', () => {
});

it('View pipeline server', () => {
const visitPipelineProjects = () => pipelinesGlobal.visit(projectName);
viewPipelineServerDetailsTest(visitPipelineProjects);
initIntercepts({});
cy.interceptK8s(
{
model: SecretModel,
ns: projectName,
},
mockSecretK8sResource({
s3Bucket: 'c2RzZA==',
namespace: projectName,
name: 'aws-connection-test',
}),
);
pipelinesGlobal.visit(projectName);

pipelinesGlobal.selectPipelineServerAction('View pipeline server configuration');
viewPipelineServerModal.shouldHaveAccessKey('sdsd');
viewPipelineServerModal.findPasswordHiddenButton().click();
viewPipelineServerModal.shouldHaveSecretKey('sdsd');
viewPipelineServerModal.shouldHaveEndPoint('https://s3.amazonaws.com');
viewPipelineServerModal.shouldHaveBucketName('test-pipelines-bucket');

viewPipelineServerModal.findCloseButton().click();
});

it('renders the page with pipelines table data', () => {
Expand Down Expand Up @@ -538,11 +558,8 @@ describe('Pipelines', () => {
};
const uploadedMockPipeline = buildMockPipelineV2(uploadPipelineParams);

// Intercept upload/re-fetch of pipelines
// Intercept uploaded pipeline
pipelineImportModal.mockUploadPipeline(uploadPipelineParams, projectName).as('uploadPipeline');
pipelinesTable
.mockGetPipelines([initialMockPipeline, uploadedMockPipeline], projectName)
.as('refreshPipelines');

// Wait for the pipelines table to load
pipelinesTable.find();
Expand All @@ -552,9 +569,15 @@ describe('Pipelines', () => {

// Fill out the "Import pipeline" modal and submit
pipelineImportModal.shouldBeOpen();
pipelineImportModal.fillPipelineName(initialMockPipeline.display_name);
cy.findByTestId('duplicate-name-help-text').should('be.visible');
pipelineImportModal.fillPipelineName('New pipeline');
pipelineImportModal.fillPipelineDescription('New pipeline description');
pipelineImportModal.uploadPipelineYaml(pipelineYamlPath);

pipelinesTable
.mockGetPipelines([initialMockPipeline, uploadedMockPipeline], projectName)
.as('refreshPipelines');
pipelineImportModal.submit();

// Wait for upload/fetch requests
Expand All @@ -574,7 +597,7 @@ describe('Pipelines', () => {
});

cy.wait('@refreshPipelines').then((interception) => {
expect(interception.request.query).to.eql({ sort_by: 'created_at desc', page_size: '10' });
expect(interception.request.query).to.eql({ sort_by: 'created_at desc' });
});

// Verify the uploaded pipeline is in the table
Expand Down Expand Up @@ -613,18 +636,10 @@ describe('Pipelines', () => {
};
const createdMockPipeline = buildMockPipelineV2(createPipelineAndVersionParams.pipeline);

// Intercept upload/re-fetch of pipelines
// Intercept upload of pipelines
pipelineImportModal
.mockCreatePipelineAndVersion(createPipelineAndVersionParams, projectName)
.as('createPipelineAndVersion');
pipelinesTable
.mockGetPipelines([initialMockPipeline, createdMockPipeline], projectName)
.as('refreshPipelines');
pipelinesTable.mockGetPipelineVersions(
[buildMockPipelineVersionV2(createPipelineAndVersionParams.pipeline_version)],
'new-pipeline',
projectName,
);

// Wait for the pipelines table to load
pipelinesTable.find();
Expand All @@ -637,6 +652,16 @@ describe('Pipelines', () => {
pipelineImportModal.fillPipelineName('New pipeline');
pipelineImportModal.findImportPipelineRadio().check();
pipelineImportModal.findPipelineUrlInput().type('https://example.com/pipeline.yaml');

// Intercept re-fetch of pipelines
pipelinesTable
.mockGetPipelines([initialMockPipeline, createdMockPipeline], projectName)
.as('refreshPipelines');
pipelinesTable.mockGetPipelineVersions(
[buildMockPipelineVersionV2(createPipelineAndVersionParams.pipeline_version)],
'new-pipeline',
projectName,
);
pipelineImportModal.submit();

// Wait for upload/fetch requests
Expand Down Expand Up @@ -664,24 +689,26 @@ describe('Pipelines', () => {

const uploadedMockPipelineVersion = buildMockPipelineVersionV2(uploadVersionParams);

// Intercept upload/re-fetch of pipeline versions
// Intercept upload of pipeline version
pipelineVersionImportModal
.mockUploadVersion(uploadVersionParams, projectName)
.as('uploadVersion');
pipelinesTable
.mockGetPipelineVersions(
[initialMockPipelineVersion, uploadedMockPipelineVersion],
initialMockPipeline.pipeline_id,
projectName,
)
.as('refreshVersions');

// Fill out the "Upload new version" modal and submit
pipelineVersionImportModal.shouldBeOpen();
pipelineVersionImportModal.selectPipelineByName('Test pipeline');
pipelineVersionImportModal.fillVersionName('New pipeline version');
pipelineVersionImportModal.fillVersionDescription('New pipeline version description');
pipelineVersionImportModal.uploadPipelineYaml(pipelineYamlPath);

// Intercept re-fetch of pipeline versions
pipelinesTable
.mockGetPipelineVersions(
[initialMockPipelineVersion, uploadedMockPipelineVersion],
initialMockPipeline.pipeline_id,
projectName,
)
.as('refreshVersions');
pipelineVersionImportModal.submit();

// Wait for upload/fetch requests
Expand Down Expand Up @@ -735,27 +762,29 @@ describe('Pipelines', () => {
// Open the "Upload new version" modal
pipelinesGlobal.findUploadVersionButton().click();

const uploadedMockPipelineVersion = buildMockPipelineVersionV2(createPipelineVersionParams);

// Intercept upload/re-fetch of pipeline versions
pipelinesTable
.mockGetPipelineVersions(
[initialMockPipelineVersion, uploadedMockPipelineVersion],
initialMockPipeline.pipeline_id,
projectName,
)
.as('refreshVersions');

// Intercept uploaded pipeline version
pipelineVersionImportModal
.mockCreatePipelineVersion(createPipelineVersionParams, projectName)
.as('createVersion');

// Fill out the "Upload new version" modal and submit
pipelineVersionImportModal.shouldBeOpen();
pipelineVersionImportModal.selectPipelineByName('Test pipeline');
pipelineVersionImportModal.fillVersionName(initialMockPipelineVersion.display_name);
cy.findByTestId('duplicate-name-help-text').should('be.visible');
pipelineVersionImportModal.fillVersionName('New pipeline version');
pipelineVersionImportModal.findImportPipelineRadio().check();
pipelineVersionImportModal.findPipelineUrlInput().type('https://example.com/pipeline.yaml');

// Intercept re-fetch of pipeline versions
const uploadedMockPipelineVersion = buildMockPipelineVersionV2(createPipelineVersionParams);
pipelinesTable
.mockGetPipelineVersions(
[initialMockPipelineVersion, uploadedMockPipelineVersion],
initialMockPipeline.pipeline_id,
projectName,
)
.as('refreshVersions');
pipelineVersionImportModal.submit();

// Wait for upload/fetch requests
Expand Down Expand Up @@ -956,13 +985,24 @@ describe('Pipelines', () => {
});

it('navigate to create run page from pipeline row', () => {
const visitPipelineProjects = () => pipelinesGlobal.visit(projectName);
runCreateRunPageNavTest(visitPipelineProjects);
initIntercepts({});
pipelinesGlobal.visit(projectName);

// Wait for the pipelines table to load
pipelinesTable.find();
pipelinesTable
.getRowById(initialMockPipeline.pipeline_id)
.findKebabAction('Create run')
.click();
verifyRelativeURL(
`/pipelines/${projectName}/${initialMockPipeline.pipeline_id}/${initialMockPipelineVersion.pipeline_version_id}/runs/create`,
);
});

it('run and schedule dropdown action should be disabeld when pipeline has no versions', () => {
initIntercepts({ hasNoPipelineVersions: true });
pipelinesGlobal.visit(projectName);

pipelinesTable
.getRowById(initialMockPipeline.pipeline_id)
.findKebabAction('Create schedule')
Expand All @@ -974,8 +1014,18 @@ describe('Pipelines', () => {
});

it('navigates to "Schedule run" page from pipeline row', () => {
const visitPipelineProjects = () => pipelinesGlobal.visit(projectName);
runScheduleRunPageNavTest(visitPipelineProjects);
initIntercepts({});
pipelinesGlobal.visit(projectName);

pipelinesTable.find();
pipelinesTable
.getRowById(initialMockPipeline.pipeline_id)
.findKebabAction('Create schedule')
.click();

verifyRelativeURL(
`/pipelines/${projectName}/${initialMockPipeline.pipeline_id}/${initialMockPipelineVersion.pipeline_version_id}/schedules/create`,
);
});

it('navigate to create run page from pipeline version row', () => {
Expand Down Expand Up @@ -1136,7 +1186,7 @@ type HandlersProps = {
nextPageToken?: string | undefined;
};

export const initIntercepts = ({
const initIntercepts = ({
isEmpty = false,
mockPipelines = [initialMockPipeline],
hasNoPipelineVersions = false,
Expand Down Expand Up @@ -1234,63 +1284,3 @@ const createDeletePipelineIntercept = (pipelineId: string) =>
},
mockSuccessGoogleRpcStatus({}),
);

export const runCreateRunPageNavTest = (visitPipelineProjects: () => void): void => {
initIntercepts({});
visitPipelineProjects();

// Wait for the pipelines table to load
pipelinesTable.find();
pipelinesTable.getRowById(initialMockPipeline.pipeline_id).findKebabAction('Create run').click();
verifyRelativeURL(
`/pipelines/${projectName}/${initialMockPipeline.pipeline_id}/${initialMockPipelineVersion.pipeline_version_id}/runs/create`,
);
};

export const runScheduleRunPageNavTest = (visitPipelineProjects: () => void): void => {
initIntercepts({});
visitPipelineProjects();

pipelinesTable.find();
pipelinesTable
.getRowById(initialMockPipeline.pipeline_id)
.findKebabAction('Create schedule')
.click();

verifyRelativeURL(
`/pipelines/${projectName}/${initialMockPipeline.pipeline_id}/${initialMockPipelineVersion.pipeline_version_id}/schedules/create`,
);
};

export const viewPipelineServerDetailsTest = (visitPipelineProjects: () => void): void => {
initIntercepts({});
cy.interceptK8s(
{
model: SecretModel,
ns: projectName,
},
mockSecretK8sResource({
s3Bucket: 'c2RzZA==',
namespace: projectName,
name: 'aws-connection-test',
}),
);
visitPipelineProjects();
viewPipelineDetails();
};

const viewPipelineDetails = (
accessKey = 'sdsd',
secretKey = 'sdsd',
endpoint = 'https://s3.amazonaws.com',
bucketName = 'test-pipelines-bucket',
) => {
pipelinesGlobal.selectPipelineServerAction('View pipeline server configuration');
viewPipelineServerModal.shouldHaveAccessKey(accessKey);
viewPipelineServerModal.findPasswordHiddenButton().click();
viewPipelineServerModal.shouldHaveSecretKey(secretKey);
viewPipelineServerModal.shouldHaveEndPoint(endpoint);
viewPipelineServerModal.shouldHaveBucketName(bucketName);

viewPipelineServerModal.findCloseButton().click();
};
Loading

0 comments on commit 6c22045

Please sign in to comment.