test(fixtures) : add shared mock data for data integrity tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
438
frontend/tests/fixtures/mockData.ts
vendored
Normal file
438
frontend/tests/fixtures/mockData.ts
vendored
Normal file
@@ -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<T>(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]!,
|
||||
},
|
||||
]
|
||||
Reference in New Issue
Block a user