public async Task HandleSuccessResponse() { var expectedAlbum = new LastAlbum { ArtistName = "Madonna", ListenerCount = 509271, PlayCount = 7341494, Mbid = "ddb3168d-66a9-4b2d-af02-05278da8a23d", Url = new Uri("http://www.last.fm/music/Madonna/Ray+of+Light", UriKind.Absolute), Name = "Ray of Light", ReleaseDateUtc = new DateTime(2005, 09, 13, 0, 0, 0), Id = "1934", Images = new LastImageSet( "http://userserve-ak.last.fm/serve/34s/37498173.png", "http://userserve-ak.last.fm/serve/64s/37498173.png", "http://userserve-ak.last.fm/serve/174s/37498173.png", "http://userserve-ak.last.fm/serve/300x300/37498173.png", "http://userserve-ak.last.fm/serve/_/37498173/Ray+of+Light.png"), TopTags = new List<LastTag> { new LastTag("albums i own", "http://www.last.fm/tag/albums%20i%20own"), new LastTag("pop", "http://www.last.fm/tag/pop"), new LastTag("electronic", "http://www.last.fm/tag/electronic"), new LastTag("dance", "http://www.last.fm/tag/dance"), new LastTag("madonna", "http://www.last.fm/tag/madonna") } }; var response = CreateResponseMessage(Encoding.UTF8.GetString(AlbumApiResponses.AlbumGetInfoSuccess)); var parsed = await _command.HandleResponse(response); Assert.IsTrue(parsed.Success); var actual = parsed.Content; Assert.IsTrue(actual.Tracks.Count() == 13); actual.Tracks = null; var expectedJson = JsonConvert.SerializeObject(expectedAlbum, Formatting.Indented); var actualJson = JsonConvert.SerializeObject(parsed.Content, Formatting.Indented); Assert.AreEqual(expectedJson, actualJson, expectedJson.DifferencesTo(actualJson)); }
private async void LoadData(LastAlbum album) { IsLoading = true; try { Album = await _service.GetDetailAlbum(album.Name, album.ArtistName); if (Album == null) { CurtainPrompt.ShowError("AppNetworkIssue".FromLanguageResource()); return; } if (Album.Tracks == null && Album.Name.Contains("Deluxe Edition")) { Album = await _service.GetDetailAlbum(album.Name.Replace("(Deluxe Edition)", ""), album.ArtistName); if (Album == null) { CurtainPrompt.ShowError("AppNetworkIssue".FromLanguageResource()); return; } } if (Album.Tracks != null) Tracks = new ObservableCollection<LastTrack>(Album.Tracks); else CurtainPrompt.ShowError("AlbumNoTracks".FromLanguageResource()); } catch (Exception e) { CurtainPrompt.ShowError("AppNetworkIssue".FromLanguageResource()); } IsLoading = false; }
public async Task HandleResponseSingle() { var expectedAlbum = new LastAlbum { ArtistName = "Crystal Castles", Name = "Crystal Castles", PlayCount = 2206, Mbid = "a432a420-f374-4556-8421-b4ea097c7fe9", Url = new Uri("http://www.last.fm/music/Crystal+Castles/Crystal+Castles"), ListenerCount = null, Images = new LastImageSet( "http://userserve-ak.last.fm/serve/34s/78606386.png", "http://userserve-ak.last.fm/serve/64s/78606386.png", "http://userserve-ak.last.fm/serve/126/78606386.png", "http://userserve-ak.last.fm/serve/300x300/78606386.png"), Tracks = Enumerable.Empty<LastTrack>(), ReleaseDateUtc = null, TopTags = Enumerable.Empty<LastTag>() }; var http = CreateResponseMessage(Encoding.UTF8.GetString(UserApiResponses.UserGetTopAlbumsSingle)); var response = await _command.HandleResponse(http); Assert.IsTrue(response.Success); Assert.AreEqual(1, response.Content.Count); var actualAlbum = response.Content.First(); TestHelper.AssertSerialiseEqual(expectedAlbum, actualAlbum); }
/// <summary> /// Constructor. /// </summary> /// <param name="fetchedRelease">The fetched release.</param> public FetchedReleaseViewModel(LastAlbum fetchedRelease) { FetchedRelease = fetchedRelease; }
internal static LastAlbum ParseJToken(JToken token) { var a = new LastAlbum(); a.Id = token.Value<string>("id"); var artistToken = token["artist"]; switch (artistToken.Type) { case JTokenType.String: a.ArtistName = token.Value<string>("artist"); break; case JTokenType.Object: a.ArtistName = artistToken.Value<string>("name"); break; } var tracksToken = token.SelectToken("tracks"); if (tracksToken != null) { var trackToken = tracksToken.SelectToken("track"); if (trackToken != null) a.Tracks = trackToken.Type == JTokenType.Array ? trackToken.Children().Select(t => LastTrack.ParseJToken(t, a.Name)) : new List<LastTrack>() {LastTrack.ParseJToken(trackToken, a.Name)}; } else { a.Tracks = Enumerable.Empty<LastTrack>(); } var tagsToken = token.SelectToken("toptags"); if (tagsToken != null) { var tagToken = tagsToken.SelectToken("tag"); if (tagToken != null) { a.TopTags = tagToken.Type == JTokenType.Array ? tagToken.Children().Select(token1 => LastTag.ParseJToken(token1)) : new List<LastTag> { LastTag.ParseJToken(tagToken) }; } } else { a.TopTags = Enumerable.Empty<LastTag>(); } a.ListenerCount = token.Value<int?>("listeners"); a.Mbid = token.Value<string>("mbid"); a.Name = token.Value<string>("name"); var playCountStr = token.Value<string>("playcount"); int playCount; if (int.TryParse(playCountStr, out playCount)) { a.PlayCount = playCount; } var images = token.SelectToken("image"); if (images != null) { var imageCollection = LastImageSet.ParseJToken(images); a.Images = imageCollection; } a.Url = new Uri(token.Value<string>("url"), UriKind.Absolute); var dateString = token.Value<string>("releasedate"); DateTimeOffset releaseDate; if (DateTimeOffset.TryParse(dateString, out releaseDate)) { a.ReleaseDateUtc = releaseDate; } return a; }