Refactors subsonic.js' loadPlaylistsForMenu
It now uses submenu-service's getPlaylists() => DRY. It's also unit-tested.
This commit is contained in:
parent
6e19277371
commit
7e0c5a176a
2 changed files with 53 additions and 30 deletions
|
@ -181,7 +181,7 @@ angular.module('jamstash.subsonic.controller', [
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
$scope.$watch("SelectedAlbumSort.id", function (newValue, oldValue) {
|
$scope.$watch('SelectedAlbumSort.id', function (newValue, oldValue) {
|
||||||
if (newValue !== oldValue) {
|
if (newValue !== oldValue) {
|
||||||
if ($scope.song.length > 0) {
|
if ($scope.song.length > 0) {
|
||||||
sortSubsonicSongs(newValue);
|
sortSubsonicSongs(newValue);
|
||||||
|
@ -197,7 +197,7 @@ angular.module('jamstash.subsonic.controller', [
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$scope.$watch("SelectedMusicFolder", function (newValue, oldValue) {
|
$scope.$watch('SelectedMusicFolder', function (newValue, oldValue) {
|
||||||
if (newValue !== oldValue) {
|
if (newValue !== oldValue) {
|
||||||
var folderId;
|
var folderId;
|
||||||
if (newValue) {
|
if (newValue) {
|
||||||
|
@ -481,6 +481,7 @@ angular.module('jamstash.subsonic.controller', [
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.getAlbumByTag = function (id) { // Gets Album by ID3 tag
|
$scope.getAlbumByTag = function (id) { // Gets Album by ID3 tag
|
||||||
subsonic.getAlbumByTag(id).then(function (data) {
|
subsonic.getAlbumByTag(id).then(function (data) {
|
||||||
$scope.album = data.album;
|
$scope.album = data.album;
|
||||||
|
@ -491,6 +492,7 @@ angular.module('jamstash.subsonic.controller', [
|
||||||
$scope.selectedPlaylist = data.selectedPlaylist;
|
$scope.selectedPlaylist = data.selectedPlaylist;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.search = function (query, type) {
|
$scope.search = function (query, type) {
|
||||||
if (query && query.length > 0) {
|
if (query && query.length > 0) {
|
||||||
var promise = subsonic.search(query, type);
|
var promise = subsonic.search(query, type);
|
||||||
|
@ -514,6 +516,7 @@ angular.module('jamstash.subsonic.controller', [
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.toggleAZ = function () {
|
$scope.toggleAZ = function () {
|
||||||
$scope.toggleSubmenu('#submenu_AZIndex', '#AZIndex', 'right', 44);
|
$scope.toggleSubmenu('#submenu_AZIndex', '#AZIndex', 'right', 44);
|
||||||
};
|
};
|
||||||
|
@ -585,36 +588,17 @@ angular.module('jamstash.subsonic.controller', [
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.loadPlaylistsForMenu = function (data, event) {
|
$scope.loadPlaylistsForMenu = function () {
|
||||||
$.ajax({
|
var promise = subsonic.getPlaylists();
|
||||||
url: globals.BaseURL() + '/getPlaylists.view?' + globals.BaseParams(),
|
$scope.handleErrors(promise).then(function (data) {
|
||||||
method: 'GET',
|
$scope.playlistMenu = data.playlists.concat(data.playlistsPublic);
|
||||||
dataType: globals.settings.Protocol,
|
// TODO: Hyz: Refactor using some kind of directive ?
|
||||||
timeout: globals.settings.Timeout,
|
|
||||||
success: function (data) {
|
|
||||||
var playlists = [];
|
|
||||||
$scope.playlistMenu = [];
|
|
||||||
if (typeof data["subsonic-response"].playlists.playlist != 'undefined') {
|
|
||||||
if (data["subsonic-response"].playlists.playlist.length > 0) {
|
|
||||||
playlists = data["subsonic-response"].playlists.playlist;
|
|
||||||
} else {
|
|
||||||
playlists[0] = data["subsonic-response"].playlists.playlist;
|
|
||||||
}
|
|
||||||
angular.forEach(playlists, function (item, key) {
|
|
||||||
if (item.owner == globals.settings.Username) {
|
|
||||||
$scope.playlistMenu.push(map.mapPlaylist(item));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if ($scope.playlistMenu.length > 0) {
|
|
||||||
$scope.$apply();
|
|
||||||
$scope.toggleSubmenu('#submenu_AddToPlaylist', '#action_AddToPlaylist', 'left', 124);
|
$scope.toggleSubmenu('#submenu_AddToPlaylist', '#action_AddToPlaylist', 'left', 124);
|
||||||
} else {
|
}, function (error) {
|
||||||
notifications.updateMessage('No Playlists :(', true);
|
notifications.updateMessage(error.reason, true);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.addToPlaylist = function (id) {
|
$scope.addToPlaylist = function (id) {
|
||||||
var songs = [];
|
var songs = [];
|
||||||
if ($scope.selectedSongs.length !== 0) {
|
if ($scope.selectedSongs.length !== 0) {
|
||||||
|
|
|
@ -727,6 +727,45 @@ describe("Subsonic controller", function () {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("loadPlaylistsForMenu() -", function () {
|
||||||
|
beforeEach(function () {
|
||||||
|
subsonic.getPlaylists.and.returnValue(deferred.promise);
|
||||||
|
// TODO: Hyz: Remove when refactored. It's from main-controller.js
|
||||||
|
scope.toggleSubmenu = jasmine.createSpy("toggleSubmenu");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("Given that there were playlists in the library, when I load the playlists for the 'Add to playlist' menu, then the playlists will be retrieved from subsonic and published to the scope", function () {
|
||||||
|
scope.loadPlaylistsForMenu();
|
||||||
|
deferred.resolve({
|
||||||
|
playlists: [
|
||||||
|
{ id: 733 }
|
||||||
|
],
|
||||||
|
playlistsPublic: [
|
||||||
|
{ id: 962 }
|
||||||
|
]
|
||||||
|
});
|
||||||
|
scope.$apply();
|
||||||
|
|
||||||
|
expect(subsonic.getPlaylists).toHaveBeenCalled();
|
||||||
|
expect(scope.playlistMenu).toEqual([
|
||||||
|
{ id: 733 },
|
||||||
|
{ id: 962 }
|
||||||
|
]);
|
||||||
|
expect(scope.toggleSubmenu).toHaveBeenCalledWith('#submenu_AddToPlaylist', '#action_AddToPlaylist', 'left', 124);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("Given that there weren't any playlists in the library, when I load the playlists for the 'Add to playlist' menu, then an error notification will be displayed", function () {
|
||||||
|
scope.loadPlaylistsForMenu();
|
||||||
|
deferred.reject({ reason: 'No playlist found on the Subsonic server.' });
|
||||||
|
scope.$apply();
|
||||||
|
|
||||||
|
expect(subsonic.getPlaylists).toHaveBeenCalled();
|
||||||
|
expect(scope.playlistMenu).toEqual([]);
|
||||||
|
expect(notifications.updateMessage).toHaveBeenCalledWith('No playlist found on the Subsonic server.', true);
|
||||||
|
expect(scope.toggleSubmenu).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it("When I create a playlist, then it will ask for a name, use subsonic-service and reload the playlists", function () {
|
it("When I create a playlist, then it will ask for a name, use subsonic-service and reload the playlists", function () {
|
||||||
$window.prompt.and.returnValue('declassicize');
|
$window.prompt.and.returnValue('declassicize');
|
||||||
subsonic.newPlaylist.and.returnValue(deferred.promise);
|
subsonic.newPlaylist.and.returnValue(deferred.promise);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue