81 lines
2.5 KiB
JavaScript
81 lines
2.5 KiB
JavaScript
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
import { flushPromises, mount } from '@vue/test-utils'
|
|
import { createPinia, setActivePinia } from 'pinia'
|
|
import NavBar from '@/components/NavBar.vue'
|
|
import vuetify from '@/plugins/vuetify'
|
|
|
|
import AuthService from '@/services/auth'
|
|
|
|
vi.mock('@/services/auth', () => ({
|
|
default: {
|
|
isAuthenticated: vi.fn(),
|
|
logout: vi.fn(),
|
|
},
|
|
}))
|
|
|
|
function mountNavBar (api) {
|
|
const pinia = createPinia()
|
|
setActivePinia(pinia)
|
|
const wrapper = mount(NavBar, {
|
|
global: {
|
|
plugins: [pinia, vuetify],
|
|
provide: { api },
|
|
mocks: { $router: { push: vi.fn() } },
|
|
stubs: {
|
|
VAppBar: { template: '<div><slot /></div>' },
|
|
VNavigationDrawer: { template: '<div><slot /></div>' },
|
|
},
|
|
},
|
|
})
|
|
return { wrapper }
|
|
}
|
|
|
|
describe('NavBar', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks()
|
|
localStorage.clear()
|
|
})
|
|
|
|
it('sin sesión muestra el botón de login y no el menú de administración', async () => {
|
|
AuthService.isAuthenticated.mockReturnValue(false)
|
|
const { wrapper } = mountNavBar({ getCurrentUser: vi.fn() })
|
|
await flushPromises()
|
|
|
|
expect(wrapper.text()).toContain('Login')
|
|
expect(wrapper.text()).not.toContain('Administracion')
|
|
})
|
|
|
|
it('el administrador ve los ítems de administración de provenance', async () => {
|
|
AuthService.isAuthenticated.mockReturnValue(true)
|
|
const api = {
|
|
getCurrentUser: vi.fn().mockResolvedValue({ username: 'admin', role: 'administrator' }),
|
|
}
|
|
const { wrapper } = mountNavBar(api)
|
|
await flushPromises()
|
|
|
|
expect(api.getCurrentUser).toHaveBeenCalled()
|
|
expect(wrapper.text()).toContain('Administracion')
|
|
|
|
const adminItem = wrapper.findAll('.v-list-item')
|
|
.find(item => item.text().includes('Administracion'))
|
|
await adminItem.trigger('click')
|
|
|
|
expect(wrapper.text()).toContain('Organizaciones')
|
|
expect(wrapper.text()).toContain('Proveedores')
|
|
expect(wrapper.text()).toContain('Geografía')
|
|
})
|
|
|
|
it('el usuario público no ve el menú de administración y no ve "Comprar"', async () => {
|
|
AuthService.isAuthenticated.mockReturnValue(true)
|
|
const api = {
|
|
getCurrentUser: vi.fn().mockResolvedValue({ username: 'cliente', role: 'publico' }),
|
|
}
|
|
const { wrapper } = mountNavBar(api)
|
|
await flushPromises()
|
|
|
|
expect(wrapper.text()).not.toContain('Administracion')
|
|
expect(wrapper.text()).not.toContain('Comprar')
|
|
expect(wrapper.text()).toContain('Ver Catálogo')
|
|
})
|
|
})
|