刘光辉
6 小时以前 cf11e63b659afcc9792ab3e395f1b45d844431a8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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();
  });
});