fix tests with search updates

This commit is contained in:
John Mitchell 2019-09-13 14:45:26 -04:00
parent 34e1b8be1d
commit 678fba1ffb
9 changed files with 127 additions and 20 deletions

View File

@ -13354,6 +13354,17 @@
"object-assign": "^4.1.1",
"prop-types": "^15.6.2",
"scheduler": "^0.13.6"
},
"dependencies": {
"scheduler": {
"version": "0.13.6",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz",
"integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==",
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
}
}
}
},
"react-codemirror2": {
@ -13370,6 +13381,17 @@
"object-assign": "^4.1.1",
"prop-types": "^15.6.2",
"scheduler": "^0.13.6"
},
"dependencies": {
"scheduler": {
"version": "0.13.6",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz",
"integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==",
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
}
}
}
},
"react-fast-compare": {
@ -14398,15 +14420,6 @@
"xmlchars": "^2.1.1"
}
},
"scheduler": {
"version": "0.13.6",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz",
"integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==",
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
}
},
"scheduler": {
"version": "0.15.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz",

View File

@ -5,6 +5,13 @@ import DataListToolbar from './DataListToolbar';
describe('<DataListToolbar />', () => {
let toolbar;
const QS_CONFIG = {
namespace: 'organization',
dateFields: [ 'modified', 'created' ],
defaultParams: { page: 1, page_size: 5, order_by: 'name' },
integerFields: ['page', 'page_size'],
};
afterEach(() => {
if (toolbar) {
toolbar.unmount();
@ -28,6 +35,7 @@ describe('<DataListToolbar />', () => {
toolbar = mountWithContexts(
<DataListToolbar
qsConfig={QS_CONFIG}
isAllSelected={false}
showExpandCollapse
sortedColumnKey="name"
@ -77,6 +85,7 @@ describe('<DataListToolbar />', () => {
toolbar = mountWithContexts(
<DataListToolbar
qsConfig={QS_CONFIG}
sortedColumnKey="foo"
sortOrder="ascending"
columns={multipleColumns}
@ -151,6 +160,7 @@ describe('<DataListToolbar />', () => {
toolbar = mountWithContexts(
<DataListToolbar
qsConfig={QS_CONFIG}
sortedColumnKey="id"
sortOrder="descending"
columns={numericColumns}
@ -173,6 +183,7 @@ describe('<DataListToolbar />', () => {
toolbar = mountWithContexts(
<DataListToolbar
qsConfig={QS_CONFIG}
sortedColumnKey="name"
sortOrder="descending"
columns={alphaColumns}
@ -184,6 +195,7 @@ describe('<DataListToolbar />', () => {
toolbar = mountWithContexts(
<DataListToolbar
qsConfig={QS_CONFIG}
sortedColumnKey="name"
sortOrder="ascending"
columns={alphaColumns}
@ -204,6 +216,7 @@ describe('<DataListToolbar />', () => {
toolbar = mountWithContexts(
<DataListToolbar
qsConfig={QS_CONFIG}
columns={columns}
onSearch={onSearch}
onSort={onSort}

View File

@ -114,14 +114,15 @@ class Search extends React.Component {
const { searchKey, searchValue } = this.state;
const { onSearch, qsConfig } = this.props;
const isNonStringField = key => qsConfig
.integerFields
.filter(field => field === key).length || qsConfig.dateFields
.filter(field => field === key).length;
const isNonStringField = key =>
qsConfig.integerFields.filter(field => field === key).length ||
qsConfig.dateFields.filter(field => field === key).length;
// TODO: this will probably become more sophisticated, where date
// fields and string fields are passed to a formatter
const actualSearchKey = isNonStringField(searchKey) ? searchKey : `${searchKey}__icontains`;
const actualSearchKey = isNonStringField(searchKey)
? searchKey
: `${searchKey}__icontains`;
onSearch(actualSearchKey, searchValue);

View File

@ -5,6 +5,13 @@ import Search from './Search';
describe('<Search />', () => {
let search;
const QS_CONFIG = {
namespace: 'organization',
dateFields: [ 'modified', 'created' ],
defaultParams: { page: 1, page_size: 5, order_by: 'name' },
integerFields: ['page', 'page_size'],
};
afterEach(() => {
if (search) {
search = null;
@ -22,7 +29,7 @@ describe('<Search />', () => {
const onSearch = jest.fn();
search = mountWithContexts(
<Search sortedColumnKey="name" columns={columns} onSearch={onSearch} />
<Search qsConfig={QS_CONFIG} sortedColumnKey="name" columns={columns} onSearch={onSearch} />
);
search.find(searchTextInput).instance().value = 'test-321';
@ -39,7 +46,7 @@ describe('<Search />', () => {
];
const onSearch = jest.fn();
const wrapper = mountWithContexts(
<Search sortedColumnKey="name" columns={columns} onSearch={onSearch} />
<Search qsConfig={QS_CONFIG} sortedColumnKey="name" columns={columns} onSearch={onSearch} />
).find('Search');
expect(wrapper.state('isSearchDropdownOpen')).toEqual(false);
wrapper.instance().handleDropdownToggle(true);
@ -58,7 +65,7 @@ describe('<Search />', () => {
];
const onSearch = jest.fn();
const wrapper = mountWithContexts(
<Search sortedColumnKey="name" columns={columns} onSearch={onSearch} />
<Search qsConfig={QS_CONFIG} sortedColumnKey="name" columns={columns} onSearch={onSearch} />
).find('Search');
expect(wrapper.state('searchKey')).toEqual('name');
wrapper

View File

@ -41,6 +41,10 @@ exports[`<OrganizationAccess /> initially renders succesfully 1`] = `
items={Array []}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@ -91,6 +95,10 @@ exports[`<OrganizationAccess /> initially renders succesfully 1`] = `
items={Array []}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@ -157,6 +165,10 @@ exports[`<OrganizationAccess /> initially renders succesfully 1`] = `
}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@ -221,6 +233,10 @@ exports[`<OrganizationAccess /> initially renders succesfully 1`] = `
itemCount={0}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@ -278,6 +294,10 @@ exports[`<OrganizationAccess /> initially renders succesfully 1`] = `
}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@ -329,6 +349,10 @@ exports[`<OrganizationAccess /> initially renders succesfully 1`] = `
onRemoveAll={[Function]}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@ -353,6 +377,10 @@ exports[`<OrganizationAccess /> initially renders succesfully 1`] = `
onRemoveAll={[Function]}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@ -391,6 +419,10 @@ exports[`<OrganizationAccess /> initially renders succesfully 1`] = `
onRemoveAll={[Function]}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,

View File

@ -67,6 +67,10 @@ exports[`<OrganizationNotifications /> initially renders succesfully 1`] = `
}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@ -137,6 +141,10 @@ exports[`<OrganizationNotifications /> initially renders succesfully 1`] = `
}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@ -222,6 +230,10 @@ exports[`<OrganizationNotifications /> initially renders succesfully 1`] = `
}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@ -286,6 +298,10 @@ exports[`<OrganizationNotifications /> initially renders succesfully 1`] = `
itemCount={2}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@ -344,6 +360,10 @@ exports[`<OrganizationNotifications /> initially renders succesfully 1`] = `
}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@ -1713,6 +1733,10 @@ exports[`<OrganizationNotifications /> initially renders succesfully 1`] = `
onRemoveAll={[Function]}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@ -1737,6 +1761,10 @@ exports[`<OrganizationNotifications /> initially renders succesfully 1`] = `
onRemoveAll={[Function]}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@ -1775,6 +1803,10 @@ exports[`<OrganizationNotifications /> initially renders succesfully 1`] = `
onRemoveAll={[Function]}
qsConfig={
Object {
"dateFields": Array [
"modified",
"created",
],
"defaultParams": Object {
"order_by": "name",
"page": 1,

View File

@ -65,6 +65,7 @@ describe('<OrganizationTeams />', () => {
expect(list.prop('itemCount')).toEqual(listData.data.count);
expect(list.prop('qsConfig')).toEqual({
namespace: 'team',
dateFields: [ 'modified', 'created' ],
defaultParams: {
page: 1,
page_size: 5,

View File

@ -166,14 +166,20 @@ export function getQSConfig(
) {
if (!namespace) {
throw new Error('a QS namespace is required');
} else if (Object.keys(defaultParams).filter(key => key !== 'page' || key !== 'page_size' || key !== 'order_by').length > 0) {
throw new Error('Only page, page_size, and order_by allowed as default params for QS.')
} else if (
Object.keys(defaultParams).filter(
key => key !== 'page' && key !== 'page_size' && key !== 'order_by'
).length > 0
) {
throw new Error(
'Only page, page_size, and order_by allowed as default params for QS.'
);
}
return {
namespace,
defaultParams,
integerFields,
dateFields
dateFields,
};
}

View File

@ -78,6 +78,7 @@ describe('qs (qs.js)', () => {
test('should get default QS config object', () => {
expect(getQSConfig('organization')).toEqual({
namespace: 'organization',
dateFields: [ 'modified', 'created' ],
defaultParams: { page: 1, page_size: 5, order_by: 'name' },
integerFields: ['page', 'page_size'],
});
@ -94,6 +95,7 @@ describe('qs (qs.js)', () => {
};
expect(getQSConfig('inventory', defaults)).toEqual({
namespace: 'inventory',
dateFields: [ 'modified', 'created' ],
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
});