





















@@ -222,6 +222,33 @@ function barnacleGithub(
222222return { calls, github };
223223}
224224225+function expectedIssueUpdate(issue_number: number, state: string) {
226+return {
227+owner: "openclaw",
228+repo: "openclaw",
229+ issue_number,
230+ state,
231+};
232+}
233+234+function expectedRemoveLabel(issue_number: number, name: string) {
235+return {
236+owner: "openclaw",
237+repo: "openclaw",
238+ issue_number,
239+ name,
240+};
241+}
242+243+function expectedAddLabels(issue_number: number, labels: string[]) {
244+return {
245+owner: "openclaw",
246+repo: "openclaw",
247+ issue_number,
248+ labels,
249+};
250+}
251+225252describe("barnacle-auto-response", () => {
226253it("keeps Barnacle-owned labels documented and ClawHub spelled correctly", () => {
227254expect(managedLabelSpecs["r: skill"].description).toContain("ClawHub");
@@ -505,12 +532,10 @@ describe("barnacle-auto-response", () => {
505532},
506533});
507534508-expect(calls.createComment).toContainEqual(
509-expect.objectContaining({
510-body: expect.stringContaining("false positive"),
511-}),
512-);
513-expect(calls.update).toContainEqual(expect.objectContaining({ state: "closed" }));
535+expect(calls.createComment).toHaveLength(1);
536+expect(calls.createComment[0]?.issue_number).toBe(456);
537+expect(calls.createComment[0]?.body).toContain("false positive");
538+expect(calls.update).toStrictEqual([expectedIssueUpdate(456, "closed")]);
514539});
515540516541it("does not respond to maintainer comments on contributor items", async () => {
@@ -575,15 +600,11 @@ describe("barnacle-auto-response", () => {
575600},
576601});
577602578-expect(calls.removeLabel).toContainEqual(
579-expect.objectContaining({ name: "r: too-many-prs" }),
580-);
581-expect(calls.createComment).not.toContainEqual(
582-expect.objectContaining({
583-body: expect.stringContaining("more than 20 active PRs"),
584-}),
585-);
586-expect(calls.update).not.toContainEqual(expect.objectContaining({ state: "closed" }));
603+expect(calls.removeLabel).toStrictEqual([expectedRemoveLabel(123, "r: too-many-prs")]);
604+expect(
605+calls.createComment.every((call) => !call.body.includes("more than 20 active PRs")),
606+).toBe(true);
607+expect(calls.update).toStrictEqual([]);
587608}
588609});
589610@@ -606,7 +627,7 @@ describe("barnacle-auto-response", () => {
606627},
607628});
608629609-expect(calls.removeLabel).toContainEqual(expect.objectContaining({ name: "r: too-many-prs" }));
630+expect(calls.removeLabel).toStrictEqual([expectedRemoveLabel(123, "r: too-many-prs")]);
610631expect(calls.createComment).toStrictEqual([]);
611632expect(calls.update).toStrictEqual([]);
612633});
@@ -632,7 +653,7 @@ describe("barnacle-auto-response", () => {
632653},
633654});
634655635-expect(calls.removeLabel).toContainEqual(expect.objectContaining({ name: "r: too-many-prs" }));
656+expect(calls.removeLabel).toStrictEqual([expectedRemoveLabel(123, "r: too-many-prs")]);
636657expect(calls.createComment).toStrictEqual([]);
637658expect(calls.update).toStrictEqual([]);
638659});
@@ -653,11 +674,14 @@ describe("barnacle-auto-response", () => {
653674},
654675});
655676656-expect(calls.addLabels).toContainEqual(
657-expect.objectContaining({
658-labels: expect.arrayContaining([candidateLabels.dirtyCandidate]),
659-}),
660-);
677+expect(calls.addLabels).toStrictEqual([
678+expectedAddLabels(123, [
679+candidateLabels.blankTemplate,
680+candidateLabels.needsRealBehaviorProof,
681+candidateLabels.refactorOnly,
682+candidateLabels.dirtyCandidate,
683+]),
684+]);
661685expect(calls.createComment).toStrictEqual([]);
662686expect(calls.update).toStrictEqual([]);
663687});
@@ -673,11 +697,13 @@ describe("barnacle-auto-response", () => {
673697},
674698});
675699676-expect(calls.addLabels).toContainEqual(
677-expect.objectContaining({
678-labels: expect.arrayContaining([candidateLabels.needsRealBehaviorProof]),
679-}),
680-);
700+expect(calls.addLabels).toStrictEqual([
701+expectedAddLabels(123, [
702+candidateLabels.blankTemplate,
703+candidateLabels.needsRealBehaviorProof,
704+candidateLabels.refactorOnly,
705+]),
706+]);
681707expect(calls.createComment).toStrictEqual([]);
682708expect(calls.update).toStrictEqual([]);
683709});
@@ -699,14 +725,12 @@ describe("barnacle-auto-response", () => {
699725},
700726});
701727702-expect(calls.removeLabel.map((call) => call.name)).toEqual(
703-expect.arrayContaining([
704-candidateLabels.needsRealBehaviorProof,
705-candidateLabels.mockOnlyProof,
706-PROOF_SUPPLIED_LABEL,
707-PROOF_SUFFICIENT_LABEL,
708-]),
709-);
728+expect(calls.removeLabel).toStrictEqual([
729+expectedRemoveLabel(123, candidateLabels.needsRealBehaviorProof),
730+expectedRemoveLabel(123, candidateLabels.mockOnlyProof),
731+expectedRemoveLabel(123, PROOF_SUPPLIED_LABEL),
732+expectedRemoveLabel(123, PROOF_SUFFICIENT_LABEL),
733+]);
710734expect(calls.update).toStrictEqual([]);
711735});
712736@@ -728,17 +752,11 @@ describe("barnacle-auto-response", () => {
728752},
729753});
730754731-expect(calls.removeLabel.map((call) => call.name)).toEqual(
732-expect.arrayContaining([
733-candidateLabels.needsRealBehaviorProof,
734-candidateLabels.mockOnlyProof,
735-]),
736-);
737-expect(calls.addLabels).toContainEqual(
738-expect.objectContaining({
739-labels: expect.arrayContaining([PROOF_SUPPLIED_LABEL]),
740-}),
741-);
755+expect(calls.removeLabel).toStrictEqual([
756+expectedRemoveLabel(123, candidateLabels.needsRealBehaviorProof),
757+expectedRemoveLabel(123, candidateLabels.mockOnlyProof),
758+]);
759+expect(calls.addLabels).toStrictEqual([expectedAddLabels(123, [PROOF_SUPPLIED_LABEL])]);
742760});
743761744762it.each(["edited", "synchronize"])(
@@ -762,9 +780,7 @@ describe("barnacle-auto-response", () => {
762780},
763781});
764782765-expect(calls.removeLabel).toContainEqual(
766-expect.objectContaining({ name: PROOF_SUFFICIENT_LABEL }),
767-);
783+expect(calls.removeLabel).toContainEqual(expectedRemoveLabel(123, PROOF_SUFFICIENT_LABEL));
768784},
769785);
770786@@ -791,9 +807,7 @@ describe("barnacle-auto-response", () => {
791807},
792808});
793809794-expect(calls.removeLabel).not.toContainEqual(
795-expect.objectContaining({ name: PROOF_SUFFICIENT_LABEL }),
796-);
810+expect(calls.removeLabel).not.toContainEqual(expectedRemoveLabel(123, PROOF_SUFFICIENT_LABEL));
797811});
798812799813it("actions manually applied candidate labels", async () => {
@@ -811,12 +825,10 @@ describe("barnacle-auto-response", () => {
811825},
812826});
813827814-expect(calls.createComment).toContainEqual(
815-expect.objectContaining({
816-body: expect.stringContaining("ClawHub"),
817-}),
818-);
819-expect(calls.update).toContainEqual(expect.objectContaining({ state: "closed" }));
828+expect(calls.createComment).toHaveLength(1);
829+expect(calls.createComment[0]?.issue_number).toBe(123);
830+expect(calls.createComment[0]?.body).toContain("ClawHub");
831+expect(calls.update).toStrictEqual([expectedIssueUpdate(123, "closed")]);
820832});
821833822834it("closes manually labeled BlueBubbles requests with imsg migration guidance", async () => {
@@ -834,12 +846,10 @@ describe("barnacle-auto-response", () => {
834846},
835847});
836848837-expect(calls.createComment).toContainEqual(
838-expect.objectContaining({
839-body: expect.stringContaining("/channels/imessage"),
840-}),
841-);
842-expect(calls.update).toContainEqual(expect.objectContaining({ state: "closed" }));
849+expect(calls.createComment).toHaveLength(1);
850+expect(calls.createComment[0]?.issue_number).toBe(456);
851+expect(calls.createComment[0]?.body).toContain("/channels/imessage");
852+expect(calls.update).toStrictEqual([expectedIssueUpdate(456, "closed")]);
843853});
844854845855it("keeps bot-applied candidate labels passive", async () => {
@@ -876,12 +886,10 @@ describe("barnacle-auto-response", () => {
876886},
877887});
878888879-expect(calls.removeLabel).toContainEqual(expect.objectContaining({ name: "trigger-response" }));
880-expect(calls.createComment).toContainEqual(
881-expect.objectContaining({
882-body: expect.stringContaining("does not include real behavior proof"),
883-}),
884-);
885-expect(calls.update).toContainEqual(expect.objectContaining({ state: "closed" }));
889+expect(calls.removeLabel).toStrictEqual([expectedRemoveLabel(123, "trigger-response")]);
890+expect(calls.createComment).toHaveLength(1);
891+expect(calls.createComment[0]?.issue_number).toBe(123);
892+expect(calls.createComment[0]?.body).toContain("does not include real behavior proof");
893+expect(calls.update).toStrictEqual([expectedIssueUpdate(123, "closed")]);
886894});
887895});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。