mirror of
https://github.com/unraid/api.git
synced 2026-02-11 10:28:35 -06:00
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - Documentation - Updated contributor guide to use “standalone” naming for web components. - Refactor - Migrated app and component references from legacy variants to standalone components. - Unified component registry and updated global component typings to standalone names. - Tests - Updated test suites to target standalone components; no behavior changes. No user-facing changes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
109 lines
3.4 KiB
TypeScript
109 lines
3.4 KiB
TypeScript
/**
|
|
* DownloadApiLogs Component Test Coverage
|
|
*/
|
|
|
|
import { mount } from '@vue/test-utils';
|
|
|
|
import { BrandButton } from '@unraid/ui';
|
|
import { createTestingPinia } from '@pinia/testing';
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
import DownloadApiLogs from '~/components/DownloadApiLogs.standalone.vue';
|
|
|
|
vi.mock('~/helpers/urls', () => ({
|
|
CONNECT_FORUMS: new URL('http://mock-forums.local'),
|
|
CONTACT: new URL('http://mock-contact.local'),
|
|
DISCORD: new URL('http://mock-discord.local'),
|
|
WEBGUI_GRAPHQL: new URL('http://mock-webgui.local'),
|
|
}));
|
|
|
|
vi.mock('vue-i18n', () => ({
|
|
useI18n: () => ({
|
|
t: (key: string) => key,
|
|
}),
|
|
}));
|
|
|
|
describe('DownloadApiLogs', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
// Mock global csrf_token
|
|
globalThis.csrf_token = 'mock-csrf-token';
|
|
});
|
|
|
|
it('provides a download button with the correct URL', () => {
|
|
const wrapper = mount(DownloadApiLogs, {
|
|
global: {
|
|
plugins: [createTestingPinia({ createSpy: vi.fn })],
|
|
stubs: {
|
|
ArrowDownTrayIcon: true,
|
|
ArrowTopRightOnSquareIcon: true,
|
|
},
|
|
},
|
|
});
|
|
|
|
// Expected download URL
|
|
const expectedUrl = new URL('/graphql/api/logs', 'http://mock-webgui.local');
|
|
expectedUrl.searchParams.append('csrf_token', 'mock-csrf-token');
|
|
|
|
// Find the download button
|
|
const downloadButton = wrapper.findComponent(BrandButton);
|
|
|
|
// Verify download button exists and has correct attributes
|
|
expect(downloadButton.exists()).toBe(true);
|
|
expect(downloadButton.attributes('href')).toBe(expectedUrl.toString());
|
|
expect(downloadButton.attributes('download')).toBe('');
|
|
expect(downloadButton.attributes('target')).toBe('_blank');
|
|
expect(downloadButton.attributes('rel')).toBe('noopener noreferrer');
|
|
expect(downloadButton.text()).toContain('Download unraid-api Logs');
|
|
});
|
|
|
|
it('displays support links to documentation and help resources', () => {
|
|
const wrapper = mount(DownloadApiLogs, {
|
|
global: {
|
|
plugins: [createTestingPinia({ createSpy: vi.fn })],
|
|
stubs: {
|
|
ArrowDownTrayIcon: true,
|
|
ArrowTopRightOnSquareIcon: true,
|
|
},
|
|
},
|
|
});
|
|
|
|
const links = wrapper.findAll('a');
|
|
expect(links.length).toBe(4);
|
|
|
|
expect(links[1].attributes('href')).toBe('http://mock-forums.local/');
|
|
expect(links[1].text()).toContain('Unraid Connect Forums');
|
|
|
|
expect(links[2].attributes('href')).toBe('http://mock-discord.local/');
|
|
expect(links[2].text()).toContain('Unraid Discord');
|
|
|
|
expect(links[3].attributes('href')).toBe('http://mock-contact.local/');
|
|
expect(links[3].text()).toContain('Unraid Contact Page');
|
|
|
|
links.slice(1).forEach((link) => {
|
|
expect(link.attributes('target')).toBe('_blank');
|
|
expect(link.attributes('rel')).toBe('noopener noreferrer');
|
|
});
|
|
});
|
|
|
|
it('displays instructions about log usage and privacy', () => {
|
|
const wrapper = mount(DownloadApiLogs, {
|
|
global: {
|
|
plugins: [createTestingPinia({ createSpy: vi.fn })],
|
|
stubs: {
|
|
ArrowDownTrayIcon: true,
|
|
ArrowTopRightOnSquareIcon: true,
|
|
},
|
|
},
|
|
});
|
|
|
|
const text = wrapper.text();
|
|
|
|
expect(text).toContain(
|
|
'The primary method of support for Unraid Connect is through our forums and Discord'
|
|
);
|
|
expect(text).toContain('If you are asked to supply logs');
|
|
expect(text).toContain('The logs may contain sensitive information so do not post them publicly');
|
|
});
|
|
});
|