Skip to content

Commit bb045de

Browse files
authored
[Cypress-e2e] Add model registry custom properties retention test (#7313)
* mr props test * address review
1 parent 85c40b3 commit bb045de

7 files changed

Lines changed: 522 additions & 1 deletion

File tree

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Test data for custom properties retention tests
2+
# Tests verify no data loss on related objects during model registry operations
3+
4+
# Registry and database configuration
5+
registryNamePrefix: "test-props-registry"
6+
databaseNamePrefix: "props-db"
7+
projectNamePrefix: "props-deploy-project"
8+
operatorDeploymentName: "model-registry-operator-controller-manager"
9+
10+
# Model configuration
11+
modelNamePrefix: "test-props-model"
12+
modelDescription: "Test model for verifying custom properties retention during operations"
13+
14+
# Model custom properties
15+
modelCustomProperties:
16+
- key: "model-prop-1"
17+
value: "model-value-1"
18+
19+
# Model labels
20+
modelLabels:
21+
- "model-label-1"
22+
- "model-label-2"
23+
24+
# Version configuration
25+
versionName: "v1.0"
26+
versionDescription: "Test version for verifying custom properties retention"
27+
28+
# Version custom properties
29+
versionCustomProperties:
30+
- key: "version-prop-1"
31+
value: "version-value-1"
32+
33+
# Version labels
34+
versionLabels:
35+
- "version-label-1"
36+
- "version-label-2"
37+
38+
# Model format configuration
39+
sourceModelFormat: "onnx"
40+
sourceModelFormatVersion: "1.0"
41+
42+
# Updated values for edit tests
43+
updatedVersionDescription: "Updated description for version - testing properties retention"
44+
updatedModelFormat: "pytorch"
45+
updatedFormatVersion: "2.0"
46+
newVersionLabel: "new-version-label"
47+
newVersionPropertyKey: "new-version-prop"
48+
newVersionPropertyValue: "new-version-value"
49+
50+
# Object storage configuration (for model registration)
51+
objectStorageEndpoint: "http://minio.example.com:9000"
52+
objectStorageBucket: "test-models"
53+
objectStorageRegion: "us-east-1"
54+
objectStoragePath: "models/retain-props-test/v1.0"
55+
56+
# Model format for deployment test
57+
modelFormatForDeployment: "openvino_ir - opset13"
58+
servingRuntimeForDeployment: "OpenVINO Model Server"
59+
modelPathForDeployment: "kserve-openvino-test/openvino-example-model"

packages/cypress/cypress/pages/modelRegistry.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ class ModelRegistry {
218218
return cy.findByTestId('breadcrumb-model');
219219
}
220220

221+
findModelVersionBreadcrumbItem() {
222+
return cy.findByTestId('breadcrumb-model-version');
223+
}
224+
221225
findModelVersionsTableKebab() {
222226
return cy.findByTestId('model-versions-table-kebab-action');
223227
}
@@ -250,6 +254,10 @@ class ModelRegistry {
250254
return cy.findByTestId('empty-model-registry-secondary-action', { timeout });
251255
}
252256

257+
findModelOverviewTab() {
258+
return cy.findByTestId('model-overview-tab');
259+
}
260+
253261
findModelVersionsTab() {
254262
return cy.findByTestId('model-versions-tab');
255263
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/**
2+
* Page objects for Registered Model and Model Version Details pages.
3+
* ModelVersionDetails extends RegisteredModelDetails, scoping selectors to the version details card.
4+
*/
5+
6+
class RegisteredModelDetails {
7+
findPropertiesExpandableSection() {
8+
return cy.findByTestId('properties-expandable-section').first();
9+
}
10+
11+
findPropertiesTable() {
12+
return this.findPropertiesExpandableSection().findByTestId('properties-table');
13+
}
14+
15+
findAddPropertyButton() {
16+
return this.findPropertiesExpandableSection().findByTestId('add-property-button');
17+
}
18+
19+
findPropertyKeyInput() {
20+
return this.findPropertiesExpandableSection().findByTestId('add-property-key-input');
21+
}
22+
23+
findPropertyValueInput() {
24+
return this.findPropertiesExpandableSection().findByTestId('add-property-value-input');
25+
}
26+
27+
findSavePropertyButton() {
28+
return this.findPropertiesExpandableSection().findByTestId('save-edit-button-property');
29+
}
30+
31+
findDiscardPropertyButton() {
32+
return this.findPropertiesExpandableSection().findByTestId('discard-edit-button-property');
33+
}
34+
35+
// PF v6 ExpandableSection does not support data-testid on the internal toggle button;
36+
// querying by aria-expanded is the most stable alternative available.
37+
findPropertiesToggleButton() {
38+
return this.findPropertiesExpandableSection().find('button[aria-expanded]').first();
39+
}
40+
41+
ensurePropertiesExpanded() {
42+
this.findPropertiesToggleButton()
43+
.scrollIntoView()
44+
.then(($btn) => {
45+
if ($btn.attr('aria-expanded') === 'false') {
46+
cy.wrap($btn).click();
47+
}
48+
});
49+
this.findPropertiesToggleButton().should('have.attr', 'aria-expanded', 'true');
50+
}
51+
52+
findExpandPropertiesButton() {
53+
return this.findPropertiesExpandableSection().findByTestId('expand-control-button');
54+
}
55+
56+
addCustomProperty(key: string, value: string) {
57+
this.findAddPropertyButton().click();
58+
this.findPropertyKeyInput().type(key);
59+
this.findPropertyValueInput().type(value);
60+
this.findSavePropertyButton().click();
61+
}
62+
63+
shouldHaveCustomProperty(key: string, value: string) {
64+
this.findPropertiesExpandableSection().within(() => {
65+
cy.contains(key).should('be.visible');
66+
cy.contains(value).should('be.visible');
67+
});
68+
return this;
69+
}
70+
71+
findLabel(labelText: string) {
72+
return cy.findByTestId('label').contains(labelText);
73+
}
74+
75+
findLabelGroup() {
76+
return cy.findByTestId('popover-label-group');
77+
}
78+
79+
findModalLabelGroup() {
80+
return cy.findByTestId('modal-label-group');
81+
}
82+
83+
shouldHaveLabel(labelText: string) {
84+
cy.contains(labelText).should('be.visible');
85+
return this;
86+
}
87+
}
88+
89+
class ModelVersionDetails extends RegisteredModelDetails {
90+
findVersionDetailsCard() {
91+
return cy.findByTestId('version-details-card');
92+
}
93+
94+
findPropertiesExpandableSection() {
95+
return this.findVersionDetailsCard().findByTestId('properties-expandable-section');
96+
}
97+
}
98+
99+
export const registeredModelDetails = new RegisteredModelDetails();
100+
export const modelVersionDetails = new ModelVersionDetails();

0 commit comments

Comments
 (0)