Files
don_confiao_frontend/tests/unit/components/provenance/ProvenanceRelationModal.spec.js

82 lines
2.5 KiB
JavaScript

import { describe, expect, it } from 'vitest'
import { mount } from '@vue/test-utils'
import ProvenanceRelationModal from '@/components/provenance/ProvenanceRelationModal.vue'
import vuetify from '@/plugins/vuetify'
const relation = {
supplier: { id: 5, name: 'Asociación La Mesa', contact_email: 'info@mesa.co' },
organization: { id: 3, name: 'Red de Economía Solidaria' },
municipality: { id: 7, name: 'Santa Bárbara' },
department: { id: 2, name: 'Antioquia' },
country: { id: 1, name: 'Colombia', code: 'CO' },
}
const product = {
id: 1,
name: 'Panela regional',
catalogue_images: ['http://localhost/media/panela.jpg'],
}
function mountModal (props = {}) {
return mount(ProvenanceRelationModal, {
props: { product, relation, visible: true, ...props },
global: { plugins: [vuetify] },
})
}
function bodyText () {
return document.body.textContent
}
describe('ProvenanceRelationModal', () => {
it('muestra el producto y todas las entidades de la relación', () => {
mountModal()
expect(bodyText()).toContain('Panela regional')
expect(bodyText()).toContain('Proveedor')
expect(bodyText()).toContain('Asociación La Mesa')
expect(bodyText()).toContain('Organización')
expect(bodyText()).toContain('Red de Economía Solidaria')
expect(bodyText()).toContain('Municipio')
expect(bodyText()).toContain('Santa Bárbara')
expect(bodyText()).toContain('Departamento')
expect(bodyText()).toContain('Antioquia')
expect(bodyText()).toContain('País')
expect(bodyText()).toContain('Colombia')
})
it('incluye los detalles de contacto del proveedor', () => {
mountModal()
expect(bodyText()).toContain('info@mesa.co')
})
it('muestra la imagen del producto cuando existe', () => {
mountModal()
expect(document.querySelector('img').getAttribute('src')).toBe(
'http://localhost/media/panela.jpg'
)
})
it('no muestra las entidades ausentes', () => {
mountModal({ relation: { supplier: { id: 5, name: 'Asociación La Mesa' } } })
expect(bodyText()).not.toContain('Organización')
expect(bodyText()).not.toContain('Municipio')
expect(bodyText()).not.toContain('Departamento')
expect(bodyText()).not.toContain('País')
})
it('no muestra contenido cuando no hay relación', () => {
mountModal({ relation: null })
expect(bodyText()).not.toContain('Proveedor')
})
it('no muestra el diálogo cuando visible es false', () => {
mountModal({ visible: false })
expect(bodyText()).not.toContain('Asociación La Mesa')
})
})