feat: 完成云同步、语音控制与多平台扩展基础架构搭建
本次提交完成了项目核心基础架构升级: 1. 新增动态API中间件与权限控制系统,支持匿名/鉴权接口分离 2. 搭建云同步服务体系,包含认证、任务同步、安全策略等核心模块 3. 实现语音控制全链路,从STT/意图解析到命令执行 4. 新增任务类型、附件实体与相关仓储接口 5. 重构前端配置与代理规则,统一后端端口为5057 6. 新增多平台测试项目与CI脚本优化 7. 完善项目文档与代码注释规范 移除了旧版迁移文件与冗余代理配置,调整项目结构适配跨平台部署需求。
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
using Hua.Todo.Core.Entities;
|
||||
using Xunit;
|
||||
|
||||
namespace Hua.Todo.Host.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// TaskEntity 单元测试。
|
||||
/// </summary>
|
||||
public class TaskEntityTests
|
||||
{
|
||||
/// <summary>
|
||||
/// 测试 TaskEntity 继承自 FullAuditedEntityWithUser。
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void TaskEntity_InheritsFromFullAuditedEntityWithUser()
|
||||
{
|
||||
// Arrange & Act
|
||||
var task = new TaskEntity();
|
||||
|
||||
// Assert
|
||||
Assert.IsAssignableFrom<FullAuditedEntityWithUser<Guid, UserEntity>>(task);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试 TaskEntity 主键为 Guid 类型。
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void TaskEntity_IdIsGuid()
|
||||
{
|
||||
// Arrange & Act
|
||||
var task = new TaskEntity();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(Guid.Empty, task.Id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试 TaskEntity 默认值。
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void TaskEntity_DefaultValues()
|
||||
{
|
||||
// Arrange & Act
|
||||
var task = new TaskEntity();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(string.Empty, task.Title);
|
||||
Assert.Equal(TaskPriority.Medium, task.Priority);
|
||||
Assert.False(task.IsCompleted);
|
||||
Assert.Null(task.ParentTaskId);
|
||||
Assert.Empty(task.SubTasks);
|
||||
Assert.False(task.IsDeleted);
|
||||
Assert.Null(task.DeletionTime);
|
||||
Assert.Null(task.DeleterId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试创建任务时生成 Guid。
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void TaskEntity_NewInstance_HasUniqueId()
|
||||
{
|
||||
// Arrange & Act
|
||||
var task1 = new TaskEntity { Id = Guid.NewGuid() };
|
||||
var task2 = new TaskEntity { Id = Guid.NewGuid() };
|
||||
|
||||
// Assert
|
||||
Assert.NotEqual(task1.Id, task2.Id);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// FullAuditedEntityWithUser 基类单元测试。
|
||||
/// </summary>
|
||||
public class FullAuditedEntityWithUserTests
|
||||
{
|
||||
/// <summary>
|
||||
/// 测试 ABP 审计字段默认值。
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void FullAuditedEntityWithUser_DefaultValues()
|
||||
{
|
||||
// Arrange & Act
|
||||
var entity = new TestAuditedEntity();
|
||||
|
||||
// Assert
|
||||
Assert.Equal(Guid.Empty, entity.Id);
|
||||
Assert.False(entity.IsDeleted);
|
||||
Assert.Null(entity.DeletionTime);
|
||||
Assert.Null(entity.DeleterId);
|
||||
Assert.Null(entity.ExtraProperties);
|
||||
Assert.Null(entity.ConcurrencyStamp);
|
||||
Assert.Equal(default, entity.CreationTime);
|
||||
Assert.Null(entity.CreatorId);
|
||||
Assert.Null(entity.LastModificationTime);
|
||||
Assert.Null(entity.LastModifierId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试 IUser 接口实现。
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void UserEntity_ImplementsIUser()
|
||||
{
|
||||
// Arrange & Act
|
||||
var user = new UserEntity
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
UserName = "testuser"
|
||||
};
|
||||
|
||||
// Assert
|
||||
Assert.IsAssignableFrom<IUser<Guid>>(user);
|
||||
Assert.Equal("testuser", user.UserName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试子类。
|
||||
/// </summary>
|
||||
private class TestAuditedEntity : FullAuditedEntityWithUser<Guid, UserEntity>
|
||||
{
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user