diffs.test.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { describe, expect, test } from "bun:test"
  2. import type { SnapshotFileDiff } from "@opencode-ai/sdk/v2"
  3. import type { FileDiffInfo } from "@opencode-ai/client/promise"
  4. import type { Message } from "@opencode-ai/sdk/v2/client"
  5. import { diffs, message } from "./diffs"
  6. const item = {
  7. file: "src/app.ts",
  8. patch: "@@ -1 +1 @@\n-old\n+new\n",
  9. additions: 1,
  10. deletions: 1,
  11. status: "modified",
  12. } satisfies FileDiffInfo & SnapshotFileDiff
  13. describe("diffs", () => {
  14. test("keeps valid arrays", () => {
  15. expect(diffs([item])).toEqual([item])
  16. })
  17. test("wraps a single diff object", () => {
  18. expect(diffs(item)).toEqual([item])
  19. })
  20. test("reads keyed diff objects", () => {
  21. expect(diffs({ a: item })).toEqual([item])
  22. })
  23. test("drops invalid entries", () => {
  24. expect(
  25. diffs([
  26. item,
  27. { file: "src/bad.ts", additions: 1, deletions: 1 },
  28. { patch: item.patch, additions: 1, deletions: 1 },
  29. ]),
  30. ).toEqual([item])
  31. })
  32. })
  33. describe("message", () => {
  34. test("normalizes user summaries with object diffs", () => {
  35. const input = {
  36. id: "msg_1",
  37. sessionID: "ses_1",
  38. role: "user",
  39. time: { created: 1 },
  40. agent: "build",
  41. model: { providerID: "openai", modelID: "gpt-5" },
  42. summary: {
  43. title: "Edit",
  44. diffs: { a: item },
  45. },
  46. } as unknown as Message
  47. expect(message(input)).toMatchObject({
  48. summary: {
  49. title: "Edit",
  50. diffs: [item],
  51. },
  52. })
  53. })
  54. test("drops invalid user summaries", () => {
  55. const input = {
  56. id: "msg_1",
  57. sessionID: "ses_1",
  58. role: "user",
  59. time: { created: 1 },
  60. agent: "build",
  61. model: { providerID: "openai", modelID: "gpt-5" },
  62. summary: true,
  63. } as unknown as Message
  64. expect(message(input)).toMatchObject({ summary: undefined })
  65. })
  66. })