public PlaylistDto CreateCopyByShareCode(ShareCodeRequestDto shareCodeRequestDto) { PlaylistDto playlistDto; using (ITransaction transaction = Session.BeginTransaction()) { ShareCode shareCode = ShareCodeManager.GetByShortIdAndEntityTitle(shareCodeRequestDto.ShortId, shareCodeRequestDto.UrlFriendlyEntityTitle); // Never return the sharecode's playlist reference. Make a copy of it to give out so people can't modify the original. Playlist playlistToCopy = PlaylistManager.Get(shareCode.EntityId); User user = UserManager.Get(shareCodeRequestDto.UserId); var playlistCopy = new Playlist(playlistToCopy); user.AddPlaylist(playlistCopy); PlaylistManager.Save(playlistCopy); playlistDto = PlaylistDto.Create(playlistCopy); transaction.Commit(); } return playlistDto; }
public void GetSharedPlaylist_PlaylistShareCodeExists_CopyOfPlaylistCreated() { User user = Helpers.CreateUser(); Playlist playlist = PlaylistManager.CopyAndSave(user.Playlists.First().Id); ShareCode shareCode = ShareCodeManager.GetShareCode(playlist); ShareCodeRequestDto shareCodeRequestDto = new ShareCodeRequestDto(user.Id, shareCode.ShortId, shareCode.UrlFriendlyEntityTitle); // Create a new playlist for the given user by loading up the playlist via sharecode. var playlistDto = PlaylistController.CreateCopyByShareCode(shareCodeRequestDto); // Make sure we actually get a Playlist DTO back from the Controller. Assert.NotNull(playlistDto); User userFromDatabase = UserManager.Get(playlistDto.UserId); // Make sure that the created playlist was cascade added to the User Assert.That(userFromDatabase.Playlists.Count(p => p.Id == playlistDto.Id) == 1); }