// src/lib/tours/actions.test.ts — garde de SURFACE : combien d'endpoints ce
// module ouvre, et avec quels paramètres. Rien d'autre ne s'exprime ainsi.
// Le comportement (identité de session, garde d'usurpation, validation) est
// asservi dans mark-tour.test.ts, sur le helper injectable — pas ici par
// lecture du texte source, qui accuserait à tort un remaniement équivalent.
//
// Le seul simulacre est "server-only" : ./actions importe ./progress, qui le
// requiert. Pas de mock.module au-delà — il fuit d'un fichier à l'autre et
// progress.test.ts tourne dans le même process.
import { describe, expect, it, mock } from "bun:test";

mock.module("server-only", () => ({}));

describe("surface de src/lib/tours/actions", () => {
  it("n'expose que markTourAction", async () => {
    const mod = await import("./actions");
    expect(Object.keys(mod).sort()).toEqual(["markTourAction"]);
  });

  // Un export "use server" est un endpoint POST atteignable : ses paramètres
  // viennent du client et ne sont donc jamais dignes de confiance. L'identité
  // doit venir de la session, pas de l'appel.
  it("markTourAction ne prend pas d'identifiant d'utilisateur en paramètre", async () => {
    const { markTourAction } = await import("./actions");
    expect(markTourAction.length).toBe(2); // (tourId, status) — pas de userId
  });
});
