UNPKG

@wernerthiago/teo

Version:

Test Execution Optimizer

126 lines (100 loc) 3.72 kB
// Tests for product service import { jest } from '@jest/globals' import ProductService from '../../src/products/product-service.js' describe('ProductService', () => { let productService beforeEach(() => { productService = new ProductService() }) describe('createProduct', () => { test('should create product successfully', async () => { const result = await productService.createProduct( 'Test Product', 'A test product', 29.99, 'category1' ) expect(result).toHaveProperty('id') expect(result).toHaveProperty('name', 'Test Product') expect(result).toHaveProperty('price', 29.99) }) }) describe('updateProduct', () => { let productId beforeEach(async () => { const product = await productService.createProduct( 'Test Product', 'A test product', 29.99, 'category1' ) productId = product.id }) test('should update product successfully', async () => { const result = await productService.updateProduct(productId, { name: 'Updated Product', price: 39.99 }) expect(result).toHaveProperty('name', 'Updated Product') expect(result).toHaveProperty('price', 39.99) }) test('should throw error for non-existent product', async () => { await expect( productService.updateProduct('invalid-id', { name: 'Updated' }) ).rejects.toThrow('Product not found') }) }) describe('searchProducts', () => { beforeEach(async () => { await productService.createProduct('Laptop', 'Gaming laptop', 999.99, 'electronics') await productService.createProduct('Mouse', 'Gaming mouse', 49.99, 'electronics') await productService.createProduct('Book', 'Programming book', 29.99, 'books') }) test('should search by query', async () => { const results = await productService.searchProducts('gaming') expect(results).toHaveLength(2) expect(results.every(p => p.name.toLowerCase().includes('gaming') || p.description.toLowerCase().includes('gaming') )).toBe(true) }) test('should search by category', async () => { const results = await productService.searchProducts(null, 'electronics') expect(results).toHaveLength(2) expect(results.every(p => p.categoryId === 'electronics')).toBe(true) }) test('should search by price range', async () => { const results = await productService.searchProducts(null, null, { min: 30, max: 100 }) expect(results).toHaveLength(1) expect(results[0].name).toBe('Mouse') }) }) describe('inventory management', () => { let productId beforeEach(async () => { const product = await productService.createProduct( 'Test Product', 'A test product', 29.99, 'category1' ) productId = product.id }) test('should update inventory', async () => { const result = await productService.updateInventory(productId, 100) expect(result).toHaveProperty('quantity', 100) expect(result).toHaveProperty('reserved', 0) }) test('should reserve inventory', async () => { await productService.updateInventory(productId, 100) const result = await productService.reserveInventory(productId, 10) expect(result).toHaveProperty('reserved', 10) }) test('should throw error for insufficient inventory', async () => { await productService.updateInventory(productId, 5) await expect( productService.reserveInventory(productId, 10) ).rejects.toThrow('Insufficient inventory') }) }) })