diff --git a/core/js/tests/specs/sharedialogshareelistview.js b/core/js/tests/specs/sharedialogshareelistview.js
new file mode 100644
index 0000000000000000000000000000000000000000..d468ce790dcebf01e325941147762aafbdde6db3
--- /dev/null
+++ b/core/js/tests/specs/sharedialogshareelistview.js
@@ -0,0 +1,158 @@
+/**
+ * ownCloud
+ *
+ * @author Tom Needham
+ * @copyright 2015 Tom Needham <tom@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/* global oc_appconfig */
+describe('OC.Share.ShareDialogShareeListView', function () {
+
+	var oldCurrentUser;
+	var fileInfoModel;
+	var configModel;
+	var shareModel;
+	var listView;
+	var setPermissionsStub;
+
+	beforeEach(function () {
+		/* jshint camelcase:false */
+		oldAppConfig = _.extend({}, oc_appconfig.core);
+		oc_appconfig.core.enforcePasswordForPublicLink = false;
+
+		$('#testArea').append('<input id="mailPublicNotificationEnabled" name="mailPublicNotificationEnabled" type="hidden" value="yes">');
+
+		fileInfoModel = new OCA.Files.FileInfoModel({
+			id: 123,
+			name: 'shared_file_name.txt',
+			path: '/subdir',
+			size: 100,
+			mimetype: 'text/plain',
+			permissions: 31,
+			sharePermissions: 31
+		});
+
+		var attributes = {
+			itemType: fileInfoModel.isDirectory() ? 'folder' : 'file',
+			itemSource: fileInfoModel.get('id'),
+			possiblePermissions: 31,
+			permissions: 31
+		};
+
+		shareModel = new OC.Share.ShareItemModel(attributes, {
+			configModel: configModel,
+			fileInfoModel: fileInfoModel
+		});
+
+		configModel = new OC.Share.ShareConfigModel({
+			enforcePasswordForPublicLink: false,
+			isResharingAllowed: true,
+			enforcePasswordForPublicLink: false,
+			isDefaultExpireDateEnabled: false,
+			isDefaultExpireDateEnforced: false,
+			defaultExpireDate: 7
+		});
+
+		listView = new OC.Share.ShareDialogShareeListView({
+			configModel: configModel,
+			model: shareModel
+		});
+
+		// required for proper event propagation when simulating clicks in some cases (jquery bugs)
+		$('#testArea').append(listView.$el);
+
+		shareModel.set({
+			linkShare: {isLinkShare: false}
+		});
+
+		oldCurrentUser = OC.currentUser;
+		OC.currentUser = 'user0';
+		setPermissionsStub = sinon.stub(listView.model, 'setPermissions');
+	});
+
+	afterEach(function () {
+		OC.currentUser = oldCurrentUser;
+		/* jshint camelcase:false */
+		oc_appconfig.core = oldAppConfig;
+		listView.remove();
+		setPermissionsStub.restore();
+	});
+
+	describe('Manages checkbox events correctly', function () {
+		it('Checks cruds boxes when edit box checked', function () {
+			shareModel.set('shares', [{
+				id: 100,
+				item_source: 123,
+				permissions: 1,
+				share_type: OC.Share.SHARE_TYPE_USER,
+				share_with: 'user1',
+				share_with_displayname: 'User One'
+			}]);
+			listView.render();
+			listView.$el.find("input[name='edit']").click();
+			expect(listView.$el.find("input[name='update']").is(':checked')).toEqual(true);
+			expect(setPermissionsStub.called).toEqual(true);
+		});
+
+		it('Checks edit box when create/update/delete are checked', function () {
+			shareModel.set('shares', [{
+				id: 100,
+				item_source: 123,
+				permissions: 1,
+				share_type: OC.Share.SHARE_TYPE_USER,
+				share_with: 'user1',
+				share_with_displayname: 'User One'
+			}]);
+			listView.render();
+			listView.$el.find("input[name='update']").click();
+			expect(listView.$el.find("input[name='edit']").is(':checked')).toEqual(true);
+			expect(setPermissionsStub.called).toEqual(true);
+		});
+
+		it('shows cruds checkboxes when toggled', function () {
+			shareModel.set('shares', [{
+				id: 100,
+				item_source: 123,
+				permissions: 1,
+				share_type: OC.Share.SHARE_TYPE_USER,
+				share_with: 'user1',
+				share_with_displayname: 'User One'
+			}]);
+			listView.render();
+			listView.$el.find('a.showCruds').click();
+			expect(listView.$el.find('li.cruds').hasClass('hidden')).toEqual(false);
+		});
+
+		it('sends notification to user when checkbox clicked', function () {
+			shareModel.set('shares', [{
+				id: 100,
+				item_source: 123,
+				permissions: 1,
+				share_type: OC.Share.SHARE_TYPE_USER,
+				share_with: 'user1',
+				share_with_displayname: 'User One'
+			}]);
+			listView.render();
+			var notificationStub = sinon.stub(listView.model, 'sendNotificationForShare');
+			listView.$el.find("input[name='mailNotification']").click();
+			expect(notificationStub.called).toEqual(true);
+			notificationStub.restore();
+		});
+
+	});
+
+});