feat: 完成分享、单会话与发布审批改造

- 增加工作流协作分享与知识库卡片分享入口,统一低版本浏览器复制反馈

- Web 新登录替换旧会话,并保持 API Key 会话隔离

- 发布审批增加必填说明并在审批详情展示

- 账号重置与导入改用可配置默认强密码
This commit is contained in:
2026-07-23 16:09:31 +08:00
parent caa1f07b66
commit 5a42826d44
71 changed files with 3191 additions and 132 deletions

View File

@@ -0,0 +1,67 @@
package tech.easyflow.approval.support;
import org.junit.Assert;
import org.junit.Test;
import tech.easyflow.approval.enums.ApprovalActionType;
import tech.easyflow.common.web.exceptions.BusinessException;
/**
* {@link ApprovalApplicationReasonPolicy} 测试。
*/
public class ApprovalApplicationReasonPolicyTest {
/**
* 验证命中发布审批时说明必填并去除首尾空白。
*/
@Test
public void shouldNormalizeRequiredPublishReason() {
String result = ApprovalApplicationReasonPolicy.normalize(
true,
ApprovalActionType.PUBLISH.getCode(),
" 修复校验逻辑并补充测试 "
);
Assert.assertEquals("修复校验逻辑并补充测试", result);
}
/**
* 验证命中发布审批时拒绝空说明。
*/
@Test(expected = BusinessException.class)
public void shouldRejectBlankRequiredPublishReason() {
ApprovalApplicationReasonPolicy.normalize(
true,
ApprovalActionType.PUBLISH.getCode(),
" "
);
}
/**
* 验证命中发布审批时拒绝超过 500 字的说明。
*/
@Test(expected = BusinessException.class)
public void shouldRejectOversizedRequiredPublishReason() {
ApprovalApplicationReasonPolicy.normalize(
true,
ApprovalActionType.PUBLISH.getCode(),
"a".repeat(501)
);
}
/**
* 验证未命中审批或非发布动作无需说明。
*/
@Test
public void shouldIgnoreReasonWhenItIsNotRequired() {
Assert.assertNull(ApprovalApplicationReasonPolicy.normalize(
false,
ApprovalActionType.PUBLISH.getCode(),
null
));
Assert.assertNull(ApprovalApplicationReasonPolicy.normalize(
true,
ApprovalActionType.OFFLINE.getCode(),
null
));
}
}