public async Task CanGetMusic() { // ARRANGE string id = Guid.NewGuid().ToString(); MusicDocument doc = new MusicDocument { Id = id, Artist = "Linkin Park", Album = "Meteora", ArtistAlphabetIndex = AlphabetType.L, IsFavorite = true, Length = 185, // 3 mins and 5 secs Title = "Numb", Path = "www.google.com/numb.mp3", CreatedDate = DateTime.UtcNow, UpdatedDate = DateTime.UtcNow }; this._repo .Setup(m => m.GetMusicAsync(id)) .ReturnsAsync(doc); // ACT MusicResponse response = await this._service.GetMusicAsync(id); // ASSERT Assert.NotNull(response); AssertEqual(expected: response, actual: doc); this._repo.Verify(m => m.GetMusicAsync(id), Times.Once); }
/// <summary> /// Convert audio card as music resposne. /// Thumbnail image size limitation is not clear. /// </summary> /// <param name="activity">Message activity from bot.</param> /// <param name="attachment">An <see cref="Attachment"/> contains audio card content.</param> /// <returns>List of WeChat response message.</returns> private async Task <IList <IResponseMessageBase> > ProcessAudioCardAsync(IMessageActivity activity, Attachment attachment) { var messages = new List <IResponseMessageBase>(); var audioCard = attachment.ContentAs <AudioCard>(); var body = audioCard.Subtitle; body = AddLine(body, audioCard.Text); var music = new Music { Title = audioCard.Title, MusicUrl = audioCard.Media[0].Url, HQMusicUrl = audioCard.Media[0].Url, Description = body, }; // upload thumbnail image. if (!string.IsNullOrEmpty(audioCard.Image?.Url)) { var reponseList = await MediaContentToWeChatResponse(activity, audioCard.Image.Alt, audioCard.Image.Url, MediaTypes.Image).ConfigureAwait(false); if (reponseList is ImageResponse imageResponse) { music.ThumbMediaId = imageResponse.Image.MediaId; } } var musicResponse = new MusicResponse(activity.From.Id, activity.Recipient.Id, music); messages.Add(musicResponse); messages.AddRange(ProcessCardActions(activity, audioCard.Buttons)); return(messages); }
private void AssertEqual(MusicResponse expected, MusicDocument actual) { Assert.Equal(expected.Id, actual.Id); Assert.Equal(expected.Artist, actual.Artist); Assert.Equal(expected.ArtistAlphabetCategory, actual.ArtistAlphabetIndex); Assert.Equal(expected.IsFavorite, actual.IsFavorite); Assert.Equal(expected.Length, actual.Length); Assert.Equal(expected.Path, actual.Path); Assert.Equal(expected.Title, actual.Title); }
public List <Track> GetSongs(int albumId) { string results = _client.GetAlbumSongs(albumId); if (string.IsNullOrEmpty(results)) { return(null); } MusicResponse musicResopnse = DeserializeContent(results); return(musicResopnse.Message.Body.AlbumTracks); }
public List <Album> GetAlbums(int artistId) { string results = _client.GetAlbums(artistId); if (string.IsNullOrEmpty(results)) { return(null); } MusicResponse musicResopnse = DeserializeContent(results); return(musicResopnse.Message.Body.Albums); }
private void AssertEqual(MusicResponse expected, IEnumerable <MusicDocument> actual) { int foundCount = 0; MusicDocument doc = actual.FirstOrDefault(x => x.Id == expected.Id); if (doc != null) { AssertEqual(expected: expected, actual: doc); foundCount++; } Assert.Equal(foundCount, 1); }
public IActionResult Post(IFormFile file) { if (file == null && HttpContext.Request.Form.Files.Count > 0) { file = HttpContext.Request.Form.Files[0]; } if (file == null) { Log.Error("File is missing"); return(StatusCode(StatusCodes.Status400BadRequest, "Load file, please...")); } InfoResponse response = new InfoResponse(); MusicResponse music = new MusicResponse(); if (!file.FileName.EndsWith(".mp3")) { Log.Error("Failed format file, file not mp3"); return(StatusCode(StatusCodes.Status400BadRequest, music)); } using (Stream stream = file.OpenReadStream()) { Log.Information($"Get info on file"); response = _cloud.GetInfo(stream); Log.Information($"Return info on file"); music.Title = response.Title; music.Artist = response.Artist; Log.Information("Write info on music"); } switch (response.Status) { case ResponseStatus.OK: return(StatusCode(StatusCodes.Status200OK, music)); case ResponseStatus.NotFound: return(StatusCode(StatusCodes.Status404NotFound, music)); case ResponseStatus.FileLarge: return(StatusCode(StatusCodes.Status413RequestEntityTooLarge, music)); case ResponseStatus.FileSmall: return(StatusCode(StatusCodes.Status411LengthRequired, music)); } return(StatusCode(StatusCodes.Status200OK, music)); }
public Lyrics GetLyrics(int songId) { string results = _client.GetSongLyric(songId); if (string.IsNullOrEmpty(results)) { return(null); } try { MusicResponse musicResopnse = DeserializeContent(results); return(musicResopnse.Message.Body.Lyrics); } catch (Exception ex) { Console.WriteLine($"This song failed: {songId}"); //throw; return(null); } }