Skip to content
This repository was archived by the owner on Sep 8, 2020. It is now read-only.

Commit 9235467

Browse files
committed
Merge pull request #302 from thgreasi/testForPR295CrossScope
test: test droptargetModel when sorting between different scopes
2 parents 60b1724 + d33d7c9 commit 9235467

File tree

1 file changed

+84
-2
lines changed

1 file changed

+84
-2
lines changed

test/sortable.e2e.multi.spec.js

Lines changed: 84 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ describe('uiSortable', function() {
9898
expect(itemsTop).toEqual(listContent(elementTop));
9999
expect(itemsBottom).toEqual(listContent(elementBottom));
100100

101-
$(elementTop).remove();
102-
$(elementBottom).remove();
101+
$(wrapperBottom).remove();
102+
$(wrapperTop).remove();
103103
});
104104
});
105105

@@ -725,6 +725,88 @@ describe('uiSortable', function() {
725725
});
726726
});
727727

728+
it('should properly set ui.item.sortable.droptargetModel when sorting between different scopes', function() {
729+
inject(function($compile, $rootScope) {
730+
var elementTop, elementBottom,
731+
wrapperTop, wrapperBottom,
732+
itemsTop, itemsBottom,
733+
updateCallbackExpectations;
734+
wrapperTop = $compile('<div ng-controller="dummyController"><ul ui-sortable="opts" class="cross-sortable" ng-model="itemsTop"><li ng-repeat="item in itemsTop" id="s-top-{{$index}}">{{ item }}</li></ul></div>')($rootScope);
735+
wrapperBottom = $compile('<div ng-controller="dummyController"><ul ui-sortable="opts" class="cross-sortable" ng-model="itemsBottom"><li ng-repeat="item in itemsBottom" id="s-bottom-{{$index}}">{{ item }}</li></ul></div>')($rootScope);
736+
737+
host.append(wrapperTop).append(wrapperBottom).append('<div class="clear"></div>');
738+
$rootScope.$apply(function() {
739+
wrapperTop.scope().itemsTop = itemsTop = ['Top One', 'Top Two', 'Top Three'];
740+
wrapperBottom.scope().itemsBottom = itemsBottom = ['Bottom One', 'Bottom Two', 'Bottom Three'];
741+
$rootScope.opts = {
742+
connectWith: '.cross-sortable',
743+
update: function(e, ui) {
744+
if (ui.item.scope() &&
745+
(typeof ui.item.scope().item === 'string') &&
746+
ui.item.scope().item.indexOf('Two') >= 0) {
747+
ui.item.sortable.cancel();
748+
}
749+
updateCallbackExpectations(ui.item.sortable);
750+
}
751+
};
752+
});
753+
754+
elementTop = wrapperTop.find('> [ui-sortable]');
755+
elementBottom = wrapperBottom.find('> [ui-sortable]');
756+
757+
var li1 = elementTop.find(':eq(1)');
758+
var li2 = elementBottom.find(':eq(0)');
759+
updateCallbackExpectations = function(uiItemSortable) {
760+
expect(uiItemSortable.droptargetModel).toBe(itemsBottom);
761+
};
762+
simulateElementDrag(li1, li2, { place: 'below', extradx: -20, extrady: -10 });
763+
expect(itemsTop).toEqual(['Top One', 'Top Two', 'Top Three']);
764+
expect(itemsBottom).toEqual(['Bottom One', 'Bottom Two', 'Bottom Three']);
765+
expect(itemsTop).toEqual(listContent(elementTop));
766+
expect(itemsBottom).toEqual(listContent(elementBottom));
767+
updateCallbackExpectations = undefined;
768+
769+
li1 = elementBottom.find(':eq(1)');
770+
li2 = elementTop.find(':eq(1)');
771+
updateCallbackExpectations = function(uiItemSortable) {
772+
expect(uiItemSortable.droptargetModel).toBe(itemsTop);
773+
};
774+
simulateElementDrag(li1, li2, { place: 'above', extradx: -20, extrady: -10 });
775+
expect(itemsTop).toEqual(['Top One', 'Top Two', 'Top Three']);
776+
expect(itemsBottom).toEqual(['Bottom One', 'Bottom Two', 'Bottom Three']);
777+
expect(itemsTop).toEqual(listContent(elementTop));
778+
expect(itemsBottom).toEqual(listContent(elementBottom));
779+
updateCallbackExpectations = undefined;
780+
781+
li1 = elementTop.find(':eq(0)');
782+
li2 = elementBottom.find(':eq(0)');
783+
updateCallbackExpectations = function(uiItemSortable) {
784+
expect(uiItemSortable.droptargetModel).toBe(itemsBottom);
785+
};
786+
simulateElementDrag(li1, li2, 'below');
787+
expect(itemsTop).toEqual(['Top Two', 'Top Three']);
788+
expect(itemsBottom).toEqual(['Bottom One', 'Top One', 'Bottom Two', 'Bottom Three']);
789+
expect(itemsTop).toEqual(listContent(elementTop));
790+
expect(itemsBottom).toEqual(listContent(elementBottom));
791+
updateCallbackExpectations = undefined;
792+
793+
li1 = elementBottom.find(':eq(1)');
794+
li2 = elementTop.find(':eq(1)');
795+
updateCallbackExpectations = function(uiItemSortable) {
796+
expect(uiItemSortable.droptargetModel).toBe(itemsTop);
797+
};
798+
simulateElementDrag(li1, li2, { place: 'above', extradx: -20, extrady: -10 });
799+
expect(itemsTop).toEqual(['Top Two', 'Top One', 'Top Three']);
800+
expect(itemsBottom).toEqual(['Bottom One', 'Bottom Two', 'Bottom Three']);
801+
expect(itemsTop).toEqual(listContent(elementTop));
802+
expect(itemsBottom).toEqual(listContent(elementBottom));
803+
updateCallbackExpectations = undefined;
804+
805+
$(wrapperTop).remove();
806+
$(wrapperBottom).remove();
807+
});
808+
});
809+
728810
it('should properly free ui.item.sortable object', function() {
729811
inject(function($compile, $rootScope) {
730812
var elementTop, elementBottom, uiItem, uiItemSortable_Destroy;

0 commit comments

Comments
 (0)