public async Task <TrackDetailsDto> GetByIdAsync(int id)
        {
            var spec  = new TrackDetailSpecification(id);
            var track = await _trackRepository.GetSingleBySpecAsync(spec);

            return(new TrackDetailsDto
            {
                TrackId = track.Id,
                Name = track.Name,
                Album = track.Album.Title,
                AlbumId = track.Album.Id,
                ArtistId = track.Album.Artist.Id,
                Artist = track.Album.Artist.Name,
                Genre = track.Genre.Name,
                FromCache = track.FromCache
            });
        }
        public async Task GetById()
        {
            var trackId   = 1;
            var trackList = new List <Track>
            {
                new Track {
                    Id = trackId
                },
                new Track {
                    Id = 2
                },
            };

            var spec   = new TrackDetailSpecification(trackId);
            var result = trackList
                         .AsQueryable()
                         .SingleOrDefault(spec.Criteria);

            Assert.AreEqual(trackId, result.Id);
        }
        public async Task GetTrack()
        {
            var trackId = 1;
            var tracks  = new List <Track>
            {
                new Track {
                    Id = trackId
                },
                new Track {
                    Id = 2
                }
            };

            _context.Tracks.AddRange(tracks);
            _context.SaveChanges();

            var spec          = new TrackDetailSpecification(trackId);
            var trackFromRepo = await _trackRepository.GetSingleBySpecAsync(spec);

            Assert.AreEqual(trackId, trackFromRepo.Id);
        }