Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Try fix vip big point error and add functional tests for agent apis #692

Merged
merged 12 commits into from
Apr 29, 2024
Prev Previous commit
Next Next commit
add DailyTaskApiTests
RayWangQvQ committed Apr 23, 2024
commit fd156026f614533f3929faa2312e1f98edb3f18e
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos
{
public enum VipPrivilegeType
{
BCoinCoupon = 1,
MembershipBenefits = 2
}
}
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@ public interface IDailyTaskApi : IBiliBiliApi
[Header("Referer", "https://account.bilibili.com/account/home")]
[Header("Origin", "https://account.bilibili.com")]
[HttpGet("/x/member/web/exp/reward")]
Task<BiliApiResponse<DailyTaskInfo>> GetDailyTaskRewardInfo();
Task<BiliApiResponse<DailyTaskInfo>> GetDailyTaskRewardInfoAsync();

/// <summary>
/// 获取通过投币已获取的经验值
@@ -27,7 +27,7 @@ public interface IDailyTaskApi : IBiliBiliApi
[Header("Referer", "https://www.bilibili.com/")]
[Header("Origin", "https://www.bilibili.com")]
[HttpGet("/x/web-interface/coin/today/exp")]
Task<BiliApiResponse<int>> GetDonateCoinExp();
Task<BiliApiResponse<int>> GetDonateCoinExpAsync();

/// <summary>
/// 获取VIP特权
@@ -36,6 +36,6 @@ public interface IDailyTaskApi : IBiliBiliApi
/// <param name="csrf"></param>
/// <returns></returns>
[HttpPost("/x/vip/privilege/receive?type={type}&csrf={csrf}")]
Task<BiliApiResponse> ReceiveVipPrivilege(int type, string csrf);
Task<BiliApiResponse> ReceiveVipPrivilegeAsync(int type, string csrf);
}
}
4 changes: 2 additions & 2 deletions src/Ray.BiliBiliTool.DomainService/AccountDomainService.cs
Original file line number Diff line number Diff line change
@@ -88,7 +88,7 @@ public async Task<UserInfo> LoginByCookie()
public async Task<DailyTaskInfo> GetDailyTaskStatus()
{
DailyTaskInfo result = new();
BiliApiResponse<DailyTaskInfo> apiResponse = await _dailyTaskApi.GetDailyTaskRewardInfo();
BiliApiResponse<DailyTaskInfo> apiResponse = await _dailyTaskApi.GetDailyTaskRewardInfoAsync();
if (apiResponse.Code == 0)
{
_logger.LogDebug("请求本日任务完成状态成功");
@@ -97,7 +97,7 @@ public async Task<DailyTaskInfo> GetDailyTaskStatus()
else
{
_logger.LogWarning("获取今日任务完成状态失败:{result}", apiResponse.ToJsonStr());
result = (await _dailyTaskApi.GetDailyTaskRewardInfo()).Data;
result = (await _dailyTaskApi.GetDailyTaskRewardInfoAsync()).Data;
//todo:偶发性请求失败,再请求一次,这么写很丑陋,待用polly再框架层面实现
}

2 changes: 1 addition & 1 deletion src/Ray.BiliBiliTool.DomainService/CoinDomainService.cs
Original file line number Diff line number Diff line change
@@ -47,7 +47,7 @@ public async Task<int> GetDonatedCoins()
/// <returns></returns>
private async Task<int> GetDonateCoinExp()
{
return (await _dailyTaskApi.GetDonateCoinExp()).Data;
return (await _dailyTaskApi.GetDonateCoinExpAsync()).Data;
}
#endregion
}
14 changes: 7 additions & 7 deletions src/Ray.BiliBiliTool.DomainService/VipPrivilegeDomainService.cs
Original file line number Diff line number Diff line change
@@ -70,8 +70,8 @@ public async Task<bool> ReceiveVipPrivilege(UserInfo userInfo)
}
*/

var suc1 = await ReceiveVipPrivilege(1);
var suc2 = await ReceiveVipPrivilege(2);
var suc1 = await ReceiveVipPrivilege(VipPrivilegeType.BCoinCoupon);
var suc2 = await ReceiveVipPrivilege(VipPrivilegeType.MembershipBenefits);

if (suc1 | suc2) return true;
return false;
@@ -83,9 +83,9 @@ public async Task<bool> ReceiveVipPrivilege(UserInfo userInfo)
/// 领取大会员每月赠送福利
/// </summary>
/// <param name="type">1.大会员B币券;2.大会员福利</param>
private async Task<bool> ReceiveVipPrivilege(int type)
private async Task<bool> ReceiveVipPrivilege(VipPrivilegeType type)
{
var response = await _dailyTaskApi.ReceiveVipPrivilege(type, _biliBiliCookie.BiliJct);
var response = await _dailyTaskApi.ReceiveVipPrivilegeAsync((int)type, _biliBiliCookie.BiliJct);

var name = GetPrivilegeName(type);
_logger.LogInformation("【领取】{name}", name);
@@ -108,14 +108,14 @@ private async Task<bool> ReceiveVipPrivilege(int type)
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
private string GetPrivilegeName(int type)
private string GetPrivilegeName(VipPrivilegeType type)
{
switch (type)
{
case 1:
case VipPrivilegeType.BCoinCoupon:
return "年度大会员每月赠送的B币券";

case 2:
case VipPrivilegeType.MembershipBenefits:
return "大会员福利/权益";
}

71 changes: 71 additions & 0 deletions test/Ray.BiliBiliTool.Agent.FunctionalTests/DailyTaskApiTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
using FluentAssertions;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos;
using Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces;
using Ray.BiliBiliTool.Console;

namespace Ray.BiliBiliTool.Agent.FunctionalTests
{
public class DailyTaskApiTests
{
private readonly IDailyTaskApi _api;

private readonly BiliCookie _ck;

public DailyTaskApiTests()
{
var envs = new List<string>
{
"--ENVIRONMENT=Development",
"HTTP_PROXY=localhost:8888",
"HTTPS_PROXY=localhost:8888"
};
IHost host = Program.CreateHost(envs.ToArray());
_ck = host.Services.GetRequiredService<BiliCookie>();
_api = host.Services.GetRequiredService<IDailyTaskApi>();
}

[Fact]
public async Task GetDailyTaskRewardInfo_Normal_Success()
{
// Act
BiliApiResponse<DailyTaskInfo> re = await _api.GetDailyTaskRewardInfoAsync();

// Arrange

// Assert
re.Code.Should().Be(0);
re.Data.Should().NotBeNull();
}

[Fact]
public async Task GetDonateCoinExp_Normal_Success()
{
// Act
BiliApiResponse<int> re = await _api.GetDonateCoinExpAsync();

// Arrange

// Assert
re.Code.Should().Be(0);
re.Data.Should().BeGreaterThanOrEqualTo(0);
}

[Fact]
public async Task ReceiveVipPrivilege_Normal_Success()
{
// Act
BiliApiResponse re = await _api.ReceiveVipPrivilegeAsync((int)VipPrivilegeType.BCoinCoupon, _ck.BiliJct);

// Arrange

// Assert
re.Code.Should().BeOneOf(new List<int>
{
0,
73319, //todo: sort out meannings
});
}
}
}