public void Initialize()
        {
            playlistManager = new PlaylistManager(new PlaylistRepository(new EFDbContext(ContextEnum.BeatBuddyTest)), new UserRepository(new EFDbContext(ContextEnum.BeatBuddyTest)));
            userManager     = new UserManager(new UserRepository(new EFDbContext(ContextEnum.BeatBuddyTest)));
            user            = userManager.CreateUser("*****@*****.**", "matthias", "test", "acidshards", "");
            playlist        = playlistManager.CreatePlaylistForUser("testplaylist", "gekke playlist om te testen", "125", 5, true, "", user);

            trackProvider    = new YouTubeTrackProvider();
            albumArtProvider = new BingAlbumArtProvider();

            playlistControllerWithAuthenticatedUser = MyWebApi.Controller <PlaylistController>()
                                                      .WithResolvedDependencyFor <IPlaylistManager>(playlistManager)
                                                      .WithResolvedDependencyFor <IUserManager>(userManager)
                                                      .WithResolvedDependencyFor <ITrackProvider>(trackProvider)
                                                      .WithResolvedDependencyFor <IAlbumArtProvider>(albumArtProvider)
                                                      .WithAuthenticatedUser(
                u => u.WithIdentifier("NewId")
                .WithUsername(user.Email)
                .WithClaim(new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.Email, user.Email))
                .WithClaim(new System.Security.Claims.Claim("sub", user.Email))
                );
            Track metallicaTrack = new Track()
            {
                Artist      = "Metallica",
                Title       = "Master of Puppets (live)",
                CoverArtUrl = "",
                Duration    = 800,
                TrackSource = new TrackSource
                {
                    SourceType = SourceType.YouTube,
                    Url        = "https://www.youtube.com/watch?v=kV-2Q8QtCY4",
                    TrackId    = "kV-2Q8QtCY4"
                }
            };
            Track nickelbackTrack = new Track()
            {
                Artist      = "Nickelback",
                Title       = "How You Remind Me",
                CoverArtUrl = "",
                Duration    = 400,
                TrackSource = new TrackSource
                {
                    SourceType = SourceType.YouTube,
                    Url        = "https://www.youtube.com/watch?v=1cQh1ccqu8M",
                    TrackId    = "1cQh1ccqu8M"
                }
            };

            _addedMetallicaTrack  = playlistManager.AddTrackToPlaylist(playlist.Id, metallicaTrack);
            _addedNickelbackTrack = playlistManager.AddTrackToPlaylist(playlist.Id, nickelbackTrack);
        }
        public void Initialize() {
            playlistManager = new PlaylistManager(new PlaylistRepository(new EFDbContext(ContextEnum.BeatBuddyTest)), new UserRepository(new EFDbContext(ContextEnum.BeatBuddyTest)));
            userManager = new UserManager(new UserRepository(new EFDbContext(ContextEnum.BeatBuddyTest)));
            user = userManager.CreateUser("*****@*****.**", "matthias", "test", "acidshards", "");
            playlist = playlistManager.CreatePlaylistForUser("testplaylist", "gekke playlist om te testen", "125", 5, true, "", user);

            trackProvider = new YouTubeTrackProvider();
            albumArtProvider = new BingAlbumArtProvider();

            playlistControllerWithAuthenticatedUser = MyWebApi.Controller<PlaylistController>()
               .WithResolvedDependencyFor<IPlaylistManager>(playlistManager)
               .WithResolvedDependencyFor<IUserManager>(userManager)
               .WithResolvedDependencyFor<ITrackProvider>(trackProvider)
               .WithResolvedDependencyFor<IAlbumArtProvider>(albumArtProvider)
               .WithAuthenticatedUser(
                u => u.WithIdentifier("NewId")
                      .WithUsername(user.Email)
                      .WithClaim(new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.Email, user.Email))
                      .WithClaim(new System.Security.Claims.Claim("sub", user.Email))
               );
            Track metallicaTrack = new Track()
            {
                Artist = "Metallica",
                Title = "Master of Puppets (live)",
                CoverArtUrl = "",
                Duration = 800,
                TrackSource = new TrackSource
                {
                    SourceType = SourceType.YouTube,
                    Url = "https://www.youtube.com/watch?v=kV-2Q8QtCY4",
                    TrackId = "kV-2Q8QtCY4"
                }
            };
            Track nickelbackTrack = new Track()
            {
                Artist = "Nickelback",
                Title = "How You Remind Me",
                CoverArtUrl = "",
                Duration = 400,
                TrackSource = new TrackSource
                {
                    SourceType = SourceType.YouTube,
                    Url = "https://www.youtube.com/watch?v=1cQh1ccqu8M",
                    TrackId = "1cQh1ccqu8M"
                }
            };

            _addedMetallicaTrack = playlistManager.AddTrackToPlaylist(playlist.Id, metallicaTrack);
            _addedNickelbackTrack = playlistManager.AddTrackToPlaylist(playlist.Id, nickelbackTrack);
            
        }
        public ActionResult Create(PlaylistViewModel viewModel, HttpPostedFileBase avatarImage)
        {
            Playlist playlist;
            string   path = null;

            if (String.IsNullOrEmpty(viewModel.Name) || viewModel.Name == " ")
            {
                ModelState.AddModelError("Name", "You need to fill in a name for your playlist");
                return(View(viewModel));
            }

            var user = userManager.ReadUser(User != null ? User.Identity.Name : testName);

            if (avatarImage != null && avatarImage.ContentLength > 0)
            {
                var bannerFileName = Path.GetFileName(avatarImage.FileName);
                path = FileHelper.NextAvailableFilename(Path.Combine(Server.MapPath(ConfigurationManager.AppSettings["PlaylistImgPath"]), bannerFileName));
                avatarImage.SaveAs(path);
                path = Path.GetFileName(path);
            }

            var keyAlreadyInUser = playlistManager.ReadPlaylistByKey(viewModel.Key);

            if (keyAlreadyInUser != null || viewModel.Key == null)
            {
                ModelState.AddModelError("Key", "The key value is already in use");
                return(View(viewModel));
            }


            try {
                if (viewModel.OrganisationId != 0)
                {
                    playlist = playlistManager.CreatePlaylistForOrganisation(viewModel.Name, viewModel.Description, viewModel.Key, viewModel.MaximumVotesPerUser, true, path, user, viewModel.OrganisationId);
                }
                else
                {
                    playlist = playlistManager.CreatePlaylistForUser(viewModel.Name, viewModel.Description, viewModel.Key, viewModel.MaximumVotesPerUser, true, path, user);
                }
                return(RedirectToAction("View", new { key = playlist.Key }));
            }
            catch (System.Exception e)
            {
                ModelState.AddModelError("", "Something went wrong");
                return(View(viewModel));
            }
        }
        public IHttpActionResult createPlaylist(FormDataCollection formData)
        {
            var userIdentity = RequestContext.Principal.Identity as ClaimsIdentity;

            if (userIdentity == null)
            {
                return(NotFound());
            }

            var email = userIdentity.Claims.First(c => c.Type == "sub").Value;

            if (email == null)
            {
                return(NotFound());
            }

            var user = userManager.ReadUser(email);

            if (user == null)
            {
                return(NotFound());
            }

            string imagePath = "";

            if (formData["image"] != null && formData["image"].Length > 0)
            {
                try
                {
                    var bitmap = ImageDecoder.DecodeBase64String(formData["image"]);

                    string extension = string.Empty;
                    if (bitmap.RawFormat.Equals(ImageFormat.Jpeg))
                    {
                        extension = ".jpg";
                    }
                    if (bitmap.RawFormat.Equals(ImageFormat.Png))
                    {
                        extension = ".png";
                    }
                    if (bitmap.RawFormat.Equals(ImageFormat.Bmp))
                    {
                        extension = ".bmp";
                    }
                    if (bitmap.RawFormat.Equals(ImageFormat.Gif))
                    {
                        extension = ".gif";
                    }

                    if (string.IsNullOrEmpty(extension))
                    {
                        return(BadRequest("The supplied image is not a valid image"));
                    }

                    imagePath = FileHelper.NextAvailableFilename(Path.Combine(HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["PlaylistImgPath"]), "playlist" + extension));
                    bitmap.Save(imagePath);

                    imagePath = Path.GetFileName(imagePath);
                }
                catch (Exception ex)
                {
                    return(BadRequest(ex.Message));
                }
            }

            if (formData["organisationId"] != null)
            {
                var playlist = playlistManager.CreatePlaylistForOrganisation(formData["name"], formData["description"], formData["key"], 1, false, imagePath, user, long.Parse(formData["organisationId"]));
                if (playlist != null)
                {
                    return(Ok(playlist));
                }
            }
            else
            {
                var playlist = playlistManager.CreatePlaylistForUser(formData["name"], formData["description"], formData["key"], 1, false, imagePath, user);
                if (playlist != null)
                {
                    return(Ok(playlist));
                }
            }

            return(BadRequest());
        }