Skip to content

Real-World Business Scenarios

Practical business logic implementation using Canon for order processing, customer management, and workflows

calculates order total correctly:

ts
const totals = calculateOrderTotal(sampleOrder)

expect(totals.subtotal).toBe(199.98)
expect(totals.discount).toBeCloseTo(19.998, 2)
expect(totals.tax).toBeCloseTo(14.398, 2)
expect(totals.total).toBeCloseTo(194.38, 2)
expect(totals.currency).toBe('USD')

updates order status with version control:

ts
const result = updateOrderStatus(sampleOrder, 'shipped')

expect(result.success).toBe(true)
expect(result.oldStatus).toBe('processing')
expect(result.newVersion).toBe(3)

rejects invalid status transitions:

ts
const result = updateOrderStatus(sampleOrder, 'pending')

expect(result.success).toBe(false)
expect(result.error).toContain('Invalid status transition')

generates order summary correctly:

ts
const summary = generateOrderSummary(sampleOrder)

expect(summary.orderId).toBe('order-789')
expect(summary.status).toBe('processing')
expect(summary.total).toBe(194.38)
expect(summary.currency).toBe('USD')
expect(summary.itemCount).toBe(1)
expect(summary.customerId).toBe('cust-123')

validates customer for order:

ts
const validation = validateCustomerForOrder(sampleCustomer)

expect(validation.valid).toBe(true)
expect(validation.warnings).toHaveLength(0)
expect(validation.errors).toHaveLength(0)

validates customer with missing payment methods:

ts
const customerWithoutPayment = { ...sampleCustomer, paymentMethods: [] }
const validation = validateCustomerForOrder(customerWithoutPayment)

expect(validation.valid).toBe(true)
expect(validation.warnings).toContain('Customer has no payment methods')

processes complete order workflow:

ts
// Create a new order with 'pending' status for the workflow test
const pendingOrder = { ...sampleOrder, status: 'pending' }
const workflow = processOrderWorkflow(sampleCustomer, pendingOrder)

expect(workflow.success).toBe(true)
expect(workflow.steps).toHaveLength(4)
expect(workflow.steps.every(step => step.success)).toBe(true)

handles workflow errors gracefully:

ts
const invalidCustomer = { id: 'invalid' }
const workflow = processOrderWorkflow(invalidCustomer, sampleOrder)

expect(workflow.success).toBe(false)
expect(workflow.steps.some(step => !step.success)).toBe(true)

References

Source: View on GitHub

Metadata

Keywords: business-logic, order-processing, workflow, e-commerce, domain-models Difficulty: advanced

Released under the MIT License.