import type { ProductNode } from '../types';
/**
* Mock brand data for testing
*/
export const mockBrand = {
slug: 'oam',
name: 'OAM',
svg: {
component: 'OamLogo',
className: '',
},
description: 'Mock brand',
} as const;
export const mockBrandTakazudo = {
slug: 'takazudo-modular',
name: 'Takazudo Modular',
svg: {
component: 'TakazudoModularLogo',
className: '',
},
description: 'Mock brand',
} as const;
/**
* Standard blurHash for mock product images
* Used across all mock products for consistent loading placeholders
*/
export const MOCK_BLURHASH = 'LEHV6nWB2yk8pyo0adR*.7kCMdnj';
/**
* Mock URL constants
*/
export const MOCK_URLS = {
mercariProduct: 'https://mercari-shops.com/shops/mock-shop/items/mock-id',
contact: '/contact/',
} as const;
/**
* Creates a fully-typed mock product for testing
*/
export const createMockProduct = (overrides: Partial<ProductNode> = {}): ProductNode => ({
id: 'mock-product-id',
index: 0,
slug: 'mock-product',
name: 'Mock Product',
blurHash: MOCK_BLURHASH,
brand: mockBrand,
imgSrc: 'https://takazudomodular.com/images/p/oam-tiny-view1',
description: 'Mock product for testing',
spec: {
width: '8HP',
},
...overrides,
});
/**
* Pre-configured mock products for PurchaseNav status testing
*/
export const mockMercariProducts = {
available: createMockProduct({
id: 'mock-available-id',
slug: 'mock-available',
name: 'Available Product',
description: 'Mock product for testing Available status',
mercariProductId: 'mock-mercari-id-available',
detailHref: '/products/mock-available-intro/',
price: 153800,
}),
sold: createMockProduct({
id: 'mock-sold-id',
index: 1,
slug: 'mock-sold',
name: 'Sold Out Product',
description: 'Mock product for testing Sold status',
mercariProductId: 'mock-mercari-id-sold',
mercariStatus: 'sold',
detailHref: '/products/mock-sold-intro/',
price: 89000,
}),
incoming: createMockProduct({
id: 'mock-incoming-id',
index: 2,
slug: 'mock-incoming',
name: 'Incoming Product',
description: 'Mock product for testing Incoming status',
mercariProductId: 'mock-mercari-id-incoming',
mercariStatus: 'incoming',
detailHref: '/products/mock-incoming-intro/',
price: 45000,
}),
askToBuy: createMockProduct({
id: 'mock-ask-to-buy-id',
index: 3,
slug: 'mock-ask-to-buy',
name: 'Ask to Buy Product',
description: 'Mock product for testing AskToBuy status',
mercariProductId: 'mock-mercari-id-asktobuy',
mercariStatus: 'askToBuy',
detailHref: '/products/mock-ask-to-buy-intro/',
price: 275000,
}),
discontinued: createMockProduct({
id: 'mock-discontinued-id',
index: 4,
slug: 'mock-discontinued',
name: 'Discontinued Product',
description: 'Mock product for testing Discontinued status',
mercariProductId: 'mock-mercari-id-discontinued',
mercariStatus: 'discontinued',
detailHref: '/products/mock-discontinued-intro/',
price: 32000,
}),
unavailable: createMockProduct({
id: 'mock-unavailable-id',
index: 5,
slug: 'mock-unavailable',
name: 'Unavailable Product',
description: 'Mock product for testing Unavailable status',
mercariProductId: 'mock-mercari-id-unavailable',
mercariStatus: 'unavailable',
detailHref: '/products/mock-unavailable-intro/',
price: 28000,
}),
};
/**
* Pre-configured mock products for RelatedProducts testing
*/
export const mockRelatedProducts = {
product1: createMockProduct({
id: 'mock-product-1-id',
slug: 'mock-product-1',
name: 'Mock Product One',
description: 'First mock product for testing',
detailHref: '/products/mock-product-1-intro/',
}),
product2: createMockProduct({
id: 'mock-product-2-id',
index: 1,
slug: 'mock-product-2',
name: 'Mock Product Two',
description: 'Second mock product for testing',
spec: { width: '16HP' },
detailHref: '/products/mock-product-2-intro/',
}),
product3: createMockProduct({
id: 'mock-product-3-id',
index: 2,
slug: 'mock-product-3',
name: 'Mock Product Three',
description: 'Third mock product for testing',
brand: mockBrandTakazudo,
spec: { width: '4HP' },
detailHref: '/products/mock-product-3-intro/',
}),
productNoDetail: createMockProduct({
id: 'mock-product-no-detail-id',
index: 3,
slug: 'mock-product-no-detail',
name: 'Mock Product Without Detail',
description: 'Mock product without detail page (should be filtered out)',
detailHref: undefined,
}),
};