import { describe, it, expect, beforeEach } from 'vitest';
import { mount, flushPromises } from '@vue/test-utils';
import { createPinia, setActivePinia } from 'pinia';
import { createRouter, createMemoryHistory } from 'vue-router';
import { resetFactory, getFactory } from '../adapters/factory';
import ResolveView from '../views/ResolveView.vue';
const TEST_URI = 'https://glossarist.org/test/concept/1';
async function createTestRouter(uri = TEST_URI) {
const router = createRouter({
history: createMemoryHistory(),
routes: [
{ path: '/', name: 'home', component: { template: '
' } },
{ path: '/dataset/:registerId/concept/:conceptId', name: 'concept', component: { template: '' } },
{ path: '/resolve/:uri(.*)', name: 'resolve', component: { template: '' } },
],
});
router.push(`/resolve/${encodeURIComponent(uri)}`);
await router.isReady();
return router;
}
describe('ResolveView', () => {
let pinia: ReturnType;
let router: Awaited>;
beforeEach(async () => {
resetFactory();
pinia = createPinia();
setActivePinia(pinia);
router = await createTestRouter();
// Pre-seed the factory with a stub adapter so discoverDatasets is skipped
const factory = getFactory();
const adapter = { registerId: 'test', manifest: null };
(factory as any).adapters.set('test', adapter);
});
function mountResolve() {
return mount(ResolveView, {
global: { plugins: [pinia, router] },
});
}
it('shows resolving message while loading', () => {
const wrapper = mountResolve();
expect(wrapper.text()).toContain('Resolving...');
});
it('shows error when concept not found', async () => {
const wrapper = mountResolve();
await flushPromises();
expect(wrapper.text()).toContain('Concept not found');
});
it('displays the URI being resolved', async () => {
const wrapper = mountResolve();
await flushPromises();
expect(wrapper.text()).toContain('glossarist.org/test/concept/1');
});
it('shows return to home link on error', async () => {
const wrapper = mountResolve();
await flushPromises();
const link = wrapper.findAll('a').find(a => a.text().includes('Return to home'));
expect(link).toBeDefined();
});
it('resolves the URI via the factory resolver', async () => {
const factory = getFactory();
factory.uriRouter.registerDataset('test', '', '', ['https://glossarist.org/test/*']);
const resolution = factory.resolve(TEST_URI);
expect(resolution.type).toBe('internal');
expect(resolution).toHaveProperty('registerId', 'test');
expect(resolution).toHaveProperty('conceptId', '1');
});
});