meta {
  name: 01 Signup
  type: http
  seq: 1
}

post {
  url: {{baseUrl}}/api/v1/auth/signup
  body: json
  auth: none
}

body:json {
  {
    "email": "{{email}}",
    "password": "{{password}}",
    "fullName": "{{fullName}}"
  }
  
}

script:post-response {
  if (res.getStatus() === 201) {
    const session = res.getBody().data;
    bru.setEnvVar("token", session.accessToken);
    bru.setEnvVar("userId", session.user.id);
    bru.setEnvVar("organizationId", session.user.organizationId);
  }
}

tests {
  test("201 Created", function () {
    expect(res.getStatus()).to.equal(201);
  });
  test("AuthSession shape", function () {
    const data = res.getBody().data;
    expect(data).to.have.property("accessToken");
    expect(data).to.have.property("expiresAt");
    expect(data.user).to.have.property("id");
    expect(data.user).to.have.property("organizationId");
  });
}

docs {
  POST /api/v1/auth/signup
  
  Crée une organisation vide + un user + duplique les 4 plans pré-fournis
  (Standard B2B / Rapide / Patient / Ferme) dans la même transaction. Émet
  ensuite une AuthSession :
   - access token (TTL 30 min) en JSON
   - refresh token (TTL 30 jours) en cookie httpOnly `rubis_refresh`
  
  Le nom de l'organisation reste `""` jusqu'à ce que l'utilisateur passe
  l'onboarding via PATCH /organizations/me.
  
  Validation côté API :
  - email format + unique
  - password ≥ 8 chars
  - fullName 2-120 chars
  
  Erreurs typiques :
  - 422 validation_failed (email/password/fullName invalides)
  - 422 + `rule: database.unique` si email déjà pris
}
