예제 #1
0
        public async Task GetTracks_TrackIdsMarket_AvailableMarketsIsNull()
        {
            // arrange
            string[] trackIds = new[] { "5lA3pwMkBdd24StM90QrNR", "20I6sIOMTCkB6w7ryavxtO", "7xGfFoTpQ2E7fRF5lN10tr" };

            var http     = new HttpClient();
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());
            var api      = new TracksApi(http, accounts);

            // act
            var response = await api.GetTracks(trackIds, SpotifyCountryCodes.New_Zealand);

            // assert
            Assert.IsNull(response[0].AvailableMarkets);
        }
예제 #2
0
        public async Task GetTracks_TrackIdsNoMarket_MarketsArrayPopulated()
        {
            // arrange
            string[] trackIds = new[] { "5lA3pwMkBdd24StM90QrNR", "20I6sIOMTCkB6w7ryavxtO", "7xGfFoTpQ2E7fRF5lN10tr" };

            var http     = new HttpClient();
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());

            var api = new TracksApi(http, accounts);

            // act
            var response = await api.GetTracks(trackIds);

            // assert
            Assert.IsTrue(response[0].AvailableMarkets.Length > 0);
        }
예제 #3
0
        public async Task GetTrack_TrackIdNoMarket_MarketsArrayExists()
        {
            // arrange
            const string trackId = "5lA3pwMkBdd24StM90QrNR";

            var http     = new HttpClient();
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());

            var api = new TracksApi(http, accounts);

            // act
            var response = await api.GetTrack(trackId);

            // assert
            Assert.IsTrue(response.AvailableMarkets.Length > 0);
        }
예제 #4
0
        public async Task GetTracksAudioFeatures_TrackIds_ThreeFeatures()
        {
            // arrange
            string[] trackIds = new[] { "5lA3pwMkBdd24StM90QrNR", "20I6sIOMTCkB6w7ryavxtO", "7xGfFoTpQ2E7fRF5lN10tr" };

            var http     = new HttpClient();
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());

            var api = new TracksApi(http, accounts);

            // act
            var response = await api.GetTracksAudioFeatures(trackIds);

            // assert
            Assert.IsTrue(response != null && response.Length == 3);
        }
예제 #5
0
        public async Task GetTrackAudioFeatures_TrackId_TempoNotZero()
        {
            // arrange
            const string trackId = "5lA3pwMkBdd24StM90QrNR";

            var http     = new HttpClient();
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());

            var api = new TracksApi(http, accounts);

            // act
            var response = await api.GetTrackAudioFeatures(trackId);

            // assert
            Assert.IsTrue(response.Tempo != 0);
        }
예제 #6
0
        public async Task GetTrack_TrackId_CorrectTrackName()
        {
            // arrange
            const string trackId = "5lA3pwMkBdd24StM90QrNR";

            var http     = new HttpClient();
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());

            var api = new TracksApi(http, accounts);

            // act
            var response = await api.GetTrack(trackId);

            // assert
            Assert.AreEqual("P.Y.T. (Pretty Young Thing)", response.Name);
        }
예제 #7
0
        public async Task GetTrackByIsrcCode_NonExistentIsrc_ResultIsNull()
        {
            // arrange
            const string isrc = "NOPE12345678";

            var http     = new HttpClient();
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());

            var api = new TracksApi(http, accounts);

            // act
            var track = await api.GetTrackByIsrcCode(isrc);

            // assert
            Assert.IsNull(track);
        }
예제 #8
0
        public async Task GetTrackByIsrcCode_Isrc_CorrectResult()
        {
            // arrange
            const string isrc = "GBBKS1700108";

            var http     = new HttpClient();
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());

            var api = new TracksApi(http, accounts);

            // act
            var track = await api.GetTrackByIsrcCode(isrc);

            // assert
            Assert.AreEqual(isrc, track.ExternalIds.Isrc);
        }
예제 #9
0
        public async Task GetTrack_TrackIdMarket_AvailableMarketsIsNull()
        {
            // arrange
            const string trackId = "11dFghVXANMlKmJXsNCbd8";
            const string market  = SpotifyCountryCodes.Spain;

            var http     = new HttpClient();
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());

            var api = new TracksApi(http, accounts);

            // act
            var response = await api.GetTrack(trackId, market);

            // assert
            Assert.IsNull(response?.AvailableMarkets?.Length == 0 ? null : "Array not empty.");
        }
예제 #10
0
        public async Task SearchTracks_NonExistentIsrc_ItemsZero()
        {
            // arrange
            const string isrc  = "NOPE12345678";
            const string query = "isrc:" + isrc;

            var http     = new HttpClient();
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());

            var api = new TracksApi(http, accounts);

            // act
            var response = await api.SearchTracks(query);

            // assert
            Assert.AreEqual(0, response.Items.Length);
        }
예제 #11
0
        public async Task SearchTracks_Isrc_CorrectResult()
        {
            // arrange
            const string isrc  = "USUM71703861";
            const string query = "isrc:" + isrc;

            var http     = new HttpClient();
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());

            var api = new TracksApi(http, accounts);

            // act
            var response = await api.SearchTracks(query);

            // assert
            Assert.AreEqual(isrc, response.Items[0].ExternalIds.Isrc);
        }
        public async Task GetTrack_TrackIdMarket_AvailableMarketsIsNull()
        {
            // arrange
            const string trackId = "5lA3pwMkBdd24StM90QrNR";
            const string market  = SpotifyCountryCodes.New_Zealand;

            var http     = new HttpClient();
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());

            var api = new TracksApi(http, accounts);

            // act
            var response = await api.GetTrack(trackId, market);

            // assert
            Assert.IsNull(response.AvailableMarkets);
        }
예제 #13
0
        public async Task GetTracks_TrackIds_CorrectTrackNames()
        {
            // arrange
            string[] trackIds = new[] { "11dFghVXANMlKmJXsNCbNl", "20I6sIOMTCkB6w7ryavxtO", "7xGfFoTpQ2E7fRF5lN10tr" };

            var http     = new HttpClient();
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());

            var api = new TracksApi(http, accounts);

            // act
            var response = await api.GetTracks(trackIds);

            // assert
            Assert.AreEqual("Cut To The Feeling", response[0].Name);
            Assert.AreEqual("Call Me Maybe", response[1].Name);
            Assert.AreEqual("Run Away With Me", response[2].Name);
        }
예제 #14
0
        //[TestMethod] // not a reliable test - intermittent gateway timeout on Spotify end
        public async Task GetTrackAudioAnalysis_TrackId_BarsIsNotNullOrZero()
        {
            // arrange
            const string trackId = "5lA3pwMkBdd24StM90QrNR";

            var http = new HttpClient();

            http.Timeout = TimeSpan.FromSeconds(30);
            var accounts = new AccountsService(http, TestsHelper.GetLocalConfig());

            var api = new TracksApi(http, accounts);

            // act
            var response = await api.GetTrackAudioAnalysis(trackId);

            // assert
            Assert.IsTrue(response.Bars != null && response.Bars.Length > 0);
        }
예제 #15
0
        public async Task <PlaylistModel> GetPlaylist(string id)
        {
            try
            {
                var http           = new HttpClient();
                var accounts       = new AccountsService(http, _configuration);
                var playlistsApi   = new PlaylistsApi(http, accounts);
                var tracksApi      = new TracksApi(http, accounts);
                int limit          = 100;
                var playlistTracks = await playlistsApi.GetTracks(id, limit : limit);

                int offset = 0;
                int j      = 0;
                // Go through all pages since Spotify only returns 100 tracks at once for a playlist
                var trackModels = new List <TrackModel>();
                while (playlistTracks.Items.Any())
                {
                    var tracksWithAudioFeatures = await tracksApi.GetTracksAudioFeatures(playlistTracks.Items.Select(x => x.Track.Id).ToArray());

                    trackModels.AddRange(tracksWithAudioFeatures.Select(x => new TrackModel
                    {
                        ExternalId   = x.Id,
                        Danceability = x.Danceability,
                        Energy       = x.Energy,
                        Valence      = x.Valence,
                        Popularity   = playlistTracks.Items.FirstOrDefault(y => y.Track.Id == x.Id)?.Track.Popularity ?? 0,
                        Artists      = playlistTracks.Items.FirstOrDefault(y => y.Track.Id == x.Id)?.Track.Artists.FirstOrDefault()?.Name ?? string.Empty,
                        Name         = playlistTracks.Items.FirstOrDefault(y => y.Track.Id == x.Id)?.Track.Name ?? string.Empty,
                        PreviewUrl   = playlistTracks.Items.FirstOrDefault(y => y.Track.Id == x.Id)?.Track.PreviewUrl ?? string.Empty,
                    }));
                    offset        += limit;
                    playlistTracks = await playlistsApi.GetTracks(id, limit : limit, offset : offset);
                }

                var newPlaylist = new PlaylistModel(id, trackModels);
                return(newPlaylist);
            }
            catch (Exception e)
            {
                Trace.TraceError(e.ToString());
                throw new Exception("Error getting playlist from Spotify");
            }
        }