test(auth): persist initial grant audit in PostgreSQL

Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com>
This commit is contained in:
XiaoSeS 2026-10-10 14:28:57 +08:00
parent e8de0059ef
commit 6842b40132
2 changed files with 10 additions and 2 deletions

View file

@ -22,4 +22,4 @@
- [x] 验证两个开关的四种组合、直接 API 绕过尝试、已有会话、DB 故障与多实例设置可见性(本地 Compose HTTP 实测;DB 故障与两个服务实例读取使用 `LocalAuthSettingsServiceTest`)。
- [x] 验证首次登录授权、准入优先、已有账号不补授权、同邮箱独立账号、邮箱验证、规则停用、角色人工修改和并发首次登录(OAuth/授权单测与 PostgreSQL 真实事务测试;本地 Compose 未接入真实外部 IdP)。
- [x] 验证一次性部署初始化、角色规则删除后重启、非超管越权、审计记录和浏览器页面流程(初始化单测、Compose 权限与审计实测、Playwright 浏览器操作;常驻 smoke 覆盖公开能力与后台配置读取)。
- [x] 验证一次性部署初始化、角色规则删除后重启、非超管越权、审计记录和浏览器页面流程(初始化单测、Compose 权限与审计实测、PostgreSQL 自动授权审计断言、Playwright 浏览器操作;常驻 smoke 覆盖公开能力与后台配置读取)。

View file

@ -18,7 +18,9 @@ import com.iflytek.skillhub.domain.namespace.GlobalNamespaceMembershipService;
import com.iflytek.skillhub.domain.user.UserAccount;
import com.iflytek.skillhub.domain.user.UserAccountRepository;
import com.iflytek.skillhub.domain.user.UserStatus;
import com.iflytek.skillhub.infra.jpa.AuditLogJpaRepository;
import jakarta.persistence.EntityManager;
import java.time.Clock;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.CountDownLatch;
@ -69,6 +71,7 @@ class SystemAuthSettingsPostgresTest {
@Autowired private IdentityBindingRepository identities;
@Autowired private UserRoleBindingRepository userRoles;
@Autowired private PlatformTransactionManager transactionManager;
@Autowired private AuditLogJpaRepository auditLogs;
@Autowired private EntityManager entityManager;
@Autowired private JdbcTemplate jdbc;
@ -193,6 +196,11 @@ class SystemAuthSettingsPostgresTest {
assertThat(consumed.getMatchedSubject()).isIn(firstClaims.subject(), secondClaims.subject());
assertThat(userRoles.findByUserId(firstPrincipal.userId()).size()
+ userRoles.findByUserId(secondPrincipal.userId()).size()).isEqualTo(1);
assertThat(jdbc.queryForObject("SELECT COUNT(*) FROM audit_log WHERE action = ? AND target_id = ?",
Long.class, "INITIAL_ROLE_GRANTED", ruleId)).isEqualTo(1L);
assertThat(jdbc.queryForObject("SELECT detail_json ->> 'userId' FROM audit_log "
+ "WHERE action = ? AND target_id = ?", String.class, "INITIAL_ROLE_GRANTED", ruleId))
.isEqualTo(consumed.getGrantedUserId());
}
}
@ -200,7 +208,7 @@ class SystemAuthSettingsPostgresTest {
return new IdentityBindingService(identities, users, userRoles,
mock(GlobalNamespaceMembershipService.class), mock(ApplicationEventPublisher.class),
transactionManager, new InitialExternalRoleGrantService(
rules, userRoles, mock(AuditLogService.class)));
rules, userRoles, new AuditLogService(auditLogs, Clock.systemUTC())));
}
private static PlatformPrincipal firstLogin(IdentityBindingService service, OAuthClaims claims,