Alexandre Bodin 8ecc36cfa3 Init refactoring of content manager configuration routes
Signed-off-by: Alexandre Bodin <bodin.alex@gmail.com>
2020-11-02 19:41:42 +01:00

192 lines
4.5 KiB
JavaScript

'use strict';
const settingsService = require('../settings');
describe('Configuration settings service', () => {
describe('createDefaultSettings', () => {
test('Consistent defaults', async () => {
const schema = {
attributes: {},
};
const settings = await settingsService.createDefaultSettings(schema);
expect(settings).toMatchInlineSnapshot(`
Object {
"bulkable": true,
"defaultSortBy": "id",
"defaultSortOrder": "ASC",
"filterable": true,
"mainField": "id",
"pageSize": 10,
"searchable": true,
}
`);
});
test('uses id as mainField by default', async () => {
const schema = {
attributes: {},
};
const settings = await settingsService.createDefaultSettings(schema);
expect(settings).toMatchObject({
mainField: 'id',
defaultSortBy: 'id',
});
});
test('uses first string attribute that is not id', async () => {
const schema = {
attributes: {
id: {
type: 'string',
},
title: {
type: 'string',
},
},
};
const settings = await settingsService.createDefaultSettings(schema);
expect(settings).toMatchObject({
mainField: 'title',
defaultSortBy: 'title',
});
});
test('uses overrides configured in schema config', async () => {
const schema = {
attributes: {
id: {
type: 'string',
},
title: {
type: 'string',
},
},
config: {
settings: {
searchable: false,
filterable: false,
bulkable: false,
},
},
};
const settings = await settingsService.createDefaultSettings(schema);
expect(settings).toMatchObject({
searchable: false,
filterable: false,
bulkable: false,
});
});
test('Overrides cannot add new properties', async () => {
const schema = {
attributes: {
id: {
type: 'string',
},
title: {
type: 'string',
},
},
config: {
settings: {
searchable: false,
filterable: false,
bulkable: false,
newProperty: 'test',
},
},
};
const settings = await settingsService.createDefaultSettings(schema);
expect(settings).not.toHaveProperty('newProperty');
expect(settings).toMatchObject({
searchable: false,
filterable: false,
bulkable: false,
});
});
});
describe('syncSettings', () => {
test('Creates default setting if empty', async () => {
const schema = { attributes: {} };
const existingConfig = {};
const spyFn = jest.spyOn(settingsService, 'createDefaultSettings');
await settingsService.syncSettings(existingConfig, schema);
expect(spyFn).toHaveBeenCalledWith(schema);
spyFn.mockRestore();
});
test('Reuses the existing config', async () => {
const schema = { attributes: {} };
const existingConfig = {
settings: {
searchable: false,
bulkable: true,
},
};
const settings = await settingsService.syncSettings(existingConfig, schema);
expect(settings).toMatchObject({
mainField: 'id',
defaultSortBy: 'id',
searchable: false,
bulkable: true,
});
});
test('Reset mainField if not sortable anymore', async () => {
const schema = { attributes: {} };
const existingConfig = {
settings: {
mainField: 'id',
searchable: false,
bulkable: true,
},
};
const settings = await settingsService.syncSettings(existingConfig, schema);
expect(settings).toMatchObject({
mainField: 'id',
defaultSortBy: 'id',
searchable: false,
bulkable: true,
});
});
test('Reset defaultSortBy if not sortable anymore', async () => {
const schema = { attributes: {} };
const existingConfig = {
settings: {
mainField: 'id',
searchable: false,
bulkable: true,
},
};
const settings = await settingsService.syncSettings(existingConfig, schema);
expect(settings).toMatchObject({
mainField: 'id',
defaultSortBy: 'id',
searchable: false,
bulkable: true,
});
});
});
});