amis2/packages/amis/__tests__/renderers/Steps.test.tsx

270 lines
5.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 组件名称Steps 步骤条
* 单测内容:
1. 基础使用
2. 自定义状态 status
3. 标签位置 labelPlacement
4. 点状步骤条 progressDot
5. 竖向排列 mode vertical
6. 上下文数据 name
*/
import React from 'react';
import {fireEvent, render, waitFor} from '@testing-library/react';
import '../../src';
import {render as amisRender} from '../../src';
import {makeEnv, wait} from '../helper';
test('Renderer:steps', () => {
const schema = {
type: 'steps',
value: 1,
steps: [
{
title: 'First',
subTitle: 'this is subTitle',
description: 'this is description',
icon: 'close',
className: 'className',
value: 1
},
{
title: 'Second'
},
{
title: 'Last'
}
]
};
const {container, rerender} = render(amisRender(schema, {}, makeEnv({})));
expect(container).toMatchSnapshot();
schema.steps[0].value = undefined;
schema.steps[1].value = 1;
rerender(amisRender(schema, {}, makeEnv({})));
expect(container).toMatchSnapshot();
});
test('Renderer:steps status', async () => {
const {container} = render(
amisRender(
{
type: 'steps',
className: 'className',
status: {
a: 'finish',
b: 'error',
c: 'wait'
},
steps: [
{
title: 'First',
value: 'a'
},
{
title: 'Second',
subTitle: 'this is subTitle',
description: 'this is description',
value: 'b'
},
{
title: 'Third',
value: 'c'
}
]
},
{},
makeEnv()
)
);
const steps = container.querySelectorAll('.cxd-Steps .cxd-StepsItem');
expect(steps!.length).toBe(3);
expect(steps[0]).toHaveClass('is-finish');
expect(steps[1]).toHaveClass('is-error');
expect(steps[2]).toHaveClass('is-wait');
expect(container).toMatchSnapshot();
});
test('Renderer:steps labelPlacement', async () => {
const {container} = render(
amisRender(
{
type: 'steps',
labelPlacement: 'vertical',
className: 'className',
steps: [
{
title: 'First',
value: 'a'
},
{
title: 'Second',
subTitle: 'this is subTitle',
description: 'this is description',
value: 'b'
},
{
title: 'Third',
value: 'c'
}
]
},
{},
makeEnv()
)
);
expect(container.querySelector('.cxd-Steps')).toHaveClass(
'cxd-Steps--Placement-vertical'
);
expect(container).toMatchSnapshot();
});
test('Renderer:steps progressDot', async () => {
const {container} = render(
amisRender(
{
type: 'steps',
className: 'className',
progressDot: true,
steps: [
{
title: 'First',
value: 'a'
},
{
title: 'Second',
subTitle: 'this is subTitle',
description: 'this is description',
value: 'b'
},
{
title: 'Third',
value: 'c'
}
]
},
{},
makeEnv()
)
);
expect(container.querySelector('.cxd-Steps')).toHaveClass(
'cxd-Steps--ProgressDot'
);
expect(container).toMatchSnapshot();
});
test('Renderer:steps with vertical mode', async () => {
const {container} = render(
amisRender({
type: 'steps',
className: 'className',
progressDot: true,
mode: 'vertical',
steps: [
{
title: 'First',
value: 'a'
},
{
title: 'Second',
subTitle: 'this is subTitle',
description: 'this is description',
value: 'b'
},
{
title: 'Third',
value: 'c'
}
]
})
);
expect(container.querySelector('.cxd-Steps')).toHaveClass(
'cxd-Steps--vertical'
);
expect(container).toMatchSnapshot();
});
test('Renderer:steps with name', async () => {
const {container} = render(
amisRender({
type: 'page',
data: {
step: 0,
status: 'error',
secondTitle: 'Second Test',
desc: 'very good idea',
what: 'what is this'
},
body: [
{
type: 'input-number',
name: 'step'
},
{
type: 'steps',
name: 'step',
status: '${status}',
steps: [
{
title: 'First',
subTitle: 'this is subTitle',
description: '${desc}'
},
{
title: '${secondTitle}'
},
{
title: 'Last',
subTitle: '${what}'
}
]
}
]
})
);
const input = container.querySelector('.cxd-Number input');
const setNum = async (num: number = 0) => {
fireEvent.change(input!, {
target: {value: num}
});
await wait(300);
};
const steps = container.querySelectorAll('.cxd-Steps .cxd-StepsItem');
expect(steps!.length).toBe(3);
expect(steps[0]).toHaveClass('is-error');
expect(
steps[0].querySelector('.cxd-StepsItem-description')
).toHaveTextContent('very good idea');
await setNum(1);
expect(steps[0]).toHaveClass('is-finish');
expect(steps[1]).toHaveClass('is-error');
expect(steps[2]).toHaveClass('is-wait');
expect(steps[1].querySelector('.cxd-StepsItem-title')).toHaveTextContent(
'Second Test'
);
await setNum(2);
expect(steps[0]).toHaveClass('is-finish');
expect(steps[1]).toHaveClass('is-finish');
expect(steps[2]).toHaveClass('is-error');
expect(steps[2].querySelector('.cxd-StepsItem-subTitle')).toHaveTextContent(
'what is this'
);
await setNum(3);
expect(steps[0]).toHaveClass('is-finish');
expect(steps[1]).toHaveClass('is-finish');
expect(steps[2]).toHaveClass('is-finish');
});