增加Shop API
This commit is contained in:
1 parent
3769193696
commit
5d017740c6
83 files changed
+4451
-696
No files matched your search
@@ -0,0 +1,75 @@
|
||||
using System.Net;
|
||||
using System.Security.Claims;
|
||||
using FreeSql;
|
||||
using MAX.Framework.Security;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Store.Shops.Entities;
|
||||
using Store.Shops.Services;
|
||||
using Store.Users.Contracts;
|
||||
using Store.Users.Contracts.Dtos;
|
||||
using Store.Users.Contracts.Enums;
|
||||
|
||||
namespace Store.Shops.Tests;
|
||||
|
||||
internal sealed class ShopTestContext : IDisposable, ICurrentUser, IUserQueryService
|
||||
{
|
||||
private readonly string path = Path.Combine(Path.GetTempPath(), $"store-shops-{Guid.NewGuid():N}.db");
|
||||
public IFreeSql Db { get; }
|
||||
public string? UserName { get; set; } = "owner";
|
||||
public string? NickName => UserName;
|
||||
public bool IsAuthenticated => UserName != null;
|
||||
public IEnumerable<Claim> Claims => [];
|
||||
public string? GetClaimValue(string type) => null;
|
||||
public T? GetClaimValue<T>(string type) => default;
|
||||
public Task<UserInfo> GetUser(string name) => Task.FromResult(new UserInfo
|
||||
{
|
||||
UserName = name, SaLevel = name == "admin" ? UserAdminLevel.SuperAdmin : UserAdminLevel.Normal
|
||||
});
|
||||
public StubHttp Handler { get; } = new();
|
||||
public PddTokenClient Gateway { get; }
|
||||
public ShopManagementService Service { get; }
|
||||
public IConfiguration Configuration { get; } = new ConfigurationBuilder().AddInMemoryCollection(new Dictionary<string, string?>
|
||||
{
|
||||
["Shops:PddClients:0:ClientId"] = "test-client",
|
||||
["Shops:PddClients:0:ClientSecret"] = "test-secret",
|
||||
["Shops:PddClients:0:RedirectUri"] = "https://example.test/callback"
|
||||
}).Build();
|
||||
|
||||
public ShopTestContext()
|
||||
{
|
||||
Db = new FreeSqlBuilder().UseMappingPriority(FreeSql.Internal.MappingPriorityType.Attribute,
|
||||
FreeSql.Internal.MappingPriorityType.Aop, FreeSql.Internal.MappingPriorityType.FluentApi)
|
||||
.UseConnectionString(DataType.Sqlite, $"Data Source={path};Pooling=False").Build();
|
||||
Db.CodeFirst.ConfigEntity<PddShopEntity>(e => e.Name("pdd_shops"));
|
||||
Db.CodeFirst.ConfigEntity<WeidianShopEntity>(e => e.Name("weidian_shops"));
|
||||
Db.CodeFirst.ConfigEntity<ShopApiAuthEntity>(e => e.Name("shop_auth"));
|
||||
Db.CodeFirst.ConfigEntity<ShopProductQuotaEntity>(e => e.Name("shop_quota"));
|
||||
Db.CodeFirst.SyncStructure(typeof(PddShopEntity), typeof(WeidianShopEntity), typeof(ShopApiAuthEntity), typeof(ShopProductQuotaEntity));
|
||||
Gateway = new(new HttpClient(Handler));
|
||||
Service = new(Db, this, this, Configuration, Gateway);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Gateway.Dispose();
|
||||
Db.Dispose();
|
||||
File.Delete(path);
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class StubHttp : HttpMessageHandler
|
||||
{
|
||||
public Queue<string> Responses { get; } = new();
|
||||
public int Calls { get; private set; }
|
||||
public Uri? LastUri { get; private set; }
|
||||
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken ct)
|
||||
{
|
||||
ct.ThrowIfCancellationRequested();
|
||||
Calls++;
|
||||
LastUri = request.RequestUri;
|
||||
return Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK)
|
||||
{
|
||||
Content = new StringContent(Responses.Count == 0 ? """{"code":0,"data":{"accessToken":"test-token"}}""" : Responses.Dequeue())
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user