/**
* @jest-environment jsdom
*/
import { render } from '@testing-library/react'
import { RJT_CONFIG, Serializable } from '../../core'
import { RJTProvider } from '../context'
import { Inflater, mapSDUI } from '../Inflater'
const config: RJT_CONFIG = {
components: {
Simple: Serializable('Simple', (props) => ),
Complex: Serializable('Complex', (props) =>
)
},
actions: {
handlePress: jest.fn()
},
constants: {
windowWidth: 100,
windowHeight: 200
}
}
describe('Inflater', () => {
afterEach(() => {
jest.resetAllMocks()
})
it('inflates simple Component', () => {
const { asFragment } = render(
)
expect(asFragment()).toMatchSnapshot()
})
it('inflates complex Component', () => {
const { asFragment } = render(
)
expect(asFragment()).toMatchSnapshot()
})
it('inflates fragment', () => {
const { asFragment } = render(
)
expect(asFragment()).toMatchSnapshot()
})
it('inflates props Action', () => {
const element = mapSDUI(
{
type: '__RJT_COMPONENT__',
name: 'Simple',
props: {
onclick: {
type: '__RJT_ACTION__',
name: 'handlePress',
params: ['arg1']
}
}
},
config
)
element.props.onclick()
expect(config.actions.handlePress).toBeCalledWith('arg1')
const { asFragment } = render(element)
expect(asFragment()).toMatchSnapshot()
})
it('inflates child Action', () => {
const element = mapSDUI(
{
type: '__RJT_COMPONENT__',
name: 'Complex',
props: {
children: {
type: '__RJT_ACTION__',
name: 'handlePress',
params: ['args1', 'args2']
}
}
},
config
)
element.props.children()
expect(config.actions.handlePress).toBeCalledWith('args1', 'args2')
const { asFragment } = render(element)
expect(asFragment()).toMatchSnapshot()
})
it('inflates constants', () => {
const element = mapSDUI(
{
type: '__RJT_COMPONENT__',
name: 'Complex',
props: {
height: {
type: '__RJT_CONSTANT__',
name: 'windowHeight'
},
children: {
type: '__RJT_CONSTANT__',
name: 'windowWidth'
}
}
},
config
)
const { asFragment } = render(element)
expect(asFragment()).toMatchSnapshot()
})
it('inflates client calculation', () => {
const element = mapSDUI(
{
type: '__RJT_COMPONENT__',
name: 'Simple',
props: {
height: {
type: '__RJT_OPERATION__',
operation: '+',
operands: [
{
type: '__RJT_CONSTANT__',
name: 'windowHeight'
},
20
]
}
}
},
config
)
const { asFragment } = render(element)
expect(element.props.height).toBe(config.constants.windowHeight as number + 20)
expect(asFragment()).toMatchSnapshot()
})
})