box-ui-elements-mlh
Version:
208 lines (196 loc) • 6.09 kB
JavaScript
import React from 'react';
import Instances from '../Instances';
// Templates
const template1 = {
id: 'template1',
templateKey: 'template1',
displayName: 'template1 title',
fields: [
{
id: 'field0',
type: 'string',
key: 'nodescfield',
displayName: 'No Description Field',
},
{
id: 'field1',
type: 'string',
key: 'stringfield',
displayName: 'String Field',
description: 'example of a string field',
},
{
id: 'field2',
type: 'string',
key: 'emptystring',
displayName: 'Empty String Field',
description: 'example of an empty string field',
},
{
id: 'field3',
type: 'float',
key: 'floatfield',
displayName: 'Float Field',
description: 'example of a float field',
},
{
id: 'field4',
type: 'float',
key: 'emptyfloat',
displayName: 'Empty Float Field',
description: 'example of an empty float field',
},
{
id: 'field5',
type: 'enum',
key: 'enumfield',
displayName: 'Enum Field',
description: 'example of a enum field',
options: [{ key: 'yes' }, { key: 'no' }],
},
{
id: 'field6',
type: 'enum',
key: 'emptyenumfield',
displayName: 'Empty Enum Field',
description: 'example of an empty enum field',
options: [{ key: 'yes' }, { key: 'no' }],
},
{
id: 'field7',
type: 'date',
key: 'datefield',
displayName: 'Date Field',
description: 'example of a date field',
},
{
id: 'field8',
type: 'date',
key: 'emptydatefield',
displayName: 'Empty Date Field',
description: 'example of an empty date field',
},
],
};
const template2 = {
id: 'template2',
templateKey: 'template2',
displayName: 'template2 title',
fields: [
{
id: 'field0',
type: 'string',
key: 'nodescfield',
displayName: 'No Description Field',
},
{
id: 'field1',
type: 'string',
key: 'stringfield',
displayName: 'String Field',
description: 'example of a string field',
},
{
id: 'field2',
type: 'string',
key: 'emptystring',
displayName: 'Empty String Field',
description: 'example of an empty string field',
},
{
id: 'field3',
type: 'float',
key: 'floatfield',
displayName: 'Float Field',
description: 'example of a float field',
},
{
id: 'field4',
type: 'float',
key: 'emptyfloat',
displayName: 'Empty Float Field',
description: 'example of an empty float field',
},
{
id: 'field5',
type: 'enum',
key: 'enumfield',
displayName: 'Enum Field',
description: 'example of a enum field',
options: [{ key: 'yes' }, { key: 'no' }],
},
{
id: 'field6',
type: 'enum',
key: 'emptyenumfield',
displayName: 'Empty Enum Field',
description: 'example of an empty enum field',
options: [{ key: 'yes' }, { key: 'no' }],
},
{
id: 'field7',
type: 'date',
key: 'datefield',
displayName: 'Date Field',
description: 'example of a date field',
},
{
id: 'field8',
type: 'date',
key: 'emptydatefield',
displayName: 'Empty Date Field',
description: 'example of an empty date field',
},
],
};
// Instances with templates metadata
const editor1 = {
instance: {
canEdit: true,
id: 'editor1',
data: {
stringfield: 'some string',
floatfield: 1,
enumfield: 'yes',
datefield: '2018-06-20T00:00:00.000Z',
},
},
template: template1,
};
const editor2 = {
instance: {
canEdit: false,
id: 'editor2',
data: {
stringfield: 'some string',
floatfield: 1,
enumfield: 'yes',
datefield: '2018-06-20T00:00:00.000Z',
},
},
template: template2,
isDirty: true,
};
// State of editors from server
const editorsOnServer = [editor1, editor2];
describe('features/metadata-editor-editor/Instances', () => {
test('should correctly render editors', () => {
const wrapper = shallow(<Instances editors={editorsOnServer} />);
expect(wrapper).toMatchSnapshot();
});
test('should correctly render instances with editors and a selected template', () => {
const wrapper = shallow(<Instances editors={editorsOnServer} selectedTemplateKey="template1" />);
const selectedTemplate = wrapper.find('Instance').at(0);
expect(selectedTemplate.prop('isOpen')).toBe(true);
expect(selectedTemplate.prop('id')).toBe('editor1');
});
test('should correctly render instances with a selected template and multiple editors', () => {
const wrapper = shallow(<Instances editors={editorsOnServer} selectedTemplateKey="template2" />);
const selectedTemplate = wrapper.find('Instance').at(1);
expect(selectedTemplate.prop('isOpen')).toBe(true);
expect(selectedTemplate.prop('id')).toBe('editor2');
const unselectedTemplate = wrapper.find('Instance').at(0);
expect(unselectedTemplate.prop('isOpen')).toBe(false);
expect(unselectedTemplate.prop('id')).toBe('editor1');
});
});