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 livraisonChaque 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
| Emplacement | Couvre |
|---|---|
packages/core/test | L’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/test | Le client, les codes, la signature et la vérification des webhooks. |
packages/react/test | Les hooks d’envoi et de retrait, le champ de code. |
packages/cli/test | Le fichier de configuration, init, verifier, statut, le format des durées et des tailles. |
packages/n8n-nodes-colis/test | La vérification de signature, le filtre d’événements, les deux nœuds contre un faux contexte n8n. |
templates/drop/test | La 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.
Limites
Ce que colis ne fait pas, ou fait avec une contrepartie : taille des fichiers, durée de vie, un fichier par code, aperçu, mots de passe.
Faire valider une maquette
Un PDF ou une image envoyé sous un code, prévisualisé par le client dans la page, validé en un clic ou renvoyé avec un commentaire.