import { describe, expect, it } from 'vitest' import { mount } from '@vue/test-utils' import PublicOrderSummary from '@/components/PublicOrderSummary.vue' import OrderAccessInfo from '@/components/order/OrderAccessInfo.vue' import OrderCustomer from '@/components/order/OrderCustomer.vue' import OrderLines from '@/components/order/OrderLines.vue' import OrderTotal from '@/components/order/OrderTotal.vue' import OrderPayment from '@/components/order/OrderPayment.vue' import vuetify from '@/plugins/vuetify' const saleData = { id: 5, code: 'abc123', date: '2024-09-02T00:00:00Z', customer: { id: 1, name: 'Camilo' }, payment_method: 'CASH', lines: [ { product: { id: 10, name: 'Panela' }, quantity: 2, unit_price: 3000 }, { product: { id: 11, name: 'Arroz' }, quantity: 1, unit_price: 5000 }, ], type: 'sale', } const catalogData = { id: 7, code: 'def456', date: '2024-09-02T00:00:00Z', customer: { id: 1, name: 'Camilo' }, lines: [{ product: { id: 10, name: 'Panela' }, quantity: 2, unit_price: 3000 }], type: 'catalog', } function mountSummary (props) { return mount(PublicOrderSummary, { props, global: { plugins: [vuetify] }, }) } describe('PublicOrderSummary', () => { it('renderiza el resumen de una venta con sus partes', () => { const wrapper = mountSummary({ purchase: saleData }) expect(wrapper.findComponent(OrderAccessInfo).exists()).toBe(true) expect(wrapper.findComponent(OrderCustomer).exists()).toBe(true) expect(wrapper.findComponent(OrderLines).exists()).toBe(true) expect(wrapper.findComponent(OrderTotal).exists()).toBe(true) expect(wrapper.findComponent(OrderPayment).exists()).toBe(true) expect(wrapper.text()).toContain('Camilo') expect(wrapper.text()).toContain('Panela') expect(wrapper.text()).toContain('Arroz') expect(wrapper.text().replace(/\u00A0/g, ' ')).toContain('11.000') }) it('renderiza un pedido de catálogo sin bloque de pago', () => { const wrapper = mountSummary({ purchase: catalogData }) expect(wrapper.findComponent(OrderAccessInfo).exists()).toBe(true) expect(wrapper.findComponent(OrderCustomer).exists()).toBe(true) expect(wrapper.findComponent(OrderLines).exists()).toBe(true) expect(wrapper.findComponent(OrderTotal).exists()).toBe(true) expect(wrapper.findComponent(OrderPayment).exists()).toBe(false) expect(wrapper.text()).toContain('Camilo') expect(wrapper.text()).toContain('Panela') }) it('muestra el estado de carga', () => { const wrapper = mountSummary({ purchase: null, loading: true }) expect(wrapper.text()).toContain('Cargando') }) it('muestra el mensaje de error cuando lo recibe', () => { const wrapper = mountSummary({ purchase: null, error: 'No se encontró un pedido con ese código.', }) expect(wrapper.text()).toContain('No se encontró un pedido con ese código.') }) it('no renderiza datos cuando no hay pedido, carga ni error', () => { const wrapper = mountSummary({ purchase: null }) expect(wrapper.text()).not.toContain('Camilo') expect(wrapper.findComponent(OrderLines).exists()).toBe(false) }) })