From e70c66e2152a04cc8049ed8117979bed5514feb2 Mon Sep 17 00:00:00 2001 From: r-dev Date: Mon, 6 Apr 2026 13:11:15 +0200 Subject: [PATCH] test(fixtures) : add shared mock data for data integrity tests Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/tests/fixtures/mockData.ts | 438 ++++++++++++++++++++++++++++ 1 file changed, 438 insertions(+) create mode 100644 frontend/tests/fixtures/mockData.ts diff --git a/frontend/tests/fixtures/mockData.ts b/frontend/tests/fixtures/mockData.ts new file mode 100644 index 0000000..2e45b62 --- /dev/null +++ b/frontend/tests/fixtures/mockData.ts @@ -0,0 +1,438 @@ +// --------------------------------------------------------------------------- +// Shared mock data for Inventory frontend test suite +// --------------------------------------------------------------------------- + +import type { ConstructeurLinkEntry, ConstructeurSummary } from '~/shared/constructeurUtils' +import type { CustomFieldDefinition, CustomFieldValue } from '~/shared/utils/customFields' +import type { ComponentModelStructure } from '~/shared/types/inventory' + +// --------------------------------------------------------------------------- +// Constructeurs +// --------------------------------------------------------------------------- + +export const mockConstructeurSKF: ConstructeurSummary = { + id: 'cstr-skf-001', + name: 'SKF', + email: 'contact@skf.com', + phone: '+33 1 23 45 67 89', +} + +export const mockConstructeurFAG: ConstructeurSummary = { + id: 'cstr-fag-002', + name: 'FAG', + email: 'info@fag.de', + phone: '+49 9721 91 0', +} + +// --------------------------------------------------------------------------- +// Constructeur link entries +// --------------------------------------------------------------------------- + +export const mockLinkSKF: ConstructeurLinkEntry = { + linkId: 'link-skf-001', + constructeurId: mockConstructeurSKF.id, + constructeur: mockConstructeurSKF, + supplierReference: 'SKF-6205-2RS', +} + +export const mockLinkFAG: ConstructeurLinkEntry = { + linkId: 'link-fag-002', + constructeurId: mockConstructeurFAG.id, + constructeur: mockConstructeurFAG, + supplierReference: 'FAG-6205-C-2HRS', +} + +// --------------------------------------------------------------------------- +// Custom field definitions (6 types) +// --------------------------------------------------------------------------- + +export const mockCustomFieldDefs: CustomFieldDefinition[] = [ + { + id: 'cf-def-001', + name: 'Tension nominale', + type: 'number', + required: true, + options: [], + defaultValue: '220', + orderIndex: 0, + machineContextOnly: false, + }, + { + id: 'cf-def-002', + name: 'Certifié CE', + type: 'boolean', + required: false, + options: [], + defaultValue: 'false', + orderIndex: 1, + machineContextOnly: false, + }, + { + id: 'cf-def-003', + name: 'Indice de protection', + type: 'select', + required: false, + options: ['IP54', 'IP55', 'IP65'], + defaultValue: null, + orderIndex: 2, + machineContextOnly: false, + }, + { + id: 'cf-def-004', + name: 'Date de calibration', + type: 'date', + required: false, + options: [], + defaultValue: null, + orderIndex: 3, + machineContextOnly: false, + }, + { + id: 'cf-def-005', + name: 'Remarques techniques', + type: 'text', + required: false, + options: [], + defaultValue: null, + orderIndex: 4, + machineContextOnly: false, + }, + { + id: 'cf-def-006', + name: 'Position sur machine', + type: 'text', + required: false, + options: [], + defaultValue: null, + orderIndex: 5, + machineContextOnly: true, + }, +] + +// --------------------------------------------------------------------------- +// Custom field values (matching first 5 defs) +// --------------------------------------------------------------------------- + +export const mockCustomFieldValues: CustomFieldValue[] = [ + { + id: 'cfv-001', + value: '220', + customField: mockCustomFieldDefs[0]!, + }, + { + id: 'cfv-002', + value: 'true', + customField: mockCustomFieldDefs[1]!, + }, + { + id: 'cfv-003', + value: 'IP65', + customField: mockCustomFieldDefs[2]!, + }, + { + id: 'cfv-004', + value: '2025-06-15', + customField: mockCustomFieldDefs[3]!, + }, + { + id: 'cfv-005', + value: 'Roulement renforcé pour environnement humide', + customField: mockCustomFieldDefs[4]!, + }, +] + +// --------------------------------------------------------------------------- +// Component ModelType structure +// --------------------------------------------------------------------------- + +export const mockComponentStructure: ComponentModelStructure = { + customFields: [ + { name: 'Tension nominale', type: 'number', required: true, defaultValue: '220', orderIndex: 0 }, + { name: 'Certifié CE', type: 'boolean', required: false, defaultValue: 'false', orderIndex: 1 }, + { name: 'Indice de protection', type: 'select', required: false, options: ['IP54', 'IP55', 'IP65'], orderIndex: 2 }, + ], + pieces: [ + { + typePieceId: 'tp-bearing-001', + typePieceLabel: 'Roulement', + reference: 'REF-PIECE-001', + familyCode: 'ROUL', + role: 'support', + quantity: 2, + }, + { + typePieceId: 'tp-seal-002', + typePieceLabel: 'Joint', + reference: 'REF-PIECE-002', + familyCode: 'JOINT', + role: 'étanchéité', + quantity: 1, + }, + ], + products: [ + { + typeProductId: 'tprod-grease-001', + typeProductLabel: 'Graisse SKF', + reference: 'REF-PROD-001', + familyCode: 'LUB', + role: 'lubrification', + }, + ], + subcomponents: [ + { + typeComposantId: 'tc-sub-001', + typeComposantLabel: 'Sous-ensemble palier', + familyCode: 'PAL', + alias: 'Palier avant', + subcomponents: [], + }, + ], +} + +// --------------------------------------------------------------------------- +// Full API response — Composant +// --------------------------------------------------------------------------- + +export const mockComponentFromApi = { + '@id': '/api/composants/comp-001', + '@type': 'Composant', + id: 'comp-001', + name: 'Moteur principal', + reference: 'COMP-MOT-001', + typeComposant: { id: 'tc-moteur', name: 'Moteur électrique', code: 'MOT' }, + site: { id: 'site-001', name: 'Usine Nord' }, + pieceSlots: [ + { + id: 'ps-001', + piece: { id: 'piece-001', name: 'Roulement 6205', reference: 'ROUL-6205' }, + typePiece: { id: 'tp-bearing-001', name: 'Roulement' }, + role: 'support', + quantity: 2, + }, + { + id: 'ps-002', + piece: { id: 'piece-002', name: 'Joint torique', reference: 'JOINT-001' }, + typePiece: { id: 'tp-seal-002', name: 'Joint' }, + role: 'étanchéité', + quantity: 1, + }, + ], + productSlots: [ + { + id: 'prs-001', + product: { id: 'prod-001', name: 'Graisse LGMT2', reference: 'LUB-LGMT2' }, + typeProduct: { id: 'tprod-grease-001', name: 'Graisse SKF' }, + role: 'lubrification', + }, + ], + subcomponentSlots: [ + { + id: 'scs-001', + subcomponent: { id: 'comp-sub-001', name: 'Palier avant', reference: 'PAL-AV-001' }, + typeComposant: { id: 'tc-sub-001', name: 'Sous-ensemble palier' }, + alias: 'Palier avant', + }, + ], + constructeurLinks: [ + { + id: mockLinkSKF.linkId, + constructeur: mockConstructeurSKF, + supplierReference: mockLinkSKF.supplierReference, + }, + ], + customFieldValues: mockCustomFieldValues.map(cfv => ({ + id: cfv.id, + value: cfv.value, + customField: { + id: cfv.customField.id, + name: cfv.customField.name, + type: cfv.customField.type, + required: cfv.customField.required, + options: cfv.customField.options, + defaultValue: cfv.customField.defaultValue, + orderIndex: cfv.customField.orderIndex, + machineContextOnly: cfv.customField.machineContextOnly, + }, + })), + createdAt: '2025-01-15T10:00:00+00:00', + updatedAt: '2025-03-20T14:30:00+00:00', +} + +// --------------------------------------------------------------------------- +// Full API response — Piece +// --------------------------------------------------------------------------- + +export const mockPieceFromApi = { + '@id': '/api/pieces/piece-001', + '@type': 'Piece', + id: 'piece-001', + name: 'Roulement 6205', + reference: 'ROUL-6205', + typePiece: { id: 'tp-bearing-001', name: 'Roulement', code: 'ROUL' }, + site: { id: 'site-001', name: 'Usine Nord' }, + productSlots: [ + { + id: 'pps-001', + product: { id: 'prod-001', name: 'Graisse LGMT2', reference: 'LUB-LGMT2' }, + typeProduct: { id: 'tprod-grease-001', name: 'Graisse SKF' }, + role: 'lubrification', + }, + ], + constructeurLinks: [ + { + id: mockLinkSKF.linkId, + constructeur: mockConstructeurSKF, + supplierReference: mockLinkSKF.supplierReference, + }, + { + id: mockLinkFAG.linkId, + constructeur: mockConstructeurFAG, + supplierReference: mockLinkFAG.supplierReference, + }, + ], + customFieldValues: [ + { + id: 'cfv-piece-001', + value: '6205', + customField: { + id: 'cf-piece-def-001', + name: 'Référence interne', + type: 'text', + required: true, + options: [], + defaultValue: null, + orderIndex: 0, + machineContextOnly: false, + }, + }, + ], + createdAt: '2025-01-10T08:00:00+00:00', + updatedAt: '2025-03-18T11:00:00+00:00', +} + +// --------------------------------------------------------------------------- +// Full API response — Product +// --------------------------------------------------------------------------- + +export const mockProductFromApi = { + '@id': '/api/products/prod-001', + '@type': 'Product', + id: 'prod-001', + name: 'Graisse LGMT2', + reference: 'LUB-LGMT2', + typeProduct: { id: 'tprod-grease-001', name: 'Graisse SKF', code: 'LUB' }, + site: { id: 'site-001', name: 'Usine Nord' }, + supplierPrice: 45.90, + constructeurLinks: [ + { + id: mockLinkSKF.linkId, + constructeur: mockConstructeurSKF, + supplierReference: 'LGMT2/1', + }, + ], + createdAt: '2025-02-01T09:00:00+00:00', + updatedAt: '2025-03-10T16:00:00+00:00', +} + +// --------------------------------------------------------------------------- +// JSON-LD collection wrapper +// --------------------------------------------------------------------------- + +export function wrapCollection(items: T[], total?: number) { + return { + '@context': '/api/contexts/Collection', + '@id': '/api/collection', + '@type': 'Collection', + 'totalItems': total ?? items.length, + 'member': items, + } +} + +// --------------------------------------------------------------------------- +// Machine custom field definitions (5 types) +// --------------------------------------------------------------------------- + +export const mockMachineCustomFieldDefs: CustomFieldDefinition[] = [ + { + id: 'mcf-def-001', + name: 'Numéro de série', + type: 'text', + required: true, + options: [], + defaultValue: null, + orderIndex: 0, + machineContextOnly: false, + }, + { + id: 'mcf-def-002', + name: 'En service', + type: 'boolean', + required: false, + options: [], + defaultValue: 'false', + orderIndex: 1, + machineContextOnly: false, + }, + { + id: 'mcf-def-003', + name: 'Puissance (kW)', + type: 'number', + required: false, + options: [], + defaultValue: null, + orderIndex: 2, + machineContextOnly: false, + }, + { + id: 'mcf-def-004', + name: 'Catégorie ATEX', + type: 'select', + required: false, + options: ['Zone 0', 'Zone 1', 'Zone 2', 'Non classé'], + defaultValue: null, + orderIndex: 3, + machineContextOnly: false, + }, + { + id: 'mcf-def-005', + name: 'Date mise en service', + type: 'date', + required: false, + options: [], + defaultValue: null, + orderIndex: 4, + machineContextOnly: false, + }, +] + +// --------------------------------------------------------------------------- +// Machine custom field values (matching defs, includes number '0' and boolean 'true') +// --------------------------------------------------------------------------- + +export const mockMachineCustomFieldValues: CustomFieldValue[] = [ + { + id: 'mcfv-001', + value: 'SN-2025-001234', + customField: mockMachineCustomFieldDefs[0]!, + }, + { + id: 'mcfv-002', + value: 'true', + customField: mockMachineCustomFieldDefs[1]!, + }, + { + id: 'mcfv-003', + value: '0', + customField: mockMachineCustomFieldDefs[2]!, + }, + { + id: 'mcfv-004', + value: 'Zone 1', + customField: mockMachineCustomFieldDefs[3]!, + }, + { + id: 'mcfv-005', + value: '2025-01-15', + customField: mockMachineCustomFieldDefs[4]!, + }, +]