Files
QuantEngineByItz/oms-wms-erp/tests/integration/orders.spec.ts
T
kjh2064 b34b0dd7d6
Validators (Pushes and Pull Requests) / UI & Storage Validation (pull_request) Failing after 12s
Validators (Pushes and Pull Requests) / Database & Schema Validation (pull_request) Successful in 13s
Validators (Pushes and Pull Requests) / Core Validators & Database Setup (pull_request) Failing after 28s
Validators (Pushes and Pull Requests) / WBS & Audit Validations (pull_request) Has been skipped
Validators (Pushes and Pull Requests) / .NET Contracts (pull_request) Has been skipped
Validators (Pushes and Pull Requests) / Calibration & Performance (pull_request) Has been skipped
Validators (Pushes and Pull Requests) / Operational Report & Decision Packet (pull_request) Has been skipped
Validators (Pushes and Pull Requests) / CI Workflow Lint (pull_request) Failing after 10s
Validators (Pushes and Pull Requests) / Security & Secrets (pull_request) Successful in 12s
Validators (Pushes and Pull Requests) / Notify PR Results (pull_request) Successful in 2s
Frontend CI Pipeline / ci-frontend-8-steps (pull_request) Failing after 2m50s
Add OMS WMS ERP platform
2026-07-27 00:45:39 +09:00

222 lines
5.8 KiB
TypeScript

/**
* Integration Tests: Orders Store with API
* Tests Pinia store integration with mocked API endpoints
*
* Run: npm run test:integration
*/
import { beforeEach, describe, expect, it, vi } from 'vitest'
import { setActivePinia, createPinia } from 'pinia'
import { useOrderStore } from '@/stores/modules/orders'
import { ordersApi } from '@/services/api/client'
import { server } from '@/tests/mocks/server'
import { http, HttpResponse } from 'msw'
/**
* Test Suite: Orders Store
*/
describe('Orders Store with API Integration', () => {
beforeEach(() => {
setActivePinia(createPinia())
})
describe('fetchOrders', () => {
it('loads orders from API', async () => {
const store = useOrderStore()
await store.fetchOrders(100, 0)
expect(store.orders).toHaveLength(2)
expect(store.orders[0].orderNo).toBe('ORD-001')
expect(store.loading).toBe(false)
expect(store.error).toBeNull()
})
it('sets loading state during fetch', async () => {
const store = useOrderStore()
// Delay the API response
server.use(
http.get('*/api/orders', async () => {
await new Promise((resolve) => setTimeout(resolve, 100))
return HttpResponse.json({ data: [] })
})
)
const fetchPromise = store.fetchOrders()
expect(store.loading).toBe(true)
await fetchPromise
expect(store.loading).toBe(false)
})
it('handles API errors gracefully', async () => {
const store = useOrderStore()
server.use(
http.get('*/api/orders', () => {
return HttpResponse.json(
{ message: 'Internal Server Error' },
{ status: 500 }
)
})
)
await store.fetchOrders()
expect(store.error).not.toBeNull()
expect(store.orders).toHaveLength(0)
})
})
describe('fetchOrderById', () => {
it('loads single order by ID', async () => {
const store = useOrderStore()
await store.fetchOrderById('ORD-001')
expect(store.selectedOrder).not.toBeNull()
expect(store.selectedOrder?.orderId).toBe('ORD-001')
expect(store.loading).toBe(false)
})
it('handles 404 not found', async () => {
const store = useOrderStore()
server.use(
http.get('*/api/orders/:orderId', () => {
return HttpResponse.json(
{ message: 'Not Found' },
{ status: 404 }
)
})
)
await store.fetchOrderById('ORD-NONEXISTENT')
expect(store.error).not.toBeNull()
expect(store.selectedOrder).toBeNull()
})
})
describe('createOrder', () => {
it('creates new order and updates store', async () => {
const store = useOrderStore()
const payload = {
customerId: 'CUST-001',
totalAmount: 100000
}
const createdOrder = await store.createOrder(payload)
expect(createdOrder).toBeDefined()
expect(createdOrder.orderId).toBe('ORD-NEW')
expect(store.selectedOrder?.orderId).toBe('ORD-NEW')
expect(store.loading).toBe(false)
})
it('adds created order to store', async () => {
const store = useOrderStore()
const initialCount = store.orders.length
await store.createOrder({ customerId: 'CUST-002', totalAmount: 50000 })
expect(store.orders.length).toBeGreaterThan(initialCount)
})
it('throws error on creation failure', async () => {
const store = useOrderStore()
server.use(
http.post('*/api/orders', () => {
return HttpResponse.json(
{ message: 'Validation failed' },
{ status: 400 }
)
})
)
await expect(
store.createOrder({ customerId: 'CUST-001' })
).rejects.toThrow()
})
})
describe('updateOrder', () => {
it('updates order and reflects changes', async () => {
const store = useOrderStore()
const orderId = 'ORD-001'
const updates = { status: 'CONFIRMED', totalAmount: 150000 }
const updatedOrder = await store.updateOrder(orderId, updates)
expect(updatedOrder?.status).toBe('CONFIRMED')
expect(updatedOrder?.totalAmount).toBe(150000)
})
})
describe('deleteOrder', () => {
it('removes order from store', async () => {
const store = useOrderStore()
// Mock: add an order first
store.orders.push({
orderId: 'ORD-001',
orderNo: 'ORD-001',
status: 'DRAFT',
totalAmount: 100000
} as any)
const initialCount = store.orders.length
await store.deleteOrder('ORD-001')
expect(store.orders.length).toBeLessThan(initialCount)
})
})
describe('filtering', () => {
it('applies filters to orders', () => {
const store = useOrderStore()
store.setFilter('status', 'DRAFT')
store.setFilter('customerId', 'CUST-001')
expect(store.filters.status).toBe('DRAFT')
expect(store.filters.customerId).toBe('CUST-001')
})
it('clears all filters', () => {
const store = useOrderStore()
store.setFilter('status', 'DRAFT')
store.setFilter('customerId', 'CUST-001')
store.clearFilters()
expect(Object.keys(store.filters)).toHaveLength(0)
})
})
})
/**
* Test Suite: Orders API Client
*/
describe('Orders API Client', () => {
it('lists orders via API', async () => {
const orders = await ordersApi.listOrders({ limit: 100 })
expect(orders).toBeDefined()
expect(Array.isArray(orders.data || orders)).toBe(true)
})
it('gets single order via API', async () => {
const order = await ordersApi.getOrder('ORD-001')
expect(order.orderId).toBe('ORD-001')
})
it('creates order via API', async () => {
const payload = { customerId: 'CUST-001', totalAmount: 100000 }
const created = await ordersApi.createOrder(payload)
expect(created.orderId).toBeDefined()
})
})