From 8f70e434f0e87083211a9035fe73febb22dae6d9 Mon Sep 17 00:00:00 2001 From: real-zony Date: Sat, 8 May 2021 18:30:53 +0800 Subject: [PATCH] test: Add QQ Music Lyric Downloader UnitTest Method. --- .../Lyric/InternalLyricDownloaderNames.cs | 4 +-- .../JsonModel/GetSongDetailsRequest.cs | 8 +++--- .../QQMusic/JsonModel/SongSearchRequest.cs | 2 +- .../QQMusic/JsonModel/SongSearchResponse.cs | 18 +++++-------- .../Lyric/QQMusic/QQLyricDownloader.cs | 8 +++++- .../Infrastructure/Network/NetworkOptions.cs | 2 +- .../Album/NetEaseAlbumDownloader_Tests.cs | 4 +-- .../Exceptions/ErrorCodeHelperTests.cs | 2 +- .../Lyric/QQLyricDownloaderTests.cs | 25 +++++++++++++++++++ .../Infrastructure/Network/WarpClientTests.cs | 2 +- tests/ZonyLrcTools.Tests/TestBase.cs | 1 - 11 files changed, 49 insertions(+), 27 deletions(-) create mode 100644 tests/ZonyLrcTools.Tests/Infrastructure/Lyric/QQLyricDownloaderTests.cs diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/InternalLyricDownloaderNames.cs b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/InternalLyricDownloaderNames.cs index 8a26016..2dafcef 100644 --- a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/InternalLyricDownloaderNames.cs +++ b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/InternalLyricDownloaderNames.cs @@ -9,12 +9,12 @@ namespace ZonyLrcTools.Cli.Infrastructure.Lyric /// 网易云音乐歌词下载器。 /// public const string NetEase = nameof(NetEase); - + /// /// QQ 音乐歌词下载器。 /// public const string QQ = nameof(QQ); - + /// /// 酷狗音乐歌词下载器。 /// diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/NetEase/JsonModel/GetSongDetailsRequest.cs b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/NetEase/JsonModel/GetSongDetailsRequest.cs index 5aeafa0..5934c70 100644 --- a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/NetEase/JsonModel/GetSongDetailsRequest.cs +++ b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/NetEase/JsonModel/GetSongDetailsRequest.cs @@ -9,11 +9,9 @@ namespace ZonyLrcTools.Cli.Infrastructure.Lyric.NetEase.JsonModel SongId = songId; SongIds = $"%5B{songId}%5D"; } - - [JsonProperty("id")] - public int SongId { get; } - [JsonProperty("ids")] - public string SongIds { get; } + [JsonProperty("id")] public int SongId { get; } + + [JsonProperty("ids")] public string SongIds { get; } } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchRequest.cs b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchRequest.cs index 028a532..4345614 100644 --- a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchRequest.cs +++ b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchRequest.cs @@ -48,7 +48,7 @@ namespace ZonyLrcTools.Cli.Infrastructure.Lyric.QQMusic.JsonModel [JsonProperty("needNewCode")] public int UnknownParameter11 { get; set; } - public SongSearchRequest() + protected SongSearchRequest() { UnknownParameter1 = 24; ClientVersion = 1298; diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchResponse.cs b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchResponse.cs index f31323a..b0d0663 100644 --- a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchResponse.cs +++ b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchResponse.cs @@ -5,34 +5,28 @@ namespace ZonyLrcTools.Cli.Infrastructure.Lyric.QQMusic.JsonModel { public class SongSearchResponse { - [JsonProperty("code")] - public int StatusCode { get; set; } + [JsonProperty("code")] public int StatusCode { get; set; } - [JsonProperty("data")] - public QQMusicInnerDataModel Data { get; set; } + [JsonProperty("data")] public QQMusicInnerDataModel Data { get; set; } } public class QQMusicInnerDataModel { - [JsonProperty("song")] - public QQMusicInnerSongModel Song { get; set; } + [JsonProperty("song")] public QQMusicInnerSongModel Song { get; set; } } public class QQMusicInnerSongModel { - [JsonProperty("list")] - public List SongItems { get; set; } + [JsonProperty("list")] public List SongItems { get; set; } } public class QQMusicInnerSongItem { - [JsonProperty("mid")] - public string SongId { get; set; } + [JsonProperty("mid")] public string SongId { get; set; } } public class AlbumInfo { - [JsonProperty("id")] - public long Id { get; set; } + [JsonProperty("id")] public long Id { get; set; } } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/QQLyricDownloader.cs b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/QQLyricDownloader.cs index 930682e..a3b23ca 100644 --- a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/QQLyricDownloader.cs +++ b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/QQLyricDownloader.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using ZonyLrcTools.Cli.Infrastructure.Lyric.QQMusic.JsonModel; using ZonyLrcTools.Cli.Infrastructure.Network; namespace ZonyLrcTools.Cli.Infrastructure.Lyric.QQMusic @@ -10,6 +11,8 @@ namespace ZonyLrcTools.Cli.Infrastructure.Lyric.QQMusic private readonly IWarpHttpClient _warpHttpClient; private readonly ILyricItemCollectionFactory _lyricItemCollectionFactory; + private const string QQSearchMusicUrl = @"https://c.y.qq.com/soso/fcgi-bin/client_search_cp"; + public QQLyricDownloader(IWarpHttpClient warpHttpClient, ILyricItemCollectionFactory lyricItemCollectionFactory) { @@ -17,8 +20,11 @@ namespace ZonyLrcTools.Cli.Infrastructure.Lyric.QQMusic _lyricItemCollectionFactory = lyricItemCollectionFactory; } - protected override ValueTask DownloadDataAsync(LyricDownloaderArgs args) + protected override async ValueTask DownloadDataAsync(LyricDownloaderArgs args) { + var searchResult = await _warpHttpClient.PostAsync( + QQSearchMusicUrl, + new SongSearchRequest(args.SongName, args.Artist)); throw new System.NotImplementedException(); } diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Network/NetworkOptions.cs b/src/ZonyLrcTools.Cli/Infrastructure/Network/NetworkOptions.cs index 3620fe3..e7a39ca 100644 --- a/src/ZonyLrcTools.Cli/Infrastructure/Network/NetworkOptions.cs +++ b/src/ZonyLrcTools.Cli/Infrastructure/Network/NetworkOptions.cs @@ -9,7 +9,7 @@ namespace ZonyLrcTools.Cli.Infrastructure.Network /// 是否启用了网络代理功能。 /// public bool Enable { get; set; } - + /// /// 代理服务器的 Ip。 /// diff --git a/tests/ZonyLrcTools.Tests/Infrastructure/Album/NetEaseAlbumDownloader_Tests.cs b/tests/ZonyLrcTools.Tests/Infrastructure/Album/NetEaseAlbumDownloader_Tests.cs index db9821a..6ebbe21 100644 --- a/tests/ZonyLrcTools.Tests/Infrastructure/Album/NetEaseAlbumDownloader_Tests.cs +++ b/tests/ZonyLrcTools.Tests/Infrastructure/Album/NetEaseAlbumDownloader_Tests.cs @@ -20,11 +20,11 @@ namespace ZonyLrcTools.Tests.Infrastructure.Album downloader.ShouldNotBeNull(); var albumBytes = await downloader.DownloadAsync("东方红", null); albumBytes.Length.ShouldBeGreaterThan(0); - + // 显示具体的图像。 var tempAlbumPath = Path.Combine(Directory.GetCurrentDirectory(), "tempAlbum.png"); File.Delete(tempAlbumPath); - + await using var file = File.Create(tempAlbumPath); await using var ws = new BinaryWriter(file); ws.Write(albumBytes); diff --git a/tests/ZonyLrcTools.Tests/Infrastructure/Exceptions/ErrorCodeHelperTests.cs b/tests/ZonyLrcTools.Tests/Infrastructure/Exceptions/ErrorCodeHelperTests.cs index 620eaf8..3b26c6a 100644 --- a/tests/ZonyLrcTools.Tests/Infrastructure/Exceptions/ErrorCodeHelperTests.cs +++ b/tests/ZonyLrcTools.Tests/Infrastructure/Exceptions/ErrorCodeHelperTests.cs @@ -10,7 +10,7 @@ namespace ZonyLrcTools.Tests.Infrastructure.Exceptions public void LoadMessage_Test() { ErrorCodeHelper.LoadErrorMessage(); - + ErrorCodeHelper.ErrorMessages.ShouldNotBeNull(); ErrorCodeHelper.ErrorMessages.Count.ShouldBe(11); } diff --git a/tests/ZonyLrcTools.Tests/Infrastructure/Lyric/QQLyricDownloaderTests.cs b/tests/ZonyLrcTools.Tests/Infrastructure/Lyric/QQLyricDownloaderTests.cs new file mode 100644 index 0000000..06b381b --- /dev/null +++ b/tests/ZonyLrcTools.Tests/Infrastructure/Lyric/QQLyricDownloaderTests.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Xunit; +using ZonyLrcTools.Cli.Infrastructure.Lyric; + +namespace ZonyLrcTools.Tests.Infrastructure.Lyric +{ + public class QQLyricDownloaderTests : TestBase + { + [Fact] + public async Task DownloadAsync_Test() + { + var downloaderList = ServiceProvider.GetRequiredService>(); + var qqDownloader = downloaderList.FirstOrDefault(t => t.DownloaderName == InternalLyricDownloaderNames.QQ); + + qqDownloader.ShouldNotBeNull(); + var lyric = await qqDownloader.DownloadAsync("Hollow", "Janet Leon"); + lyric.ShouldNotBeNull(); + lyric.IsPruneMusic.ShouldBe(false); + } + } +} \ No newline at end of file diff --git a/tests/ZonyLrcTools.Tests/Infrastructure/Network/WarpClientTests.cs b/tests/ZonyLrcTools.Tests/Infrastructure/Network/WarpClientTests.cs index cf646f0..a90b634 100644 --- a/tests/ZonyLrcTools.Tests/Infrastructure/Network/WarpClientTests.cs +++ b/tests/ZonyLrcTools.Tests/Infrastructure/Network/WarpClientTests.cs @@ -40,7 +40,7 @@ namespace ZonyLrcTools.Tests.Infrastructure.Network var client = ServiceProvider.GetRequiredService(); var response = await client.GetAsync(@"https://www.baidu.com"); - + response.ShouldNotBeNull(); response.ShouldContain("百度"); } diff --git a/tests/ZonyLrcTools.Tests/TestBase.cs b/tests/ZonyLrcTools.Tests/TestBase.cs index a8c00cd..ffdd77f 100644 --- a/tests/ZonyLrcTools.Tests/TestBase.cs +++ b/tests/ZonyLrcTools.Tests/TestBase.cs @@ -2,7 +2,6 @@ using System; using Microsoft.Extensions.DependencyInjection; using ZonyLrcTools.Cli.Commands; using ZonyLrcTools.Cli.Infrastructure.DependencyInject; -using ZonyLrcTools.Cli.Infrastructure.Extensions; namespace ZonyLrcTools.Tests {