import { beforeEach, describe, expect, it, vi } from "vitest"

import type { HttpClient } from "../../client/base"
import { createAPIProxy } from "../../client/proxy"
import { subscriptionsModule } from "."

describe("subscriptions.parseOpml raw body handling", () => {
  let mockClient: HttpClient

  beforeEach(() => {
    mockClient = {
      request: vi.fn().mockResolvedValue({ code: 0, data: { ok: true } }),
    } as any
  })

  it("passes ArrayBuffer body through unchanged (requestType=arrayBuffer)", async () => {
    const api = createAPIProxy<typeof subscriptionsModule.api>(
      mockClient,
      subscriptionsModule,
    )

    const encoder = new TextEncoder()
    const { buffer } = encoder.encode("<opml></opml>")

    await api.parseOpml(buffer)

    expect(mockClient.request).toHaveBeenCalledWith(
      "/subscriptions/parse-opml",
      expect.objectContaining({
        method: "POST",
        requestType: "arrayBuffer",
        body: buffer,
      }),
    )
  })

  it("passes FormData body through unchanged for import (requestType=formData)", async () => {
    const api = createAPIProxy<typeof subscriptionsModule.api>(
      mockClient,
      subscriptionsModule,
    )

    const form = new FormData()
    form.append("file", new Blob(["opml content"]), "subs.opml")
    form.append("items", JSON.stringify([]))

    await api.import(form)

    expect(mockClient.request).toHaveBeenCalledWith(
      "/subscriptions/import",
      expect.objectContaining({
        method: "POST",
        requestType: "formData",
        body: form,
      }),
    )
  })
})
