drag.spec.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import Vue from 'vue'
  2. import { mount } from '@vue/test-utils'
  3. import { Tree, VueTreeList } from '@/index'
  4. describe('Drag', () => {
  5. let wrapper
  6. beforeEach(() => {
  7. const tree = new Tree([
  8. {
  9. name: 'Node 1',
  10. id: 't1',
  11. pid: 0,
  12. children: [
  13. {
  14. name: 'Node 1-1',
  15. id: 't11',
  16. isLeaf: true,
  17. pid: 't1'
  18. },
  19. {
  20. name: 'Node 1-2',
  21. id: 't12',
  22. pid: 't1'
  23. }
  24. ]
  25. },
  26. {
  27. name: 'Node 2',
  28. id: 't2',
  29. pid: 0
  30. },
  31. {
  32. name: 'Node 3',
  33. id: 't3',
  34. pid: 0
  35. }
  36. ])
  37. wrapper = mount(VueTreeList, { propsData: { model: new Tree([]) } })
  38. wrapper.setProps({ model: tree })
  39. })
  40. it('drag before', done => {
  41. const $tree2 = wrapper.find('#t2 .vtl-node-main')
  42. const $tree1Up = wrapper.find('#t1 .vtl-up')
  43. $tree2.trigger('dragstart', { dataTransfer: { setData: () => {} } })
  44. $tree1Up.trigger('drop')
  45. Vue.nextTick(() => {
  46. expect(wrapper.find('.vtl-node').attributes('id')).toBe('t2')
  47. done()
  48. })
  49. })
  50. it('drag after', done => {
  51. const $tree3 = wrapper.find('#t3 .vtl-node-main')
  52. const $tree1Bottom = wrapper.find('#t1 .vtl-bottom')
  53. $tree3.trigger('dragstart', { dataTransfer: { setData: () => {} } })
  54. $tree1Bottom.trigger('drop')
  55. Vue.nextTick(() => {
  56. expect(
  57. wrapper
  58. .findAll('.vtl-tree-node')
  59. .at(2)
  60. .attributes('id')
  61. ).toBe('t3')
  62. done()
  63. })
  64. })
  65. it('drag into', done => {
  66. const $tree3 = wrapper.find('#t3 .vtl-node-main')
  67. const $tree1 = wrapper.find('#t1 .vtl-node-main')
  68. $tree3.trigger('dragstart', { dataTransfer: { setData: () => {} } })
  69. $tree1.trigger('drop')
  70. Vue.nextTick(() => {
  71. expect(wrapper.find('#t1 + .vtl-tree-margin .vtl-node').attributes('id')).toBe('t3')
  72. done()
  73. })
  74. })
  75. it('cannot drag ancestor into child', done => {
  76. const snapshot = wrapper.html()
  77. const $tree1 = wrapper.find('#t1 .vtl-node-main')
  78. const $tree1Child = wrapper.find('#t12 .vtl-node-main')
  79. $tree1.trigger('dragstart', { dataTransfer: { setData: () => {} } })
  80. $tree1Child.trigger('drop')
  81. Vue.nextTick(() => {
  82. expect(wrapper.html()).toBe(snapshot)
  83. done()
  84. })
  85. })
  86. })