public Either <DomainError, CommandResult> Handle(RemoveTrackFromPlayList command)
        {
            var playList = playListPersistence.GetPlayList(command.PlaylistId);
            var error    = playList.Remove(command.TrackId);

            if (error.IsSome)
            {
                return(error.ValueUnsafe());
            }

            playListPersistence.Persist(playList);
            eventPublisher.Publish(playList.Events());
            return(CommandResult.Success);
        }
        public void do_not_remove_a_track_when_it_is_not_already_in_the_play_list()
        {
            var aTrackId    = ATrack.Id;
            var aPlaylistId = APlaylist.Id;
            var aPlayList   = new PlayListBuilder()
                              .WithId(aPlaylistId)
                              .Build();

            playListPersistence.GetPlayList(aPlaylistId).Returns(aPlayList);
            var command = new RemoveTrackFromPlayList(aTrackId, aPlaylistId);

            var result = removeTrackFromPLayListCommandHandler.Handle(command);

            result.IsLeft.Should().BeTrue();
            result.IfLeft(error => error.Should().Be(DomainError.TrackIsNotInThePlayList));
            playListPersistence.DidNotReceive().Persist(Arg.Any <PlayList>());
            eventPublisher.DidNotReceive().Publish(Arg.Any <List <Event> >());
        }
        public void remove_an_existing_track_from_a_play_list()
        {
            var aTrackId    = ATrack.Id;
            var aPlaylistId = APlaylist.Id;
            var aPlayList   = new PlayListBuilder()
                              .WithId(aPlaylistId)
                              .AddTrack(new TrackBuilder()
                                        .WithId(aTrackId)
                                        .Build())
                              .Build();

            playListPersistence.GetPlayList(aPlaylistId).Returns(aPlayList);
            var command = new RemoveTrackFromPlayList(aTrackId, aPlaylistId);

            var result = removeTrackFromPLayListCommandHandler.Handle(command);

            result.IsRight.Should().BeTrue();
            VerifyAnEmptyPlayListHasBeenPersistedWith(aPlaylistId);
            VerifyEventHasBeenRaised(new TrackHasBeenRemovedFromPlayList(aTrackId, aPlaylistId), eventPublisher);
        }
        public Either <DomainError, CommandResult> Process(RemoveTrackFromPlayList command)
        {
            var service = tracksCommandHandlerCreator.CreateRemoveTrackFromPLayListCommandHandler();

            return(service.Handle(command));
        }