diff --git a/superset-frontend/src/components/Datasource/DatasourceModal/DatasourceModal.test.tsx b/superset-frontend/src/components/Datasource/DatasourceModal/DatasourceModal.test.tsx index 816da881b913..e095020126d7 100644 --- a/superset-frontend/src/components/Datasource/DatasourceModal/DatasourceModal.test.tsx +++ b/superset-frontend/src/components/Datasource/DatasourceModal/DatasourceModal.test.tsx @@ -29,7 +29,7 @@ import fetchMock from 'fetch-mock'; import { SupersetClient } from '@superset-ui/core'; import mockDatasource from 'spec/fixtures/mockDatasource'; import React from 'react'; -import DatasourceModalComponent from '.'; +import DatasourceModalComponent, { buildExtraJsonObject } from '.'; // Cast to accept partial mock props in tests const DatasourceModal = DatasourceModalComponent as unknown as React.FC< @@ -316,3 +316,35 @@ describe('DatasourceModal', () => { }); }); }); + +describe('buildExtraJsonObject', () => { + test('returns "{}" for an item with no warning and no certification', () => { + expect(buildExtraJsonObject({} as any)).toBe('{}'); + }); + + test('drops warning_markdown when its value is null', () => { + expect(buildExtraJsonObject({ warning_markdown: null } as any)).toBe('{}'); + }); + + test('drops warning_markdown when its value is an empty string', () => { + expect(buildExtraJsonObject({ warning_markdown: '' } as any)).toBe('{}'); + }); + + test('preserves a non-empty warning_markdown verbatim', () => { + expect(buildExtraJsonObject({ warning_markdown: '⚠ caveat' } as any)).toBe( + '{"warning_markdown":"⚠ caveat"}', + ); + }); + + test('preserves certification and drops null warning_markdown', () => { + expect( + buildExtraJsonObject({ + certified_by: 'data-team', + certification_details: 'verified', + warning_markdown: null, + } as any), + ).toBe( + '{"certification":{"certified_by":"data-team","details":"verified"}}', + ); + }); +}); diff --git a/superset-frontend/src/components/Datasource/DatasourceModal/index.tsx b/superset-frontend/src/components/Datasource/DatasourceModal/index.tsx index 65744e543eb7..4049268c3e57 100644 --- a/superset-frontend/src/components/Datasource/DatasourceModal/index.tsx +++ b/superset-frontend/src/components/Datasource/DatasourceModal/index.tsx @@ -71,7 +71,7 @@ const StyledDatasourceModal = styled(Modal)` } `; -function buildExtraJsonObject( +export function buildExtraJsonObject( item: DatasetObject['metrics'][0] | DatasetObject['columns'][0], ) { const certification = @@ -83,7 +83,7 @@ function buildExtraJsonObject( : undefined; return JSON.stringify({ certification, - warning_markdown: item?.warning_markdown, + warning_markdown: item?.warning_markdown || undefined, }); }