Files
don_confiao_frontend/tests/unit/components/provenance/admin/GeographyManagement.spec.js

115 lines
4.3 KiB
JavaScript

import { describe, expect, it, vi } from 'vitest'
import { flushPromises, mount } from '@vue/test-utils'
import GeographyManagement from '@/components/provenance/admin/GeographyManagement.vue'
import vuetify from '@/plugins/vuetify'
import { clickBody, setBodyInput } from './helpers'
const countries = [
{ id: 1, name: 'Colombia', code: 'CO' },
{ id: 2, name: 'Venezuela', code: 'VE' },
]
const departments = [
{ id: 2, name: 'Cundinamarca', country: 1, country_detail: { id: 1, name: 'Colombia', code: 'CO' } },
{ id: 3, name: 'Antioquia', country: 1, country_detail: { id: 1, name: 'Colombia', code: 'CO' } },
]
const municipalities = [
{ id: 7, name: 'La Mesa', department: 2, country: 1, department_detail: { id: 2, name: 'Cundinamarca' } },
{ id: 8, name: 'San Antonio', department: 3, country: 1, department_detail: { id: 3, name: 'Antioquia' } },
]
function mockApi () {
return {
getCountries: vi.fn().mockResolvedValue(countries),
createCountry: vi.fn().mockResolvedValue({}),
updateCountry: vi.fn().mockResolvedValue({}),
deleteCountry: vi.fn().mockResolvedValue({}),
getDepartments: vi.fn().mockResolvedValue(departments),
createDepartment: vi.fn().mockResolvedValue({}),
updateDepartment: vi.fn().mockResolvedValue({}),
deleteDepartment: vi.fn().mockResolvedValue({}),
getMunicipalities: vi.fn().mockResolvedValue(municipalities),
createMunicipality: vi.fn().mockResolvedValue({}),
updateMunicipality: vi.fn().mockResolvedValue({}),
deleteMunicipality: vi.fn().mockResolvedValue({}),
}
}
function mountComponent (api) {
return mount(GeographyManagement, {
global: { plugins: [vuetify], provide: { api } },
})
}
describe('GeographyManagement', () => {
it('muestra los países por defecto y permite crear uno', async () => {
const api = mockApi()
const wrapper = mountComponent(api)
await flushPromises()
expect(api.getCountries).toHaveBeenCalled()
expect(wrapper.text()).toContain('Colombia')
await wrapper.find('[data-testid="geo-country-create"]').trigger('click')
setBodyInput('[data-testid="geo-country-form-name"] input', 'Ecuador')
setBodyInput('[data-testid="geo-country-form-code"] input', 'EC')
clickBody('[data-testid="geo-country-save"]')
await flushPromises()
expect(api.createCountry).toHaveBeenCalledWith({ name: 'Ecuador', code: 'EC' })
expect(api.getCountries).toHaveBeenCalledTimes(2)
})
it('cambia a la pestaña de departamentos y crea uno', async () => {
const api = mockApi()
const wrapper = mountComponent(api)
await flushPromises()
await wrapper.find('[data-testid="geo-tab-departments"]').trigger('click')
await flushPromises()
expect(api.getDepartments).toHaveBeenCalled()
expect(wrapper.text()).toContain('Cundinamarca')
await wrapper.find('[data-testid="geo-department-create"]').trigger('click')
setBodyInput('[data-testid="geo-department-form-name"] input', 'Risaralda')
const countrySelect = wrapper.findAllComponents({ name: 'VSelect' })
.find(select => select.props('items').some(item => item.id === 2))
await countrySelect.vm.$emit('update:modelValue', 2)
clickBody('[data-testid="geo-department-save"]')
await flushPromises()
expect(api.createDepartment).toHaveBeenCalledWith(expect.objectContaining({
name: 'Risaralda',
country: 2,
}))
expect(api.getDepartments).toHaveBeenCalledTimes(2)
})
it('cambia a la pestaña de municipios y crea uno con departamento y país', async () => {
const api = mockApi()
const wrapper = mountComponent(api)
await flushPromises()
await wrapper.find('[data-testid="geo-tab-municipalities"]').trigger('click')
await flushPromises()
expect(api.getMunicipalities).toHaveBeenCalled()
expect(wrapper.text()).toContain('San Antonio')
await wrapper.find('[data-testid="geo-municipality-create"]').trigger('click')
setBodyInput('[data-testid="geo-municipality-form-name"] input', 'Pereira')
await wrapper.findAllComponents({ name: 'VAutocomplete' })[0].vm.$emit('update:modelValue', 3)
clickBody('[data-testid="geo-municipality-save"]')
await flushPromises()
expect(api.createMunicipality).toHaveBeenCalledWith(expect.objectContaining({
name: 'Pereira',
department: 3,
country: 1,
}))
expect(api.getMunicipalities).toHaveBeenCalledTimes(2)
})
})