import './MatchMediaMock';
import { ControlElement, NOT_APPLICABLE } from '@json-forms/core';
import { JsonForms } from '@json-forms/react';
import Enzyme, { mount, ReactWrapper } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import React from 'react';
import {
materialEnumArrayRendererTester,
MaterialEnumArrayRenderer
} from '../../src';
const MaterialEnumArrayRendererRegistration = {
tester: materialEnumArrayRendererTester,
renderer: MaterialEnumArrayRenderer
};
const data = ['bar'];
const oneOfSchema = {
type: 'array',
items: {
oneOf: [
{
const: 'foo',
title: 'My Title'
},
{
const: 'bar'
}
]
},
uniqueItems: true
};
const enumSchema = {
type: 'array',
items: {
type: 'string',
enum: ['a', 'b', 'c']
},
uniqueItems: true
};
const uischema: ControlElement = {
type: 'Control',
scope: '#'
};
Enzyme.configure({ adapter: new Adapter() });
describe('EnumArrayControl tester', () => {
test('should fail', () => {
expect(
materialEnumArrayRendererTester(uischema, {
type: 'array',
items: {}
})
).toBe(NOT_APPLICABLE);
expect(
materialEnumArrayRendererTester(uischema, {
type: 'array',
items: {
anyOf: []
}
})
).toBe(NOT_APPLICABLE);
});
it('should succeed for schema with enum items', () => {
expect(materialEnumArrayRendererTester(uischema, enumSchema)).toBe(5);
});
});
describe('EnumArrayControl', () => {
let wrapper: ReactWrapper;
afterEach(() => {
wrapper.unmount();
});
test('oneOf items - renders', () => {
wrapper = mount(
);
const inputs = wrapper.find('input');
expect(inputs).toHaveLength(2);
});
test('oneOf items - renders with data', () => {
wrapper = mount(
);
const inputs = wrapper.find('input');
expect(inputs.first().props().checked).toBeFalsy();
expect(inputs.last().props().checked).toBeTruthy();
});
test('oneOf items - renders labels for options', () => {
wrapper = mount(
);
const labels = wrapper.find('label');
expect(labels.first().text()).toBe('My Title');
expect(labels.last().text()).toBe('Bar');
});
test('oneOf items - updates data', () => {
let myData = undefined;
wrapper = mount(
{
myData = data;
}}
/>
);
const input = wrapper.find('input').first();
input.simulate('change', { target: { checked: true } });
expect(myData).toStrictEqual(['foo']);
});
test('enum items - renders', () => {
wrapper = mount(
);
const inputs = wrapper.find('input');
expect(inputs).toHaveLength(3);
});
test('enum items - renders with data', () => {
wrapper = mount(
);
const inputs = wrapper.find('input');
expect(inputs.at(0).props().checked).toBeFalsy();
expect(inputs.at(1).props().checked).toBeTruthy();
expect(inputs.at(2).props().checked).toBeFalsy();
});
test('enum items - renders labels for options', () => {
wrapper = mount(
);
const labels = wrapper.find('label');
expect(labels.at(0).text()).toBe('A');
expect(labels.at(1).text()).toBe('B');
expect(labels.at(2).text()).toBe('C');
});
test('enum items - updates data', () => {
let myData = undefined;
wrapper = mount(
{
myData = data;
}}
/>
);
const input = wrapper.find('input').first();
input.simulate('change', { target: { checked: true } });
expect(myData).toStrictEqual(['a']);
});
});