import { flushPromises, mount } from '@vue/test-utils';
|
|
import { describe, expect, it, vi } from 'vitest';
|
|
import FileCompareModal from '../FileCompareModal.vue';
|
|
vi.mock('../OnlyOfficeCompareEditor.vue', () => ({ default: { template: '<div data-test="compare-editor" />' } }));
|
vi.mock('@jnpf/ui/modal', async () => {
|
const { defineComponent, h } = await import('vue');
|
return {
|
BasicModal: defineComponent({
|
name: 'BasicModal',
|
props: {
|
open: Boolean,
|
defaultFullscreen: Boolean,
|
canFullscreen: Boolean,
|
closeFunc: { type: Function, default: undefined },
|
footer: { type: null, default: null },
|
closable: Boolean,
|
keyboard: Boolean,
|
},
|
setup(props, { slots }) {
|
return () => (props.open ? h('section', [slots.title?.(), slots.default?.()]) : null);
|
},
|
}),
|
};
|
});
|
|
describe('comparison window', () => {
|
it('uses the preview fullscreen shell and clears the editor when the session closes', async () => {
|
const wrapper = mount(FileCompareModal, {
|
global: {
|
stubs: {
|
'a-button': { template: '<button type="button"><slot /></button>' },
|
},
|
},
|
props: {
|
session: {
|
config: { document: { key: 'compare-test' } },
|
expiresAt: Date.now() + 60_000,
|
title: '历史版本 → 现行版本',
|
},
|
},
|
});
|
const modal = wrapper.findComponent({ name: 'BasicModal' });
|
expect(modal.props()).toMatchObject({ open: true, defaultFullscreen: true, canFullscreen: false, footer: null, closable: false, keyboard: true });
|
expect(wrapper.get('.dms-file-compare-modal__header').text()).toContain('历史版本 → 现行版本');
|
expect(wrapper.find('[data-test="compare-editor"]').exists()).toBe(true);
|
await wrapper.get('button[aria-label="关闭"]').trigger('click');
|
expect(wrapper.emitted('close')).toHaveLength(1);
|
// Escape delegates to the same close callback used by the preview shell.
|
await expect(modal.props('closeFunc')()).resolves.toBe(true);
|
expect(wrapper.emitted('close')).toHaveLength(2);
|
await wrapper.setProps({ session: undefined });
|
await flushPromises();
|
expect(wrapper.find('[data-test="compare-editor"]').exists()).toBe(false);
|
wrapper.unmount();
|
});
|
});
|