diff --git a/test/sortable.e2e.multi.spec.js b/test/sortable.e2e.multi.spec.js index a9cebae..7966f98 100644 --- a/test/sortable.e2e.multi.spec.js +++ b/test/sortable.e2e.multi.spec.js @@ -610,6 +610,82 @@ describe('uiSortable', function() { }); }); + it('should properly set ui.item.sortable.droptargetModel when using data-ng-model', function() { + inject(function($compile, $rootScope) { + var elementTop, elementBottom, updateCallbackExpectations; + elementTop = $compile('')($rootScope); + elementBottom = $compile('')($rootScope); + $rootScope.$apply(function() { + $rootScope.itemsTop = ['Top One', 'Top Two', 'Top Three']; + $rootScope.itemsBottom = ['Bottom One', 'Bottom Two', 'Bottom Three']; + $rootScope.opts = { + connectWith: '.cross-sortable', + update: function(e, ui) { + if (ui.item.scope() && + (typeof ui.item.scope().item === 'string') && + ui.item.scope().item.indexOf('Two') >= 0) { + ui.item.sortable.cancel(); + } + updateCallbackExpectations(ui.item.sortable); + } + }; + }); + + host.append(elementTop).append(elementBottom).append('
'); + + var li1 = elementTop.find(':eq(1)'); + var li2 = elementBottom.find(':eq(0)'); + updateCallbackExpectations = function(uiItemSortable) { + expect(uiItemSortable.droptargetModel).toBe($rootScope.itemsBottom); + }; + simulateElementDrag(li1, li2, { place: 'below', extradx: -20, extrady: -10 }); + expect($rootScope.itemsTop).toEqual(['Top One', 'Top Two', 'Top Three']); + expect($rootScope.itemsBottom).toEqual(['Bottom One', 'Bottom Two', 'Bottom Three']); + expect($rootScope.itemsTop).toEqual(listContent(elementTop)); + expect($rootScope.itemsBottom).toEqual(listContent(elementBottom)); + updateCallbackExpectations = undefined; + + li1 = elementBottom.find(':eq(1)'); + li2 = elementTop.find(':eq(1)'); + updateCallbackExpectations = function(uiItemSortable) { + expect(uiItemSortable.droptargetModel).toBe($rootScope.itemsTop); + }; + simulateElementDrag(li1, li2, { place: 'above', extradx: -20, extrady: -10 }); + expect($rootScope.itemsTop).toEqual(['Top One', 'Top Two', 'Top Three']); + expect($rootScope.itemsBottom).toEqual(['Bottom One', 'Bottom Two', 'Bottom Three']); + expect($rootScope.itemsTop).toEqual(listContent(elementTop)); + expect($rootScope.itemsBottom).toEqual(listContent(elementBottom)); + updateCallbackExpectations = undefined; + + li1 = elementTop.find(':eq(0)'); + li2 = elementBottom.find(':eq(0)'); + updateCallbackExpectations = function(uiItemSortable) { + expect(uiItemSortable.droptargetModel).toBe($rootScope.itemsBottom); + }; + simulateElementDrag(li1, li2, 'below'); + expect($rootScope.itemsTop).toEqual(['Top Two', 'Top Three']); + expect($rootScope.itemsBottom).toEqual(['Bottom One', 'Top One', 'Bottom Two', 'Bottom Three']); + expect($rootScope.itemsTop).toEqual(listContent(elementTop)); + expect($rootScope.itemsBottom).toEqual(listContent(elementBottom)); + updateCallbackExpectations = undefined; + + li1 = elementBottom.find(':eq(1)'); + li2 = elementTop.find(':eq(1)'); + updateCallbackExpectations = function(uiItemSortable) { + expect(uiItemSortable.droptargetModel).toBe($rootScope.itemsTop); + }; + simulateElementDrag(li1, li2, { place: 'above', extradx: -20, extrady: -10 }); + expect($rootScope.itemsTop).toEqual(['Top Two', 'Top One', 'Top Three']); + expect($rootScope.itemsBottom).toEqual(['Bottom One', 'Bottom Two', 'Bottom Three']); + expect($rootScope.itemsTop).toEqual(listContent(elementTop)); + expect($rootScope.itemsBottom).toEqual(listContent(elementBottom)); + updateCallbackExpectations = undefined; + + $(elementTop).remove(); + $(elementBottom).remove(); + }); + }); + it('should properly free ui.item.sortable object', function() { inject(function($compile, $rootScope) { var elementTop, elementBottom, uiItem, uiItemSortable_Destroy;