Properly update internal file info with updated tags
Whenever tags are updated, they need to be updated in the file list's file info array as well. This commit also adds unit tests and makes sure that whichever tags are sent back by the server after update are used when updating attributes/fileinfo.
This commit is contained in:
parent
331d73c3a3
commit
ef1dd3ea0a
|
@ -110,10 +110,17 @@
|
||||||
dir + '/' + fileName,
|
dir + '/' + fileName,
|
||||||
tags
|
tags
|
||||||
).then(function(result) {
|
).then(function(result) {
|
||||||
|
// response from server should contain updated tags
|
||||||
|
var newTags = result.tags;
|
||||||
|
if (_.isUndefined(newTags)) {
|
||||||
|
newTags = tags;
|
||||||
|
}
|
||||||
|
var fileInfo = context.fileList.files[$file.index()];
|
||||||
// read latest state from result
|
// read latest state from result
|
||||||
toggleStar($actionEl, (result.tags.indexOf(OC.TAG_FAVORITE) >= 0));
|
toggleStar($actionEl, (newTags.indexOf(OC.TAG_FAVORITE) >= 0));
|
||||||
$file.attr('data-tags', tags.join('|'));
|
$file.attr('data-tags', newTags.join('|'));
|
||||||
$file.attr('data-favorite', !isFavorite);
|
$file.attr('data-favorite', !isFavorite);
|
||||||
|
fileInfo.tags = newTags;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -77,11 +77,39 @@ describe('OCA.Files.TagsPlugin tests', function() {
|
||||||
});
|
});
|
||||||
describe('Applying tags', function() {
|
describe('Applying tags', function() {
|
||||||
it('sends request to server and updates icon', function() {
|
it('sends request to server and updates icon', function() {
|
||||||
// TODO
|
var request;
|
||||||
fileList.setFiles(testFiles);
|
fileList.setFiles(testFiles);
|
||||||
|
$tr = fileList.$el.find('tbody tr:first');
|
||||||
|
$action = $tr.find('.action-favorite');
|
||||||
|
$action.click();
|
||||||
|
|
||||||
|
expect(fakeServer.requests.length).toEqual(1);
|
||||||
|
var request = fakeServer.requests[0];
|
||||||
|
expect(JSON.parse(request.requestBody)).toEqual({
|
||||||
|
tags: ['tag1', 'tag2', OC.TAG_FAVORITE]
|
||||||
});
|
});
|
||||||
it('sends all tags to server when applyFileTags() is called ', function() {
|
request.respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
|
||||||
// TODO
|
tags: ['tag1', 'tag2', 'tag3', OC.TAG_FAVORITE]
|
||||||
|
}));
|
||||||
|
|
||||||
|
expect($tr.attr('data-favorite')).toEqual('true');
|
||||||
|
expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2', 'tag3', OC.TAG_FAVORITE]);
|
||||||
|
expect(fileList.files[0].tags).toEqual(['tag1', 'tag2', 'tag3', OC.TAG_FAVORITE]);
|
||||||
|
expect($action.find('img').attr('src')).toEqual(OC.imagePath('core', 'actions/starred'));
|
||||||
|
|
||||||
|
$action.click();
|
||||||
|
request = fakeServer.requests[1];
|
||||||
|
expect(JSON.parse(request.requestBody)).toEqual({
|
||||||
|
tags: ['tag1', 'tag2', 'tag3']
|
||||||
|
});
|
||||||
|
request.respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
|
||||||
|
tags: ['tag1', 'tag2', 'tag3']
|
||||||
|
}));
|
||||||
|
|
||||||
|
expect($tr.attr('data-favorite')).toEqual('false');
|
||||||
|
expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2', 'tag3']);
|
||||||
|
expect(fileList.files[0].tags).toEqual(['tag1', 'tag2', 'tag3']);
|
||||||
|
expect($action.find('img').attr('src')).toEqual(OC.imagePath('core', 'actions/star'));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue