Skip to content

Commit

Permalink
Removed Creator field in ModelVersionView if user_id is undefined (#5089
Browse files Browse the repository at this point in the history
)

* Removed Creator field in ModelVersionView if user_id is not present

Signed-off-by: Jin Zhang <jin.zhang@databricks.com>

* Removed unused include

Signed-off-by: Jin Zhang <jin.zhang@databricks.com>

* Fixed lint

Signed-off-by: Jin Zhang <jin.zhang@databricks.com>

* Added filter to ensure null is removed

Signed-off-by: Jin Zhang <jin.zhang@databricks.com>

* fixed lint

Signed-off-by: Jin Zhang <jin.zhang@databricks.com>

* empty commit

Signed-off-by: Jin Zhang <jin.zhang@databricks.com>
  • Loading branch information
jinzhang21 committed Nov 23, 2021
1 parent 22e69c3 commit 6e4b64b
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 10 deletions.
20 changes: 11 additions & 9 deletions mlflow/server/js/src/model-registry/components/ModelVersionView.js
Expand Up @@ -214,14 +214,16 @@ export class ModelVersionViewImpl extends React.Component {

renderCreatorDescription(user_id) {
return (
<Descriptions.Item
label={this.props.intl.formatMessage({
defaultMessage: 'Creator',
description: 'Label name for creator metadata in model version page',
})}
>
{user_id}
</Descriptions.Item>
user_id && (
<Descriptions.Item
label={this.props.intl.formatMessage({
defaultMessage: 'Creator',
description: 'Label name for creator metadata in model version page',
})}
>
{user_id}
</Descriptions.Item>
)
);
}

Expand Down Expand Up @@ -260,7 +262,7 @@ export class ModelVersionViewImpl extends React.Component {
this.renderLastModifiedDescription(modelVersion.last_updated_timestamp),
this.renderSourceRunDescription(),
];
return defaultOrder;
return defaultOrder.filter((x) => x !== null);
}

renderMetadata(modelVersion) {
Expand Down
Expand Up @@ -231,4 +231,95 @@ describe('ModelVersionView', () => {
expect(wrapper.html()).toContain('special key');
expect(wrapper.html()).toContain('not so special value');
});

test('creator description not rendered if user_id is unavailable', () => {
const props = {
...minimalProps,
modelVersion: mockModelVersionDetailed(
'Model A',
1,
Stages.NONE,
ModelVersionStatus.READY,
[],
null,
'b99a0fc567ae4d32994392c800c0b6ce',
null,
),
};
wrapper = mountWithIntl(
<Provider store={minimalStore}>
<BrowserRouter>
<ModelVersionView {...props} />
</BrowserRouter>
</Provider>,
);

expect(wrapper.find('.metadata-list td.ant-descriptions-item').length).toBe(4);
expect(
wrapper
.find('.metadata-list span.ant-descriptions-item-label')
.at(0)
.text(),
).toBe('Registered At');
expect(
wrapper
.find('.metadata-list span.ant-descriptions-item-label')
.at(1)
.text(),
).toBe('Stage');
expect(
wrapper
.find('.metadata-list span.ant-descriptions-item-label')
.at(2)
.text(),
).toBe('Last Modified');
expect(
wrapper
.find('.metadata-list span.ant-descriptions-item-label')
.at(3)
.text(),
).toBe('Source Run');
});

test('creator description rendered if user_id is available', () => {
wrapper = mountWithIntl(
<Provider store={minimalStore}>
<BrowserRouter>
<ModelVersionView {...minimalProps} />
</BrowserRouter>
</Provider>,
);

expect(wrapper.find('.metadata-list td.ant-descriptions-item').length).toBe(5);
expect(
wrapper
.find('.metadata-list span.ant-descriptions-item-label')
.at(0)
.text(),
).toBe('Registered At');
expect(
wrapper
.find('.metadata-list span.ant-descriptions-item-label')
.at(1)
.text(),
).toBe('Creator');
expect(
wrapper
.find('.metadata-list span.ant-descriptions-item-label')
.at(2)
.text(),
).toBe('Stage');
expect(
wrapper
.find('.metadata-list span.ant-descriptions-item-label')
.at(3)
.text(),
).toBe('Last Modified');
expect(
wrapper
.find('.metadata-list span.ant-descriptions-item-label')
.at(4)
.text(),
).toBe('Source Run');
});
});
3 changes: 2 additions & 1 deletion mlflow/server/js/src/model-registry/test-utils.js
Expand Up @@ -16,14 +16,15 @@ export const mockModelVersionDetailed = (
tags = [],
run_link = undefined,
run_id = 'b99a0fc567ae4d32994392c800c0b6ce',
user_id = 'richard@example.com',
) => {
return {
name,
// Use version-based timestamp to make creation_timestamp differ across model versions
// and prevent React duplicate key warning.
creation_timestamp: version.toString(),
last_updated_timestamp: (version + 1).toString(),
user_id: 'richard@example.com',
user_id: user_id,
current_stage: stage,
description: '',
source: 'path/to/model',
Expand Down

0 comments on commit 6e4b64b

Please sign in to comment.