feat: auto-join scoped Feishu OAuth users

This commit is contained in:
2026-07-11 14:00:43 +08:00
parent 3bf643ff4d
commit 6ed56ddfc8
7 changed files with 129 additions and 28 deletions
+6 -6
View File
@@ -662,8 +662,8 @@ describe("trigger full lifecycle (integration)", () => {
await trigger(makeEvent("chat-bound-unknown", "@_user_1 写教案", "ou_bound_unknown"), rt);
expect(rt.sentTexts).toContain(
"请先通过飞书登录建立身份https://educraft.example.test/auth/feishu/test-default\n" +
"登录后仍需由组织管理员将你加入组织。",
"请先通过飞书登录并加入组织https://educraft.example.test/auth/feishu/test-default\n" +
"完成后返回群聊重试。",
);
expect(rt.sentTexts).not.toContain("无权限触发。");
expect(runAgentCalls).toHaveLength(0);
@@ -684,7 +684,7 @@ describe("trigger full lifecycle (integration)", () => {
await trigger(makeEvent("chat-bound-non-member", "@_user_1 写教案", "ou_bound_non_member"), rt);
expect(rt.sentTexts).toContain(
"你已完成飞书登录,但尚未加入该组织。请联系组织管理员为你开通成员权限。",
"你尚未加入该组织,或成员资格已被移除。请联系组织管理员。",
);
expect(rt.sentTexts).not.toContain("无权限触发。");
expect(runAgentCalls).toHaveLength(0);
@@ -1011,8 +1011,8 @@ describe("trigger full lifecycle (integration)", () => {
await trigger(makeEvent("chat-UNKNOWN", "@_user_1 写教案", "ou_unknown_user"), rt);
expect(rt.sentTexts).toContain(
"请先通过飞书登录建立身份https://educraft.example.test/auth/feishu/test-default\n" +
"登录后仍需由组织管理员将你加入组织。",
"请先通过飞书登录并加入组织https://educraft.example.test/auth/feishu/test-default\n" +
"完成后返回群聊重试。",
);
expect(rt.sentCards).toHaveLength(0);
const runs = await prisma.agentRun.findMany();
@@ -1033,7 +1033,7 @@ describe("trigger full lifecycle (integration)", () => {
await trigger(makeEvent("chat-unbound", "@_user_1 写教案", "ou_logged_in_not_member"), rt);
expect(rt.sentTexts).toContain(
"你已完成飞书登录,但尚未加入该组织。请联系组织管理员为你开通成员权限。",
"你尚未加入该组织,或成员资格已被移除。请联系组织管理员。",
);
expect(rt.sentTexts.join("\n")).not.toContain("/auth/feishu/");
await expect(prisma.agentRun.count()).resolves.toBe(0);