From 074d3a8f074e388768853f58de3712293ba3aef1 Mon Sep 17 00:00:00 2001
From: Vincent Petry <pvince81@owncloud.com>
Date: Mon, 23 Jun 2014 12:55:42 +0200
Subject: [PATCH] Clear file selection when list is repopulated

When calling FileList.setFiles() the current selection needs to be
cleared.
---
 apps/files/js/filelist.js           |  2 ++
 apps/files/tests/js/filelistSpec.js | 34 ++++++++++++++++++++++++++++-
 2 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 241997be2b..fb97b2f459 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -512,6 +512,8 @@
 
 			this.fileSummary.calculate(filesArray);
 
+			this._selectedFiles = {};
+			this._selectionSummary.clear();
 			this.updateSelectionSummary();
 			$(window).scrollTop(0);
 
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index 011e73d4b3..743ebf9706 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -1368,7 +1368,8 @@ describe('OCA.Files.FileList tests', function() {
 						"Content-Type": "application/json"
 					},
 					JSON.stringify(data)
-			]);
+				]
+			);
 			fileList.changeDirectory('/');
 			fakeServer.respond();
 			expect($('.select-all').prop('checked')).toEqual(false);
@@ -1386,6 +1387,37 @@ describe('OCA.Files.FileList tests', function() {
 
 			expect(selectedFiles.length).toEqual(41);
 		});
+		describe('clearing the selection', function() {
+			it('clears selected files selected individually calling setFiles()', function() {
+				var selectedFiles;
+
+				fileList.setFiles(generateFiles(0, 41));
+				fileList.$fileList.find('tr:eq(5) input:checkbox:first').click();
+				fileList.$fileList.find('tr:eq(7) input:checkbox:first').click();
+
+				selectedFiles = _.pluck(fileList.getSelectedFiles(), 'name');
+				expect(selectedFiles.length).toEqual(2);
+
+				fileList.setFiles(generateFiles(0, 2));
+
+				selectedFiles = _.pluck(fileList.getSelectedFiles(), 'name');
+				expect(selectedFiles.length).toEqual(0);
+			});
+			it('clears selected files selected with select all when calling setFiles()', function() {
+				var selectedFiles;
+
+				fileList.setFiles(generateFiles(0, 41));
+				$('.select-all').click();
+
+				selectedFiles = _.pluck(fileList.getSelectedFiles(), 'name');
+				expect(selectedFiles.length).toEqual(42);
+
+				fileList.setFiles(generateFiles(0, 2));
+
+				selectedFiles = _.pluck(fileList.getSelectedFiles(), 'name');
+				expect(selectedFiles.length).toEqual(0);
+			});
+		});
 		describe('Selection overlay', function() {
 			it('show delete action according to directory permissions', function() {
 				fileList.setFiles(testFiles);
-- 
GitLab