// Lot 3 « Au quotidien » : tâches, DLC, commandes clients et SAV. // Lignes du banc par magasin (seed.ts et seeds/lot3.ts) : // Nancy (1) : tâches 1, 2, 3, 301, 302 ; DLC 1 à 5, 301, 302, 303, 305 ; // commandes 1, 2, 3, 301 ; SAV 1, 2, 301 // Metz (2) : tâches 4, 5, 303 ; DLC 6, 304 ; commandes 4, 5, 302, 303 ; SAV 3, 302 // Épinal (3) : tâche 300 ; DLC 300 ; commande 300 ; SAV 300 (aucun compte du banc sauf l'admin) import type { ReadCase, WriteScenario } from "../types"; export const reads: ReadCase[] = [ // Tâches : sans magasin choisi, un non-admin reçoit une liste vide { module: "tasks", path: "/api/tasks" }, { module: "tasks", path: "/api/tasks?storeId=1" }, { module: "tasks", path: "/api/tasks?storeId=2" }, { module: "tasks", path: "/api/tasks?storeId=3" }, { module: "tasks", path: "/api/tasks?storeId=abc" }, { module: "tasks", path: "/api/tasks?storeId=99999999999" }, { module: "tasks", path: "/api/tasks?storeId=1.9" }, // DLC : filtres de DlcPage, de la fenêtre d'alerte et du tableau de bord { module: "dlc", path: "/api/dlc-products" }, { module: "dlc", path: "/api/dlc-products?storeId=1" }, { module: "dlc", path: "/api/dlc-products?storeId=2" }, { module: "dlc", path: "/api/dlc-products?storeId=3" }, { module: "dlc", path: "/api/dlc-products?storeId=abc" }, { module: "dlc", path: "/api/dlc-products?status=expires" }, { module: "dlc", path: "/api/dlc-products?status=expires&storeId=1" }, { module: "dlc", path: "/api/dlc-products?status=expires_soon" }, { module: "dlc", path: "/api/dlc-products?status=expires_soon&storeId=2" }, { module: "dlc", path: "/api/dlc-products?status=en_cours" }, { module: "dlc", path: "/api/dlc-products?status=valides" }, { module: "dlc", path: "/api/dlc-products?status=all" }, { module: "dlc", path: "/api/dlc-products?status=inconnu" }, { module: "dlc", path: "/api/dlc-products?supplierId=2" }, { module: "dlc", path: "/api/dlc-products?supplierId=all" }, { module: "dlc", path: "/api/dlc-products?supplierId=abc" }, { module: "dlc", path: "/api/dlc-products?supplierId=0" }, { module: "dlc", path: "/api/dlc-products?supplierId=99999999999" }, { module: "dlc", path: "/api/dlc-products?storeId=99999999999" }, { module: "dlc", path: "/api/dlc-products?search=camem" }, { module: "dlc", path: "/api/dlc-products?search=BONDU" }, { module: "dlc", path: "/api/dlc-products?search=%25" }, { module: "dlc", path: "/api/dlc-products?storeId=1&status=expires_soon&supplierId=1&search=e" }, { module: "dlc", path: "/api/dlc-products/stats" }, { module: "dlc", path: "/api/dlc-products/stats?storeId=1" }, { module: "dlc", path: "/api/dlc-products/stats?storeId=2" }, { module: "dlc", path: "/api/dlc-products/stats?storeId=3" }, { module: "dlc", path: "/api/dlc-products/stats?storeId=abc" }, { module: "dlc", path: "/api/dlc-products/1" }, { module: "dlc", path: "/api/dlc-products/6" }, { module: "dlc", path: "/api/dlc-products/300" }, { module: "dlc", path: "/api/dlc-products/303" }, { module: "dlc", path: "/api/dlc-products/9999" }, { module: "dlc", path: "/api/dlc-products/abc" }, // Commandes clients : la page n'envoie storeId que pour l'admin, les appels à passer pour tous { module: "customer-orders", path: "/api/customer-orders" }, { module: "customer-orders", path: "/api/customer-orders?storeId=1" }, { module: "customer-orders", path: "/api/customer-orders?storeId=2" }, { module: "customer-orders", path: "/api/customer-orders?storeId=3" }, { module: "customer-orders", path: "/api/customer-orders?storeId=abc" }, { module: "customer-orders", path: "/api/customer-orders?storeId=2.5" }, { module: "customer-orders", path: "/api/customer-orders/pending-calls" }, { module: "customer-orders", path: "/api/customer-orders/pending-calls?storeId=1" }, { module: "customer-orders", path: "/api/customer-orders/pending-calls?storeId=3" }, { module: "customer-orders", path: "/api/customer-orders/pending-calls?storeId=abc" }, // SAV : filtres de SavTickets (groupId pour l'admin seulement côté interface) { module: "sav", path: "/api/sav/tickets" }, { module: "sav", path: "/api/sav/tickets?groupId=1" }, { module: "sav", path: "/api/sav/tickets?groupId=3" }, { module: "sav", path: "/api/sav/tickets?groupId=abc" }, { module: "sav", path: "/api/sav/tickets?groupId=0" }, { module: "sav", path: "/api/sav/tickets?groupId=99999999999" }, { module: "sav", path: "/api/sav/tickets?supplierId=99999999999" }, { module: "sav", path: "/api/sav/tickets?endDate={{today}}T23:59:59%2B02:00" }, { module: "sav", path: "/api/sav/tickets?status=nouveau" }, { module: "sav", path: "/api/sav/tickets?priority=critique&groupId=3" }, { module: "sav", path: "/api/sav/tickets?supplierId=4" }, { module: "sav", path: "/api/sav/tickets?supplierId=abc" }, { module: "sav", path: "/api/sav/tickets?status=attente_pieces&priority=normale&supplierId=4&groupId=1" }, { module: "sav", path: "/api/sav/tickets?startDate={{today-10}}&endDate={{today}}" }, { module: "sav", path: "/api/sav/tickets?startDate=pas-une-date" }, { module: "sav", path: "/api/sav/tickets/1" }, { module: "sav", path: "/api/sav/tickets/3" }, { module: "sav", path: "/api/sav/tickets/300" }, { module: "sav", path: "/api/sav/tickets/301" }, { module: "sav", path: "/api/sav/tickets/9999" }, { module: "sav", path: "/api/sav/tickets/abc" }, { module: "sav", path: "/api/sav/stats" }, { module: "sav", path: "/api/sav/stats?groupId=1" }, { module: "sav", path: "/api/sav/stats?groupId=3" }, { module: "sav", path: "/api/sav/stats?groupId=abc" }, ]; export const writes: WriteScenario[] = [ // ---------- Tâches ---------- { module: "tasks", name: "créer une tâche, la modifier, la terminer, la supprimer", steps: [ { method: "POST", path: "/api/tasks", body: { title: "Nouvelle tâche", description: "", priority: "high", status: "pending", assignedTo: "Sophie", startDate: "{{today+1}}", dueDate: "{{today+3}}", groupId: 1, createdBy: "manager" } }, { method: "PUT", path: "/api/tasks/{{0.id}}", body: { title: "Tâche modifiée", priority: "low", assignedTo: "Marc", startDate: "", dueDate: "{{today+5}}" } }, { method: "POST", path: "/api/tasks/{{0.id}}/complete" }, { method: "GET", path: "/api/tasks?storeId=1" }, { method: "DELETE", path: "/api/tasks/{{0.id}}" }, ], tables: ["tasks"], }, { module: "tasks", name: "tâches de son magasin et d'un autre", steps: [ { method: "PUT", path: "/api/tasks/2", body: { status: "completed", description: null, startDate: "{{today}}T14:30", dueDate: null } }, { method: "PUT", path: "/api/tasks/4", body: { title: "Autre magasin" } }, { method: "PUT", path: "/api/tasks/300", body: { title: "Épinal" } }, { method: "POST", path: "/api/tasks/1/complete" }, { method: "POST", path: "/api/tasks/5/complete" }, { method: "POST", path: "/api/tasks/300/complete" }, { method: "DELETE", path: "/api/tasks/3" }, { method: "DELETE", path: "/api/tasks/303" }, { method: "DELETE", path: "/api/tasks/300" }, { method: "PUT", path: "/api/tasks/9999", body: { title: "Absente" } }, { method: "POST", path: "/api/tasks/9999/complete" }, { method: "DELETE", path: "/api/tasks/9999" }, { method: "DELETE", path: "/api/tasks/abc" }, { method: "POST", path: "/api/tasks/abc/complete" }, ], tables: ["tasks"], }, { module: "tasks", name: "créer des tâches : magasin par défaut, autre magasin, corps invalides", steps: [ { method: "POST", path: "/api/tasks", body: { title: "Sans magasin", assignedTo: "Léa" } }, { method: "POST", path: "/api/tasks", body: { title: "Magasin d'Épinal", assignedTo: "Léa", groupId: 3, dueDate: "{{today+2}}T18:00:00.000Z" } }, { method: "POST", path: "/api/tasks", body: { title: "Magasin en texte", assignedTo: "Léa", groupId: "1", startDate: 0 } }, { method: "POST", path: "/api/tasks", body: { title: "Metz", assignedTo: "Léa", groupId: 2, status: "completed", completedBy: "x" } }, { method: "POST", path: "/api/tasks", body: {} }, { method: "POST", path: "/api/tasks", body: { title: "Priorité inconnue", assignedTo: "Léa", groupId: 1, priority: "urgent" } }, { method: "POST", path: "/api/tasks", body: { title: "Échéance invalide", assignedTo: "Léa", groupId: 1, dueDate: "pas une date" } }, { method: "POST", path: "/api/tasks", body: { title: "Départ invalide", assignedTo: "Léa", groupId: 1, startDate: "2026-13-45" } }, { method: "POST", path: "/api/tasks", body: { title: "Date de création", assignedTo: "Léa", groupId: 1, createdAt: "{{today}}" } }, { method: "POST", path: "/api/tasks", body: { id: 900, title: "Identifiant imposé", assignedTo: "Léa", groupId: 1, inconnu: true } }, ], tables: ["tasks"], }, { module: "tasks", name: "modifier une tâche avec des valeurs invalides", steps: [ { method: "PUT", path: "/api/tasks/1", body: { priority: "urgent" } }, { method: "PUT", path: "/api/tasks/1", body: { startDate: "n'importe quoi" } }, { method: "PUT", path: "/api/tasks/1", body: { dueDate: "n'importe quoi" } }, { method: "PUT", path: "/api/tasks/1", body: { title: null } }, { method: "PUT", path: "/api/tasks/1", body: { assignedTo: 42, groupId: 2, createdBy: "pirate" } }, { method: "PUT", path: "/api/tasks/1", body: {} }, { method: "PUT", path: "/api/tasks/abc", body: {} }, { method: "PUT", path: "/api/tasks/99999999999", body: {} }, ], tables: ["tasks"], }, // ---------- DLC ---------- { module: "dlc", name: "créer un produit DLC, le modifier, le valider, le supprimer", steps: [ { method: "POST", path: "/api/dlc-products", body: { productName: "Jambon blanc", name: "Jambon blanc", gencode: "3000000000999", supplierId: 1, groupId: 1, dlcDate: "{{today+4}}", expiryDate: "{{today+4}}T00:00:00.000Z", dateType: "dlc", quantity: 1, unit: "unité", location: "Magasin", alertThreshold: 15, status: "en_cours", notes: "", createdBy: "pirate", }, }, { method: "PUT", path: "/api/dlc-products/{{0.id}}", body: { productName: "Jambon supérieur", name: "Jambon supérieur", expiryDate: "{{today+6}}", dlcDate: "{{today+6}}", notes: "Modifié", groupId: 1 } }, { method: "POST", path: "/api/dlc-products/{{0.id}}/validate" }, { method: "GET", path: "/api/dlc-products/{{0.id}}" }, { method: "DELETE", path: "/api/dlc-products/{{0.id}}" }, { method: "GET", path: "/api/dlc-products/{{0.id}}" }, ], tables: ["dlc_products"], }, { module: "dlc", name: "actions sur les produits de son magasin", steps: [ { method: "PUT", path: "/api/dlc-products/2/stock-epuise" }, { method: "PUT", path: "/api/dlc-products/4/restore-stock" }, { method: "PUT", path: "/api/dlc-products/2/mark-processed" }, { method: "PUT", path: "/api/dlc-products/5/unmark-processed" }, { method: "POST", path: "/api/dlc-products/1/validate" }, { method: "GET", path: "/api/dlc-products/stats?storeId=1" }, { method: "DELETE", path: "/api/dlc-products/302" }, ], tables: ["dlc_products"], }, { module: "dlc", name: "actions sur les produits d'un autre magasin", steps: [ { method: "PUT", path: "/api/dlc-products/6/stock-epuise" }, { method: "PUT", path: "/api/dlc-products/6/mark-processed" }, { method: "POST", path: "/api/dlc-products/304/validate" }, { method: "PUT", path: "/api/dlc-products/300/stock-epuise" }, { method: "PUT", path: "/api/dlc-products/300/restore-stock" }, { method: "PUT", path: "/api/dlc-products/300/mark-processed" }, { method: "PUT", path: "/api/dlc-products/300/unmark-processed" }, { method: "POST", path: "/api/dlc-products/300/validate" }, { method: "PUT", path: "/api/dlc-products/300", body: { notes: "Épinal" } }, { method: "DELETE", path: "/api/dlc-products/300" }, { method: "PUT", path: "/api/dlc-products/6", body: { quantity: 2 } }, { method: "DELETE", path: "/api/dlc-products/6" }, { method: "PUT", path: "/api/dlc-products/9999/stock-epuise" }, { method: "PUT", path: "/api/dlc-products/9999/restore-stock" }, { method: "POST", path: "/api/dlc-products/9999/validate" }, { method: "PUT", path: "/api/dlc-products/9999", body: { notes: "x" } }, { method: "DELETE", path: "/api/dlc-products/abc" }, { method: "PUT", path: "/api/dlc-products/abc/mark-processed" }, { method: "PUT", path: "/api/dlc-products/abc/unmark-processed" }, ], tables: ["dlc_products"], }, { module: "dlc", name: "créer et modifier des produits DLC avec des corps invalides", steps: [ { method: "POST", path: "/api/dlc-products", body: { groupId: 1 } }, { method: "POST", path: "/api/dlc-products", body: { name: "Texte", supplierId: 1, groupId: "1", expiryDate: "{{today+2}}" } }, { method: "POST", path: "/api/dlc-products", body: { name: "Épinal", supplierId: 1, groupId: 3, expiryDate: "{{today+2}}" } }, { method: "POST", path: "/api/dlc-products", body: { name: "Type inconnu", supplierId: 1, groupId: 1, expiryDate: "{{today+2}}", dateType: "xyz" } }, { method: "POST", path: "/api/dlc-products", body: { name: "Horodatage", supplierId: 1, groupId: 1, expiryDate: "{{today+2}}", validatedAt: "{{today}}" } }, { method: "POST", path: "/api/dlc-products", body: { name: "Minimal", supplierId: 2, groupId: 1, expiryDate: "{{today+9}}", stockEpuise: null, quantity: "7" } }, { method: "PUT", path: "/api/dlc-products/1", body: { status: "inconnu" } }, { method: "PUT", path: "/api/dlc-products/1", body: { expiryDate: null } }, { method: "PUT", path: "/api/dlc-products/1", body: { processedAt: "{{today}}" } }, { method: "PUT", path: "/api/dlc-products/1", body: { updatedAt: "{{today}}", inconnu: 1 } }, { method: "PUT", path: "/api/dlc-products/2", body: { groupId: 3, createdBy: "pirate" } }, ], tables: ["dlc_products"], }, // ---------- Commandes clients ---------- { module: "customer-orders", name: "créer une commande client, la modifier, prévenir le client, la supprimer", steps: [ { method: "POST", path: "/api/customer-orders", body: { orderTaker: "Sophie", customerName: "M. Nouveau", customerPhone: "06 12 34 56 78", customerEmail: "nouveau@client.test", productDesignation: "Barbecue", productReference: "BBQ-1", gencode: "3245678909999", quantity: 1, supplierId: 4, status: "En attente de Commande", deposit: 30, isPromotionalPrice: false, groupId: 1, notes: "Livraison", }, }, { method: "PUT", path: "/api/customer-orders/{{0.id}}", body: { status: "Disponible", deposit: "45.5", quantity: 2 } }, { method: "GET", path: "/api/customer-orders/pending-calls" }, { method: "PATCH", path: "/api/customer-orders/{{0.id}}/mark-called", body: { comment: "Message laissé" } }, { method: "PUT", path: "/api/customer-orders/{{0.id}}", body: { customerNotified: false, notifiedAt: null, notifiedComment: null } }, { method: "DELETE", path: "/api/customer-orders/{{0.id}}" }, ], tables: ["customer_orders"], }, { module: "customer-orders", name: "commandes clients de son magasin et d'un autre", steps: [ { method: "PATCH", path: "/api/customer-orders/3/mark-called", body: {} }, { method: "PATCH", path: "/api/customer-orders/301/mark-called", body: { comment: "" } }, { method: "PATCH", path: "/api/customer-orders/303/mark-called", body: { comment: "Metz" } }, { method: "PATCH", path: "/api/customer-orders/300/mark-called", body: { comment: "Épinal" } }, { method: "PUT", path: "/api/customer-orders/4", body: { status: "Retiré" } }, { method: "PUT", path: "/api/customer-orders/300", body: { status: "Retiré" } }, { method: "DELETE", path: "/api/customer-orders/5" }, { method: "DELETE", path: "/api/customer-orders/300" }, { method: "DELETE", path: "/api/customer-orders/2" }, { method: "PUT", path: "/api/customer-orders/9999", body: { status: "x" } }, { method: "PATCH", path: "/api/customer-orders/9999/mark-called", body: {} }, { method: "DELETE", path: "/api/customer-orders/9999" }, { method: "PATCH", path: "/api/customer-orders/abc/mark-called", body: {} }, { method: "DELETE", path: "/api/customer-orders/abc" }, ], tables: ["customer_orders"], }, { module: "customer-orders", name: "créer et modifier des commandes clients avec des corps invalides", steps: [ { method: "POST", path: "/api/customer-orders", body: {} }, { method: "POST", path: "/api/customer-orders", body: { orderTaker: "Léa", customerName: "Texte", customerPhone: "06", productDesignation: "Pelle", gencode: "1", supplierId: 4, groupId: "1" } }, { method: "POST", path: "/api/customer-orders", body: { orderTaker: "Léa", customerName: "Épinal", customerPhone: "06", productDesignation: "Pelle", gencode: "1", supplierId: 4, groupId: 3 } }, { method: "POST", path: "/api/customer-orders", body: { orderTaker: "Léa", customerName: "Horodatage", customerPhone: "06", productDesignation: "Pelle", gencode: "1", supplierId: 4, groupId: 1, notifiedAt: "{{today}}" } }, { method: "POST", path: "/api/customer-orders", body: { orderTaker: "Léa", customerName: "Fournisseur absent", customerPhone: "06", productDesignation: "Pelle", gencode: "1", supplierId: 999, groupId: 1 } }, { method: "PUT", path: "/api/customer-orders/1", body: { quantity: "abc" } }, { method: "PUT", path: "/api/customer-orders/1", body: { createdAt: "{{today}}" } }, { method: "PUT", path: "/api/customer-orders/1", body: { deposit: "12,5" } }, { method: "PUT", path: "/api/customer-orders/1", body: { updatedAt: "2020-01-01", inconnu: 1, notes: ["a", "b"] } }, { method: "PUT", path: "/api/customer-orders/2", body: {} }, ], tables: ["customer_orders"], }, // ---------- SAV ---------- { module: "sav", name: "créer un ticket SAV, le modifier, le commenter, le supprimer", steps: [ { method: "POST", path: "/api/sav/tickets", body: { supplierId: 3, groupId: 1, productGencode: "3245678901241", productReference: "PS-18", productDesignation: "Perceuse sans fil", problemType: "defectueux", problemDescription: "Batterie HS", priority: "haute", status: "nouveau", createdBy: "1", clientName: "M. Laurent", clientPhone: "06 22 22 22 22", }, }, { method: "PATCH", path: "/api/sav/tickets/{{0.id}}", body: { status: "en_cours", priority: "critique", resolutionDescription: "Pièce commandée" } }, { method: "POST", path: "/api/sav/tickets/{{0.id}}/history", body: { description: "Appel au fournisseur" } }, { method: "GET", path: "/api/sav/tickets/{{0.id}}" }, { method: "POST", path: "/api/sav/tickets", body: { supplierId: 4, productGencode: "1", productDesignation: "Second ticket", problemDescription: "Sans magasin choisi" } }, { method: "GET", path: "/api/sav/stats" }, { method: "DELETE", path: "/api/sav/tickets/{{0.id}}" }, { method: "DELETE", path: "/api/sav/tickets/{{4.id}}" }, ], tables: ["sav_tickets"], }, { module: "sav", name: "tickets SAV de son magasin et d'un autre", steps: [ { method: "PATCH", path: "/api/sav/tickets/1", body: { status: "resolu" } }, { method: "PATCH", path: "/api/sav/tickets/3", body: { priority: "haute" } }, { method: "PATCH", path: "/api/sav/tickets/300", body: { status: "ferme" } }, { method: "POST", path: "/api/sav/tickets/2/history", body: { description: "Relance" } }, { method: "POST", path: "/api/sav/tickets/3/history", body: { description: "Metz" } }, { method: "POST", path: "/api/sav/tickets/300/history", body: {} }, { method: "DELETE", path: "/api/sav/tickets/302" }, { method: "DELETE", path: "/api/sav/tickets/300" }, { method: "PATCH", path: "/api/sav/tickets/9999", body: {} }, { method: "POST", path: "/api/sav/tickets/9999/history", body: {} }, { method: "DELETE", path: "/api/sav/tickets/9999" }, { method: "PATCH", path: "/api/sav/tickets/abc", body: {} }, { method: "DELETE", path: "/api/sav/tickets/abc" }, ], tables: ["sav_tickets"], }, { module: "sav", name: "créer et modifier des tickets SAV avec des corps invalides", steps: [ { method: "POST", path: "/api/sav/tickets", body: {} }, { method: "POST", path: "/api/sav/tickets", body: { supplierId: null, groupId: "2", productGencode: 12, productDesignation: "x".repeat(501), problemType: "casse", problemDescription: "x", priority: "urgente", status: "ouvert" } }, { method: "POST", path: "/api/sav/tickets", body: { supplierId: 1, groupId: 3, productGencode: "1", productDesignation: "Épinal", problemDescription: "Autre magasin" } }, { method: "POST", path: "/api/sav/tickets", body: { supplierId: 1, groupId: 99, productGencode: "1", productDesignation: "Magasin inconnu", problemDescription: "x" } }, { method: "POST", path: "/api/sav/tickets", body: { supplierId: 999, groupId: 1, productGencode: "1", productDesignation: "Fournisseur inconnu", problemDescription: "x", ticketNumber: "SAV-PIRATE", createdAt: "2020-01-01" } }, { method: "PATCH", path: "/api/sav/tickets/1", body: { status: "inconnu", priority: 3 } }, { method: "PATCH", path: "/api/sav/tickets/1", body: { supplierId: 999 } }, { method: "PATCH", path: "/api/sav/tickets/2", body: { groupId: 3, createdBy: "pirate", clientName: null, ticketNumber: "SAV-PIRATE" } }, { method: "PATCH", path: "/api/sav/tickets/2", body: {} }, ], tables: ["sav_tickets"], }, ];