Skip to content

Commit

Permalink
Archive and restore registered models
Browse files Browse the repository at this point in the history
  • Loading branch information
manaswinidas committed May 31, 2024
1 parent 4aa0a8c commit 5f9f331
Show file tree
Hide file tree
Showing 33 changed files with 1,248 additions and 160 deletions.
6 changes: 3 additions & 3 deletions frontend/src/__mocks__/mockModelVersion.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ModelVersion, ModelVersionState } from '~/concepts/modelRegistry/types';
import { ModelVersion, ModelState } from '~/concepts/modelRegistry/types';
import { createModelRegistryLabelsObject } from './utils';

type MockModelVersionType = {
Expand All @@ -7,7 +7,7 @@ type MockModelVersionType = {
registeredModelId?: string;
name?: string;
labels?: string[];
state?: ModelVersionState;
state?: ModelState;
description?: string;
};

Expand All @@ -17,7 +17,7 @@ export const mockModelVersion = ({
name = 'new model version',
labels = [],
id = '1',
state = ModelVersionState.LIVE,
state = ModelState.LIVE,
description = 'Description of model version',
}: MockModelVersionType): ModelVersion => ({
author,
Expand Down
6 changes: 3 additions & 3 deletions frontend/src/__mocks__/mockRegisteredModel.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import { RegisteredModel, RegisteredModelState } from '~/concepts/modelRegistry/types';
import { RegisteredModel, ModelState } from '~/concepts/modelRegistry/types';
import { createModelRegistryLabelsObject } from './utils';

type MockRegisteredModelType = {
id?: string;
name?: string;
state?: RegisteredModelState;
state?: ModelState;
description?: string;
labels?: string[];
};

export const mockRegisteredModel = ({
name = 'test',
state = RegisteredModelState.LIVE,
state = ModelState.LIVE,
description = '',
labels = [],
id = '1',
Expand Down
5 changes: 3 additions & 2 deletions frontend/src/__mocks__/mockRegisteredModelsList.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { mockRegisteredModel } from './mockRegisteredModel';

export const mockRegisteredModelList = ({
size = 5,
}: Partial<RegisteredModelList>): RegisteredModelList => ({
items: [
items = [
mockRegisteredModel({ name: 'test-1' }),
mockRegisteredModel({ name: 'test-2' }),
mockRegisteredModel({
Expand Down Expand Up @@ -46,6 +45,8 @@ export const mockRegisteredModelList = ({
],
}),
],
}: Partial<RegisteredModelList>): RegisteredModelList => ({
items,
nextPageToken: '',
pageSize: 0,
size,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,6 @@ class ModelVersionArchive {
this.wait();
}

findTableKebabMenu() {
return cy.findByTestId('model-versions-table-kebab-action');
}

findModelVersionsTableKebab() {
return cy.findByTestId('model-versions-table-kebab-action');
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
import {
registeredModelArchiveDetailsUrl,
registeredModelArchiveUrl,
registeredModelUrl,
} from '~/pages/modelRegistry/screens/routeUtils';
import { TableRow } from '~/__tests__/cypress/cypress/pages/components/table';
import { Modal } from '~/__tests__/cypress/cypress/pages/components/Modal';

class ArchiveModelTableRow extends TableRow {
findName() {
return this.find().findByTestId('model-name');
}

findDescription() {
return this.find().findByTestId('description');
}

findLabelPopoverText() {
return this.find().findByTestId('popover-label-text');
}

findLabelModalText() {
return this.find().findByTestId('modal-label-text');
}

shouldContainsPopoverLabels(labels: string[]) {
cy.findByTestId('popover-label-group').within(() => labels.map((label) => cy.contains(label)));
return this;
}
}

class RestoreModelModal extends Modal {
constructor() {
super('Restore model?');
}

findRestoreButton() {
return cy.findByTestId('modal-submit-button');
}
}

class ArchiveModelModal extends Modal {
constructor() {
super('Archive model?');
}

findArchiveButton() {
return cy.findByTestId('modal-submit-button');
}

findModalTextInput() {
return cy.findByTestId('confirm-archive-input');
}
}

class ModelArchive {
private wait() {
cy.findByTestId('app-page-title').should('exist');
cy.testA11y();
}

visit() {
cy.visit(registeredModelArchiveUrl('modelregistry-sample'));
this.wait();
}

visitArchiveModelDetail() {
cy.visit(registeredModelArchiveDetailsUrl('2', 'modelregistry-sample'));
}

visitModelList() {
cy.visit('/modelRegistry/modelregistry-sample');
this.wait();
}

visitModelDetails() {
cy.visit(registeredModelUrl('2', 'modelregistry-sample'));
this.wait();
}

findTableKebabMenu() {
return cy.findByTestId('registered-models-table-kebab-action');
}

shouldArchiveVersionsEmpty() {
cy.findByTestId('empty-archive-model-state').should('exist');
}

findArchiveModelBreadcrumbItem() {
return cy.findByTestId('archive-model-page-breadcrumb');
}

findArchiveModelTable() {
return cy.findByTestId('registered-models-archive-table');
}

findArchiveModelsTableRows() {
return this.findArchiveModelTable().find('tbody tr');
}

findRestoreButton() {
return cy.findByTestId('restore-button');
}

getRow(name: string) {
return new ArchiveModelTableRow(() =>
this.findArchiveModelTable().find(`[data-label="Model name"]`).contains(name).parents('tr'),
);
}

findModelVersionsDetailsHeaderAction() {
return cy.findByTestId('model-version-action-toggle');
}
}

export const registeredModelArchive = new ModelArchive();
export const restoreModelModal = new RestoreModelModal();
export const archiveModelModal = new ArchiveModelModal();
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,12 @@ declare global {
response: OdhResponse<ModelVersion | undefined>,
): Cypress.Chainable<null>;

interceptOdh(
type: 'PATCH /api/service/modelregistry/:serviceName/api/model_registry/:apiVersion/registered_models/:registeredModelId',
options: { path: { serviceName: string; apiVersion: string; registeredModelId: number } },
response: OdhResponse<RegisteredModel | undefined>,
): Cypress.Chainable<null>;

interceptOdh(
type: `GET /api/service/pipelines/:namespace/:serviceName/apis/v2beta1/pipelines/:pipelineId/versions/:pipelineVersionId`,
options: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { mockRegisteredModelList } from '~/__mocks__/mockRegisteredModelsList';
import { ModelRegistryModel } from '~/__tests__/cypress/cypress/utils/models';
import { mockModelVersionList } from '~/__mocks__/mockModelVersionList';
import { mockModelVersion } from '~/__mocks__/mockModelVersion';
import { ModelVersion, ModelVersionState } from '~/concepts/modelRegistry/types';
import { ModelVersion, ModelState } from '~/concepts/modelRegistry/types';
import { mockRegisteredModel } from '~/__mocks__/mockRegisteredModel';
import { verifyRelativeURL } from '~/__tests__/cypress/cypress/utils/url';
import {
Expand Down Expand Up @@ -39,9 +39,9 @@ const initIntercepts = ({
'Test label y',
'Test label z',
],
state: ModelVersionState.ARCHIVED,
state: ModelState.ARCHIVED,
}),
mockModelVersion({ id: '2', name: 'model version 2', state: ModelVersionState.ARCHIVED }),
mockModelVersion({ id: '2', name: 'model version 2', state: ModelState.ARCHIVED }),
mockModelVersion({ id: '3', name: 'model version 3' }),
],
}: HandlersProps) => {
Expand Down Expand Up @@ -100,7 +100,7 @@ const initIntercepts = ({
modelVersionId: 2,
},
},
mockModelVersion({ id: '2', name: 'model version 2', state: ModelVersionState.ARCHIVED }),
mockModelVersion({ id: '2', name: 'model version 2', state: ModelState.ARCHIVED }),
);

cy.interceptOdh(
Expand All @@ -112,7 +112,7 @@ const initIntercepts = ({
modelVersionId: 3,
},
},
mockModelVersion({ id: '3', name: 'model version 3', state: ModelVersionState.LIVE }),
mockModelVersion({ id: '3', name: 'model version 3', state: ModelState.LIVE }),
);
};

Expand Down
Loading

0 comments on commit 5f9f331

Please sign in to comment.