#49 feat: CRUD admin de organizaciones, proveedores y geografía
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import { flushPromises, mount } from '@vue/test-utils'
|
||||
import OrganizationsManagement from '@/components/provenance/admin/OrganizationsManagement.vue'
|
||||
import vuetify from '@/plugins/vuetify'
|
||||
import { clickBody, setBodyInput } from './helpers'
|
||||
|
||||
const organizations = [
|
||||
{
|
||||
id: 1,
|
||||
name: 'Red de Economía Solidaria',
|
||||
description: 'Red de organizaciones',
|
||||
website: 'https://red.example.org',
|
||||
contact_email: 'contacto@red.example.org',
|
||||
contact_phone: '3001112233',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: 'Cooperativa El Campo',
|
||||
description: null,
|
||||
website: null,
|
||||
contact_email: null,
|
||||
contact_phone: null,
|
||||
},
|
||||
]
|
||||
|
||||
function mockApi () {
|
||||
return {
|
||||
getOrganizations: vi.fn().mockResolvedValue(organizations),
|
||||
createOrganization: vi.fn().mockResolvedValue({}),
|
||||
updateOrganization: vi.fn().mockResolvedValue({}),
|
||||
deleteOrganization: vi.fn().mockResolvedValue({}),
|
||||
}
|
||||
}
|
||||
|
||||
function mountComponent (api) {
|
||||
return mount(OrganizationsManagement, {
|
||||
global: { plugins: [vuetify], provide: { api } },
|
||||
})
|
||||
}
|
||||
|
||||
function fillForm () {
|
||||
setBodyInput('[data-testid="org-form-name"] input', 'Fundación Montaña')
|
||||
setBodyInput('[data-testid="org-form-description"] textarea', 'Fundación')
|
||||
setBodyInput('[data-testid="org-form-website"] input', 'https://montana.example.org')
|
||||
setBodyInput('[data-testid="org-form-email"] input', 'info@montana.example.org')
|
||||
setBodyInput('[data-testid="org-form-phone"] input', '3109876543')
|
||||
}
|
||||
|
||||
describe('OrganizationsManagement', () => {
|
||||
it('carga y muestra las organizaciones', async () => {
|
||||
const api = mockApi()
|
||||
const wrapper = mountComponent(api)
|
||||
await flushPromises()
|
||||
|
||||
expect(api.getOrganizations).toHaveBeenCalled()
|
||||
expect(wrapper.text()).toContain('Red de Economía Solidaria')
|
||||
expect(wrapper.text()).toContain('Cooperativa El Campo')
|
||||
})
|
||||
|
||||
it('filtra las organizaciones por búsqueda', async () => {
|
||||
const wrapper = mountComponent(mockApi())
|
||||
await flushPromises()
|
||||
|
||||
await wrapper.find('[data-testid="org-search"] input').setValue('Cooperativa')
|
||||
|
||||
expect(wrapper.text()).toContain('Cooperativa El Campo')
|
||||
expect(wrapper.text()).not.toContain('Red de Economía Solidaria')
|
||||
})
|
||||
|
||||
it('crea una organización', async () => {
|
||||
const api = mockApi()
|
||||
const wrapper = mountComponent(api)
|
||||
await flushPromises()
|
||||
|
||||
await wrapper.find('[data-testid="org-create"]').trigger('click')
|
||||
fillForm()
|
||||
clickBody('[data-testid="org-save"]')
|
||||
await flushPromises()
|
||||
|
||||
expect(api.createOrganization).toHaveBeenCalledWith({
|
||||
name: 'Fundación Montaña',
|
||||
description: 'Fundación',
|
||||
website: 'https://montana.example.org',
|
||||
contact_email: 'info@montana.example.org',
|
||||
contact_phone: '3109876543',
|
||||
})
|
||||
expect(api.getOrganizations).toHaveBeenCalledTimes(2)
|
||||
})
|
||||
|
||||
it('edita una organización', async () => {
|
||||
const api = mockApi()
|
||||
const wrapper = mountComponent(api)
|
||||
await flushPromises()
|
||||
|
||||
await wrapper.find('[data-testid="org-edit-1"]').trigger('click')
|
||||
setBodyInput('[data-testid="org-form-name"] input', 'Red de Economía Solidaria Colombia')
|
||||
clickBody('[data-testid="org-save"]')
|
||||
await flushPromises()
|
||||
|
||||
expect(api.updateOrganization).toHaveBeenCalledWith(1, expect.objectContaining({
|
||||
name: 'Red de Economía Solidaria Colombia',
|
||||
}))
|
||||
})
|
||||
|
||||
it('elimina una organización', async () => {
|
||||
const api = mockApi()
|
||||
const wrapper = mountComponent(api)
|
||||
await flushPromises()
|
||||
|
||||
await wrapper.find('[data-testid="org-delete-2"]').trigger('click')
|
||||
clickBody('[data-testid="org-confirm-delete"]')
|
||||
await flushPromises()
|
||||
|
||||
expect(api.deleteOrganization).toHaveBeenCalledWith(2)
|
||||
expect(api.getOrganizations).toHaveBeenCalledTimes(2)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user