diff --git a/superset-frontend/src/components/Datasource/DatasourceEditor.jsx b/superset-frontend/src/components/Datasource/DatasourceEditor.jsx
index bf524c22101..260cf5eab73 100644
--- a/superset-frontend/src/components/Datasource/DatasourceEditor.jsx
+++ b/superset-frontend/src/components/Datasource/DatasourceEditor.jsx
@@ -741,7 +741,9 @@ class DatasourceEditor extends React.PureComponent {
database_name:
datasource.database.database_name || datasource.database.name,
schema_name: datasource.schema,
- table_name: datasource.table_name,
+ table_name: datasource.table_name
+ ? encodeURIComponent(datasource.table_name)
+ : datasource.table_name,
};
Object.entries(params).forEach(([key, value]) => {
// rison can't encode the undefined value
diff --git a/superset-frontend/src/components/Datasource/DatasourceEditor.test.jsx b/superset-frontend/src/components/Datasource/DatasourceEditor.test.jsx
index 7ad7b9f9a84..b6e43d29135 100644
--- a/superset-frontend/src/components/Datasource/DatasourceEditor.test.jsx
+++ b/superset-frontend/src/components/Datasource/DatasourceEditor.test.jsx
@@ -39,7 +39,12 @@ describe('DatasourceEditor', () => {
let isFeatureEnabledMock;
beforeEach(() => {
- el = ;
+ el = (
+
+ );
render(el, { useRedux: true });
});
@@ -51,7 +56,7 @@ describe('DatasourceEditor', () => {
expect(screen.getByTestId('edit-dataset-tabs')).toBeInTheDocument();
});
- it('makes an async request', () =>
+ it('can sync columns from source', () =>
new Promise(done => {
const columnsTab = screen.getByTestId('collection-tab-Columns');
@@ -63,6 +68,9 @@ describe('DatasourceEditor', () => {
setTimeout(() => {
expect(fetchMock.calls(DATASOURCE_ENDPOINT)).toHaveLength(1);
+ expect(fetchMock.calls(DATASOURCE_ENDPOINT)[0][0]).toContain(
+ 'Vehicle%20Sales%20%2B%27',
+ );
fetchMock.reset();
done();
}, 0);