Skip to content

Commit

Permalink
feat(query): add more query wrappers (#570)
Browse files Browse the repository at this point in the history
* feat: add more api wrappers

* test: add unit tests
  • Loading branch information
kristw authored and zhaoyongjie committed Nov 26, 2021
1 parent ed99565 commit d277421
Show file tree
Hide file tree
Showing 14 changed files with 163 additions and 27 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { SupersetClientInterface, SupersetClient, RequestConfig } from '@superset-ui/connection';
import { SupersetClient, RequestConfig } from '@superset-ui/connection';
import { QueryFormData } from '../../types/QueryFormData';
import { LegacyChartDataResponse } from './types';
import { BaseParams } from '../types';

export interface Params {
client?: SupersetClientInterface;
export interface Params extends BaseParams {
method?: 'GET' | 'POST';
requestConfig?: Partial<RequestConfig>;
url?: string;
formData: QueryFormData;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { SupersetClient, RequestConfig } from '@superset-ui/connection';
import { Datasource } from '../../types/Datasource';
import { BaseParams } from '../types';

export interface Params extends BaseParams {
datasourceKey: string;
}

export default function getDatasourceMetadata({
client = SupersetClient,
datasourceKey,
requestConfig,
}: Params) {
return client
.get({
endpoint: `/superset/fetch_datasource_metadata?datasourceKey=${datasourceKey}`,
...requestConfig,
} as RequestConfig)
.then(response => response.json as Datasource);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { SupersetClient, RequestConfig } from '@superset-ui/connection';
import { BaseParams } from '../types';
import { QueryFormData } from '../../types/QueryFormData';

export interface Params extends BaseParams {
sliceId: number;
overrideFormData?: Partial<QueryFormData>;
}

export default function getFormData({
client = SupersetClient,
sliceId,
overrideFormData,
requestConfig,
}: Params) {
const promise = client
.get({
endpoint: `/api/v1/form_data/?slice_id=${sliceId}`,
...requestConfig,
} as RequestConfig)
.then(response => response.json as QueryFormData);

return overrideFormData
? promise.then(formData => ({ ...formData, ...overrideFormData }))
: promise;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export { default as fetchExploreJson } from './fetchExploreJson';
export { default as getFormData } from './getFormData';
export { default as getDatasourceMetadata } from './getDatasourceMetadata';
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import {
RequestConfig,
SupersetClientInterface,
SupersetClientClass,
} from '@superset-ui/connection';

export interface BaseParams {
client?: SupersetClientInterface | SupersetClientClass;
requestConfig?: Partial<RequestConfig>;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// eslint-disable-next-line import/prefer-default-export
export { default as postChartData } from './postChartData';
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { SupersetClientInterface, SupersetClient, RequestConfig } from '@superset-ui/connection';
import { SupersetClient, RequestConfig } from '@superset-ui/connection';
import { QueryContext } from '../../types/Query';
import { BaseParams } from '../types';
import { V1ChartDataResponse } from './types';

export interface Params {
client?: SupersetClientInterface;
requestConfig?: Partial<RequestConfig>;
export interface Params extends BaseParams {
queryContext: QueryContext;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// API Calls
import * as ApiLegacy from './api/legacy';
import * as ApiV1 from './api/v1';

export { default as buildQueryContext } from './buildQueryContext';
export { default as buildQueryObject } from './buildQueryObject';
export { default as convertFilter } from './convertFilter';
Expand All @@ -11,8 +15,7 @@ export * from './types/Metric';
export * from './types/Query';

// API Calls
export { default as fetchExploreJson } from './api/legacy/fetchExploreJson';
export { default as postChartData } from './api/v1/postChartData';
export { ApiLegacy, ApiV1 };

export * from './api/legacy/types';
export * from './api/v1/types';

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
import fetchMock from 'fetch-mock';
import { SupersetClient } from '@superset-ui/connection';
import { LOGIN_GLOB } from '../fixtures/constants';
import { fetchExploreJson } from '../../../src';
import { fetchExploreJson } from '../../../src/api/legacy';
import setupClientForTest from '../setupClientForTest';

describe('fetchExploreJson()', () => {
beforeAll(() => {
fetchMock.get(LOGIN_GLOB, { csrf_token: '1234' });
SupersetClient.reset();
SupersetClient.configure().init();
});
beforeAll(setupClientForTest);

afterEach(fetchMock.restore);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import fetchMock from 'fetch-mock';
import setupClientForTest from '../setupClientForTest';
import { getDatasourceMetadata } from '../../../src/api/legacy';

describe('getFormData()', () => {
beforeAll(setupClientForTest);

afterEach(fetchMock.restore);

it('returns datasource metadata for given datasource key', () => {
const mockData = {
field1: 'abc',
field2: 'def',
};

fetchMock.get('glob:*/superset/fetch_datasource_metadata?datasourceKey=1__table', mockData);

return expect(
getDatasourceMetadata({
datasourceKey: '1__table',
}),
).resolves.toEqual(mockData);
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import fetchMock from 'fetch-mock';
import setupClientForTest from '../setupClientForTest';
import { getFormData } from '../../../src/api/legacy';

describe('getFormData()', () => {
beforeAll(setupClientForTest);

afterEach(fetchMock.restore);

const mockData = {
datasource: '1__table',
viz_type: 'sankey',
slice_id: 1,
url_params: {},
granularity_sqla: null,
time_grain_sqla: 'P1D',
time_range: 'Last week',
groupby: ['source', 'target'],
metric: 'sum__value',
adhoc_filters: [],
row_limit: 1000,
};

it('returns formData for given slice id', () => {
fetchMock.get(`glob:*/api/v1/form_data/?slice_id=1`, mockData);

return expect(
getFormData({
sliceId: 1,
}),
).resolves.toEqual(mockData);
});

it('overrides formData when overrideFormData is specified', () => {
fetchMock.get(`glob:*/api/v1/form_data/?slice_id=1`, mockData);

return expect(
getFormData({
sliceId: 1,
overrideFormData: {
metric: 'avg__value',
},
}),
).resolves.toEqual({
...mockData,
metric: 'avg__value',
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// eslint-disable-next-line import/no-extraneous-dependencies
import fetchMock from 'fetch-mock';
import { SupersetClient } from '@superset-ui/connection';

const LOGIN_GLOB = 'glob:*superset/csrf_token/*';

export default function setupClientForTest() {
fetchMock.get(LOGIN_GLOB, { csrf_token: '1234' });
SupersetClient.reset();
SupersetClient.configure().init();
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
import fetchMock from 'fetch-mock';
import { SupersetClient } from '@superset-ui/connection';
import { LOGIN_GLOB } from '../fixtures/constants';
import { postChartData, buildQueryContext } from '../../../src';
import { buildQueryContext } from '../../../src';
import { postChartData } from '../../../src/api/v1';
import setupClientForTest from '../setupClientForTest';

describe('postChartData()', () => {
beforeAll(() => {
fetchMock.get(LOGIN_GLOB, { csrf_token: '1234' });
SupersetClient.reset();
SupersetClient.configure().init();
});
beforeAll(setupClientForTest);

afterEach(fetchMock.restore);

Expand Down

0 comments on commit d277421

Please sign in to comment.