网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
using System.Collections.Generic;
using System.Net.Http;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver.Linq;

namespace Dpz.Core.ServiceTest;

[TestFixture]
public class MusicServiceTest : Basic
{
    [Test]
    public async Task CleanDataAsyncTest()
    {
        var repository = new Repository<Music>(ConnectionString);
        var list = await repository.SearchFor(x => true).ToListAsync();

        var client = new HttpClient();

        var updatedMusics = new List<Music>();
        foreach (var item in list)
        {
            if (string.IsNullOrEmpty(item.LyricUrl))
            {
                continue;
            }

            var request = new HttpRequestMessage(HttpMethod.Get, item.LyricUrl);
            var response = await client.SendAsync(request);

            if (!response.IsSuccessStatusCode)
            {
                continue;
            }

            var lyricContent = await response.Content.ReadAsStringAsync();
            item.LyricContent = lyricContent;
            updatedMusics.Add(item);
        }

        await repository.UpdateAsync(updatedMusics);
    }


    public class MusicTest : BaseEntity
    {
        /// <summary>
        /// 音乐Url
        /// </summary>
        public string? MusicUrl { get; set; }

        /// <summary>
        /// 歌词Url
        /// </summary>
        public string? LyricUrl { get; set; }

        /// <summary>
        /// 音乐源文件名
        /// </summary>
        public string? FileName { get; set; }

        /// <summary>
        /// 音乐标题
        /// </summary>
        public string? Title { get; set; }

        /// <summary>
        /// 音乐时长
        /// </summary>
        public TimeSpan Duration { get; set; }

        /// <summary>
        /// 音乐大小
        /// </summary>
        public long MusicLength { get; set; }

        /// <summary>
        /// 艺术家
        /// </summary>
        public string? Artist { get; set; }

        /// <summary>
        /// 上传时间
        /// </summary>
        [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
        public DateTime UploadTime { get; set; }

        /// <summary>
        /// 最后修改时间
        /// </summary>
        [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
        public DateTime LastUpdateTime { get; set; }

        /// <summary>
        /// 封面ID
        /// </summary>
        public string? CoverUrl { get; set; }

        /// <summary>
        /// 来源
        /// </summary>
        public string? From { get; set; }

        /// <summary>
        /// 分组
        /// </summary>
        public List<string>? Group { get; set; }
    }


    [Test]
    public async Task GetMusicsAsyncTest()
    {
        var repository = new Repository<MusicTest>(ConnectionString, nameof(Music));
        var list = await repository.SearchFor(x => true).ToListAsync();
        
        Assert.IsNotNull(list);
        
        Assert.IsNotEmpty(list);
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

上述代码是一个单元测试类 MusicServiceTest,用于测试与音乐相关的服务。它包含两个主要的测试方法:CleanDataAsyncTestGetMusicsAsyncTest。以下是对这两个方法及其相关代码的详细解释:

1. CleanDataAsyncTest 方法

这个方法的主要功能是清理和更新音乐数据,特别是从指定的歌词 URL 获取歌词内容并将其存储在音乐对象中。具体步骤如下:

  • 获取音乐数据:通过 Repository<Music> 类从数据库中检索所有音乐记录。SearchFor(x => true) 表示获取所有记录。

  • 创建 HTTP 客户端:使用 HttpClient 创建一个新的 HTTP 客户端实例,用于发送 HTTP 请求。

  • 遍历音乐列表:对每个音乐项进行遍历:

    • 如果 LyricUrl 为空,则跳过该项。
    • 发送 GET 请求到 LyricUrl
    • 如果响应状态不是成功,则跳过该项。
    • 如果成功,读取响应内容并将其存储在 LyricContent 属性中。
    • 将更新后的音乐项添加到 updatedMusics 列表中。
  • 更新数据库:最后,调用 repository.UpdateAsync(updatedMusics) 方法将更新后的音乐列表保存回数据库。

2. GetMusicsAsyncTest 方法

这个方法的功能是测试从数据库中获取音乐记录的能力。具体步骤如下:

  • 获取音乐数据:通过 Repository<MusicTest> 类从数据库中检索所有音乐记录。这里使用了 nameof(Music) 作为集合名称。

  • 断言检查

    • 使用 Assert.IsNotNull(list) 确保获取的列表不为 null。
    • 使用 Assert.IsNotEmpty(list) 确保列表中至少有一个音乐记录。

3. MusicTest

这是一个模型类,表示音乐对象的结构。它包含多个属性,描述音乐的各个方面,例如:

  • MusicUrl:音乐的 URL。
  • LyricUrl:歌词的 URL。
  • FileName:音乐源文件名。
  • Title:音乐标题。
  • Duration:音乐时长。
  • MusicLength:音乐文件的大小。
  • Artist:艺术家名称。
  • UploadTimeLastUpdateTime:上传和最后修改的时间。
  • CoverUrl:封面图片的 URL。
  • From:音乐的来源。
  • Group:音乐的分组。

总结

整体来看,这段代码的目的是测试音乐服务的功能,包括从数据库中获取音乐记录和更新歌词内容。通过使用 HTTP 请求获取歌词并更新数据库,确保音乐数据的完整性和准确性。

loading