public IActionResult AddSong(SongPostIndexModel model)
        {
            if (model == null)
            {
                RedirectToAction("ArtistInfo", new { id = model.Artist.Id });
            }

            var artistModel = model.Artist;
            var songModel   = model.Song;

            //add the song - populate an Song instance with values from the form
            var newSong = new Song
            {
                Name     = songModel.Name,
                Duration = songModel.Duration,
            };

            _song.Add(newSong);

            //insert association record for AlbumId, ArtistId, SongId
            if (model.Album.Id != 0)
            {
                _albumSong.Add(model.Album.Id, artistModel.Id, model.Song.TrackNumber, newSong.Id);
            }
            else
            {
                //song is not associated to an album
                _albumSong.Add(0, artistModel.Id, model.Song.TrackNumber, newSong.Id);
            }

            return(RedirectToAction("Index", "SongPost",
                                    new { albumId = model.Album.Id, artistId = model.Artist.Id }));
        }
        public async Task Post_ShouldReturnNewSong_With_SongEndpoint()
        {
            var songRequest = new SongRequest
            {
                Artist     = "Artist1",
                Difficulty = "Hard",
                Level      = 5,
                Name       = "Song1"
            };

            var songGuid             = Guid.Parse("F531D138-44F2-4400-A21B-C3D9A3C8D485");
            var expectedSongResponse = new SongResponse
            {
                Artist     = songRequest.Artist,
                Difficulty = songRequest.Difficulty,
                Id         = songGuid,
                Level      = songRequest.Level,
                Name       = songRequest.Name
            };

            _songService.Add(Arg.Any <Song>()).Returns(
                args => Task.FromResult <Song>(new Song
            {
                Id         = songGuid,
                Artist     = args.ArgAt <Song>(0).Artist,
                Difficulty = args.ArgAt <Song>(0).Difficulty,
                Level      = args.ArgAt <Song>(0).Level,
                Name       = args.ArgAt <Song>(0).Name
            }));

            var actionResult = await _songsController.Post(songRequest);

            var createdResult = Assert.IsType <CreatedResult>(actionResult.Result);

            Assert.Equal($"/songs/{songGuid}", createdResult.Location);
            var songResponse = Assert.IsType <SongResponse>(createdResult.Value);

            Assert.Equal(expectedSongResponse, songResponse);
            await _coreDataService.Received(1).SaveChanges();
        }