/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*
* Modifications Copyright OpenSearch Contributors. See
* GitHub history for details.
*/
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import React, { ReactChild } from 'react';
import { mount } from 'enzyme';
import { OuiContext } from '../context';
import { OuiI18n, useOuiI18n } from './i18n';
/* eslint-disable local/i18n */
describe('OuiI18n', () => {
describe('default rendering', () => {
describe('rendering to dom', () => {
it('renders a basic string to the dom', () => {
const component = mount(
);
expect(component).toMatchSnapshot();
});
it('renders a string with placeholders to the dom', () => {
const component = mount(
);
expect(component).toMatchSnapshot();
});
it('calls a function and renders the result to the dom', () => {
const values = { type: 'callback', special: 'values' };
const renderCallback = jest.fn(
({ type, special }) => `This is a ${type} with ${special}.`
);
const component = mount(
);
expect(component).toMatchSnapshot();
expect(renderCallback).toHaveBeenCalledWith(values);
});
it('renders when value is null', () => {
const component = mount(
);
expect(component).toMatchSnapshot();
});
});
describe('render prop with single token', () => {
it('renders render prop result to the dom', () => {
const component = mount(
{(result: ReactChild) => `A nifty thing: ${result}`}
);
expect(component).toMatchSnapshot();
});
it('renders render prop result with placeholders to the dom', () => {
const component = mount(
{(result: ReactChild) => `Here's something cool: ${result}`}
);
expect(component).toMatchSnapshot();
});
it('calls a function and renders render prop result to the dom', () => {
const values = { type: 'callback', special: 'values' };
const renderCallback = jest.fn(
({ type, special }) => `This is a ${type} with ${special}.`
);
const component = mount(
{(result: string) => `Here's something neat: ${result}`}
);
expect(component).toMatchSnapshot();
expect(renderCallback).toHaveBeenCalledWith(values);
});
});
describe('render prop with multiple tokens', () => {
it('renders render prop result to the dom', () => {
const component = mount(
{([one, two]: ReactChild[]) => (
{one} {two}
)}
);
expect(component).toMatchSnapshot();
});
});
});
describe('reading values from context', () => {
describe('rendering to dom', () => {
it('renders a mapped basic string to the dom', () => {
const component = mount(
);
expect(component).toMatchSnapshot();
});
it('renders a mapped string with placeholders to the dom', () => {
const component = mount(
);
expect(component).toMatchSnapshot();
});
it('calls a mapped function and renders the result to the dom', () => {
const values = { type: 'callback', special: 'values' };
const renderCallback = jest.fn(
({ type, special }) => `This is a mapped ${type} with ${special}.`
);
const component = mount(
''} values={values} />
);
expect(component).toMatchSnapshot();
expect(renderCallback).toHaveBeenCalledWith(values);
});
});
describe('render prop with single token', () => {
it('renders mapped render prop result to the dom', () => {
const component = mount(
{(result: ReactChild) => `A nifty thing: ${result}`}
);
expect(component).toMatchSnapshot();
});
it('renders mapped render prop result with placeholders to the dom', () => {
const component = mount(
{(result: ReactChild) => `Here's something cool: ${result}`}
);
expect(component).toMatchSnapshot();
});
it('calls a mapped function and renders render prop result to the dom', () => {
const values = { type: 'callback', special: 'values' };
const renderCallback = jest.fn(
({ type, special }) => `This is a ${type} with ${special}.`
);
const component = mount(
{(result: ReactChild) => `Here's something neat: ${result}`}
);
expect(component).toMatchSnapshot();
expect(renderCallback).toHaveBeenCalledWith(values);
});
});
describe('render prop with multiple tokens', () => {
it('renders mapped render prop result to the dom', () => {
const component = mount(
{([one, two]: ReactChild[]) => (
{one} {two}
)}
);
expect(component).toMatchSnapshot();
});
});
describe('mappingFunc', () => {
it('calls the mapping function with the source string', () => {
const component = mount(
value.toUpperCase(),
}}>
{(one: string) => {one}
}
);
expect(component).toMatchSnapshot();
});
});
});
describe('useOuiI18n', () => {
describe('unmapped', () => {
it('handles single token without values', () => {
const Component = () => {
const value = useOuiI18n('token', 'placeholder');
return
{value}
;
};
const component = mount();
expect(component).toMatchSnapshot();
});
it('handles single token with values', () => {
const Component = () => {
const value = useOuiI18n('myToken', 'first {first}, then {second}', {
first: 'apples',
second: 'aardvarks',
});
return {value}
;
};
const component = mount();
expect(component).toMatchSnapshot();
});
it('handles multiple tokens', () => {
const Component = () => {
const [first, second] = useOuiI18n(
['test1', 'test2'],
['the first placeholder', 'the second placeholder']
);
return (
{first}
{second}
);
};
const component = mount();
expect(component).toMatchSnapshot();
});
it('calls a function and renders the result to the dom', () => {
const values = { type: 'callback', special: 'values' };
const renderCallback = jest.fn(({ type, special }) => (
This is a {type} with {special}.
));
const Component = () => (
{useOuiI18n('test', renderCallback, values)}
);
const component = mount();
expect(component).toMatchSnapshot();
expect(renderCallback).toHaveBeenCalledWith(values);
});
});
});
describe('mapped tokens', () => {
it('handles single token without values', () => {
const Component = () => {
const value = useOuiI18n('token', 'placeholder');
return {value}
;
};
const component = mount(
);
expect(component).toMatchSnapshot();
});
it('handles single token with values', () => {
const Component = () => {
const value = useOuiI18n('myToken', 'first {first}, then {second}', {
first: 'apples',
second: 'aardvarks',
});
return {value}
;
};
const component = mount(
);
expect(component).toMatchSnapshot();
});
it('handles multiple tokens', () => {
const Component = () => {
const [first, second] = useOuiI18n(
['test1', 'test2'],
['the first placeholder', 'the second placeholder']
);
return (
{first}
{second}
);
};
const component = mount(
);
expect(component).toMatchSnapshot();
});
describe('mappingFunc', () => {
it('calls the mapping function with the source string', () => {
const Component = () => {
const value = useOuiI18n('test1', 'placeholder');
return {value}
;
};
const component = mount(
value.toUpperCase(),
}}>
);
expect(component).toMatchSnapshot();
});
});
});
});