forked from gongxuegit/tiku-backend.net
feat: add referral qrcode generation provider
This commit is contained in:
@@ -81,7 +81,8 @@ public sealed class ReferralEndpointTests
|
||||
[Fact]
|
||||
public async Task Member_can_bind_referral_and_create_qrcode()
|
||||
{
|
||||
await using var factory = new ApiTestFactory();
|
||||
var qrcodeGenerator = new FakeReferralQrcodeGenerator();
|
||||
await using var factory = new ApiTestFactory(referralQrcodeGenerator: qrcodeGenerator);
|
||||
var seed = await SeedReferralAsync(factory, includeCode: true);
|
||||
using var client = factory.CreateClient();
|
||||
await LoginAsync(client, seed.Student);
|
||||
@@ -106,7 +107,12 @@ public sealed class ReferralEndpointTests
|
||||
Assert.Equal(seed.Referrer.UserId, bindItem.Lead.ReferrerUserId);
|
||||
Assert.Equal(HttpStatusCode.OK, qrcode.StatusCode);
|
||||
Assert.Equal("Ready", qrcodeItem!.Status);
|
||||
Assert.StartsWith("miniapp://", qrcodeItem.QrcodeUrl, StringComparison.Ordinal);
|
||||
Assert.Equal("https://cdn.example.test/referral/qrcode.png", qrcodeItem.QrcodeUrl);
|
||||
Assert.Equal(1, qrcodeGenerator.CallCount);
|
||||
Assert.Equal("wechat-miniapp", qrcodeGenerator.LastRequest!.Provider);
|
||||
Assert.Equal("pages/home/index", qrcodeGenerator.LastRequest.Page);
|
||||
Assert.Equal($"ref={qrcodeItem.RefCode}", qrcodeGenerator.LastRequest.Scene);
|
||||
Assert.Equal("fake-referral-qrcode-generator", qrcodeItem.Metadata.GetProperty("generatedBy").GetString());
|
||||
|
||||
using var scope = factory.Services.CreateScope();
|
||||
var dbContext = scope.ServiceProvider.GetRequiredService<TikuDbContext>();
|
||||
@@ -308,6 +314,24 @@ public sealed class ReferralEndpointTests
|
||||
return document.RootElement.Clone();
|
||||
}
|
||||
|
||||
private sealed class FakeReferralQrcodeGenerator : IReferralQrcodeGenerator
|
||||
{
|
||||
public int CallCount { get; private set; }
|
||||
public ReferralQrcodeGenerateRequest? LastRequest { get; private set; }
|
||||
|
||||
public Task<ReferralQrcodeGenerateResult> GenerateAsync(
|
||||
ReferralQrcodeGenerateRequest request,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
CallCount++;
|
||||
LastRequest = request;
|
||||
return Task.FromResult(new ReferralQrcodeGenerateResult(
|
||||
"https://cdn.example.test/referral/qrcode.png",
|
||||
request.Provider,
|
||||
JsonSerializer.SerializeToElement(new { generatedBy = "fake-referral-qrcode-generator" })));
|
||||
}
|
||||
}
|
||||
|
||||
private sealed record LoginSeed(Guid TenantId, Guid UserId, string Phone);
|
||||
|
||||
private sealed record ReferralSeed(
|
||||
|
||||
Reference in New Issue
Block a user