colisdocs

Tests

Ce que couvre la suite du dépôt, comment la lancer, et comment tester votre propre code autour de colis sans identifiants ni réseau.

Lancer la suite

bun run test                              # turbo test sur tout l’espace de travail
bun run --filter @colis/core test         # un seul paquet
bun run --filter colis-drop test          # la page de livraison

Chaque paquet utilise Vitest, lancé sur Node. La CI exécute la suite sur Node 20, 22 et 24, après le formatage, le lint, la vérification des types et le build.

La suite est hors ligne : elle tourne contre un S3 en mémoire qui respecte les en-têtes conditionnels, donc ni identifiants ni réseau.

Ce qu’elle couvre

EmplacementCouvre
packages/core/testL’API fichiers, les envois en morceaux, les enregistrements JSON, les clés, la configuration, le gestionnaire de routes, et le client du protocole branché dessus.
packages/protocol/testLe client, les codes, la signature et la vérification des webhooks.
packages/react/testLes hooks d’envoi et de retrait, le champ de code.
packages/cli/testLe fichier de configuration, init, verifier, statut, le format des durées et des tailles.
packages/n8n-nodes-colis/testLa vérification de signature, le filtre d’événements, les deux nœuds contre un faux contexte n8n.
templates/drop/testLa configuration, l’accusé de réception, les webhooks, les envois en morceaux.

Tester votre code

Contre le gestionnaire, sans socket. Le client du protocole accepte un fetch à vous : branchez-le directement sur createTransferHandler(). C’est exactement ce que fait la CLI sans --remote.

import { createBucket, createTransferHandler } from '@colis/core'
import { createTransferClient } from '@colis/protocol'

const handler = createTransferHandler({ bucket: createBucket({ bucket: 'test', client: fakeS3Client }) })

const transfers = createTransferClient({
  baseUrl: 'http://drop.test/api/transfers',
  fetch: (input, init) => handler(new Request(input as string, init as RequestInit)),
})

fakeS3Client est n’importe quel objet avec une méthode send(command) : createBucket({ client }) l’utilise tel quel. packages/core/test/helpers.ts en contient un en mémoire, qui garde les objets et respecte If-Match et If-None-Match.

Les hooks React, sans réseau. Passez un client à vous au fournisseur : <ColisProvider client={fakeClient}>.

Un récepteur de webhooks. webhookHeaders(secret, { id, body }) de @colis/protocol produit les en-têtes qu’enverrait la page de livraison : construisez une Request avec, et passez-la à votre route. verifyWebhook(…, { now }) fixe l’horloge pour tester le refus d’un horodatage trop ancien.

Les URL signées. La signature est un calcul local : avec des clés statiques et aucune connexion, getUrl() produit une vraie URL dont on peut lire X-Amz-Expires et X-Amz-Signature.

Contre un vrai bucket

Un double en mémoire ne voit pas ce que seul le vrai protocole fait : les en-têtes de somme de contrôle, l’adressage par chemin, et si votre fournisseur respecte If-None-Match sur l’assemblage d’un envoi en morceaux. Lancez MinIO (voir Stockages), pointez la page de livraison dessus comme dans le démarrage rapide, et vérifiez avec colis verifier.

Sur cette page