97 lines
3.1 KiB
JavaScript
97 lines
3.1 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('muestra el producto y un aviso cuando no hay proveedor vinculado', () => {
|
|
mountModal({ relation: null })
|
|
|
|
expect(bodyText()).toContain('Panela regional')
|
|
expect(bodyText()).toContain('no se ha vinculado un proveedor')
|
|
})
|
|
|
|
it('no muestra contenido cuando no hay producto ni relación', () => {
|
|
mountModal({ relation: null, product: null })
|
|
|
|
expect(bodyText()).not.toContain('Proveedor')
|
|
expect(bodyText()).not.toContain('Producto')
|
|
})
|
|
|
|
it('indica que aún no tiene geolocalización cuando la relación no tiene municipio', () => {
|
|
mountModal({ relation: { supplier: { id: 5, name: 'Asociación La Mesa' } } })
|
|
|
|
expect(bodyText()).toContain('Asociación La Mesa')
|
|
expect(bodyText()).toContain('sin geolocalización')
|
|
})
|
|
|
|
it('no muestra el diálogo cuando visible es false', () => {
|
|
mountModal({ visible: false })
|
|
|
|
expect(bodyText()).not.toContain('Asociación La Mesa')
|
|
})
|
|
})
|