Spaces:
Sleeping
Sleeping
File size: 6,232 Bytes
cd99321 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | import { describe, it, expect, beforeEach, vi } from 'vitest';
import { render, screen, fireEvent } from '../../../tests/helpers/render';
import { resetAllStores } from '../../../tests/helpers/store';
import AboutTab from './AboutTab';
beforeEach(() => {
resetAllStores();
vi.clearAllMocks();
});
describe('AboutTab', () => {
it('FE-COMP-ABOUT-001: renders without crashing', () => {
render(<AboutTab appVersion="2.9.10" />);
expect(document.body).toBeInTheDocument();
});
it('FE-COMP-ABOUT-002: displays the version badge', () => {
render(<AboutTab appVersion="2.9.10" />);
expect(screen.getByText('v2.9.10')).toBeInTheDocument();
});
it('FE-COMP-ABOUT-003: displays Ko-fi link with correct href', () => {
render(<AboutTab appVersion="2.9.10" />);
const link = screen.getByText('Ko-fi').closest('a');
expect(link).toHaveAttribute('href', 'https://ko-fi.com/mauriceboe');
});
it('FE-COMP-ABOUT-004: displays Buy Me a Coffee link with correct href', () => {
render(<AboutTab appVersion="2.9.10" />);
const link = screen.getByText('Buy Me a Coffee').closest('a');
expect(link).toHaveAttribute('href', 'https://buymeacoffee.com/mauriceboe');
});
it('FE-COMP-ABOUT-005: displays Discord link with correct href', () => {
render(<AboutTab appVersion="2.9.10" />);
const link = screen.getByText('Discord').closest('a');
expect(link).toHaveAttribute('href', 'https://discord.gg/NhZBDSd4qW');
});
it('FE-COMP-ABOUT-006: displays bug report link', () => {
render(<AboutTab appVersion="2.9.10" />);
const link = document.querySelector('a[href*="issues/new"]');
expect(link).toBeInTheDocument();
expect(link).toHaveAttribute(
'href',
'https://github.com/mauriceboe/TREK/issues/new?template=bug_report.yml',
);
});
it('FE-COMP-ABOUT-007: displays feature request link', () => {
render(<AboutTab appVersion="2.9.10" />);
const link = document.querySelector('a[href*="discussions/new"]');
expect(link).toBeInTheDocument();
expect(link).toHaveAttribute('target', '_blank');
});
it('FE-COMP-ABOUT-008: displays wiki link', () => {
render(<AboutTab appVersion="2.9.10" />);
const link = document.querySelector('a[href*="wiki"]');
expect(link).toBeInTheDocument();
});
it('FE-COMP-ABOUT-009: all external links have rel="noopener noreferrer"', () => {
render(<AboutTab appVersion="2.9.10" />);
const links = document.querySelectorAll('a');
expect(links).toHaveLength(6);
links.forEach((link) => {
expect(link).toHaveAttribute('rel', 'noopener noreferrer');
});
});
it('FE-COMP-ABOUT-010: all external links open in a new tab', () => {
render(<AboutTab appVersion="2.9.10" />);
const links = document.querySelectorAll('a');
links.forEach((link) => {
expect(link).toHaveAttribute('target', '_blank');
});
});
it('FE-COMP-ABOUT-011: version prop change is reflected', () => {
render(<AboutTab appVersion="1.0.0" />);
expect(screen.getByText('v1.0.0')).toBeInTheDocument();
expect(screen.queryByText('v2.9.10')).toBeNull();
});
it('FE-COMP-ABOUT-012: Ko-fi link hover changes border and box-shadow styles', () => {
render(<AboutTab appVersion="1.0.0" />);
const link = screen.getByText('Ko-fi').closest('a') as HTMLAnchorElement;
fireEvent.mouseEnter(link);
expect(link.style.borderColor).toBe('rgb(255, 94, 91)');
expect(link.style.boxShadow).not.toBe('');
fireEvent.mouseLeave(link);
expect(link.style.borderColor).toBe('var(--border-primary)');
expect(link.style.boxShadow).toBe('none');
});
it('FE-COMP-ABOUT-013: Buy Me a Coffee link hover changes border and box-shadow styles', () => {
render(<AboutTab appVersion="1.0.0" />);
const link = screen.getByText('Buy Me a Coffee').closest('a') as HTMLAnchorElement;
fireEvent.mouseEnter(link);
expect(link.style.borderColor).toBe('rgb(255, 221, 0)');
expect(link.style.boxShadow).not.toBe('');
fireEvent.mouseLeave(link);
expect(link.style.borderColor).toBe('var(--border-primary)');
expect(link.style.boxShadow).toBe('none');
});
it('FE-COMP-ABOUT-014: Discord link hover changes border and box-shadow styles', () => {
render(<AboutTab appVersion="1.0.0" />);
const link = screen.getByText('Discord').closest('a') as HTMLAnchorElement;
fireEvent.mouseEnter(link);
expect(link.style.borderColor).toBe('rgb(88, 101, 242)');
expect(link.style.boxShadow).not.toBe('');
fireEvent.mouseLeave(link);
expect(link.style.borderColor).toBe('var(--border-primary)');
expect(link.style.boxShadow).toBe('none');
});
it('FE-COMP-ABOUT-015: Bug report link hover changes border and box-shadow styles', () => {
render(<AboutTab appVersion="1.0.0" />);
const link = document.querySelector('a[href*="issues/new"]') as HTMLAnchorElement;
fireEvent.mouseEnter(link);
expect(link.style.borderColor).toBe('rgb(239, 68, 68)');
expect(link.style.boxShadow).not.toBe('');
fireEvent.mouseLeave(link);
expect(link.style.borderColor).toBe('var(--border-primary)');
expect(link.style.boxShadow).toBe('none');
});
it('FE-COMP-ABOUT-016: Feature request link hover changes border and box-shadow styles', () => {
render(<AboutTab appVersion="1.0.0" />);
const link = document.querySelector('a[href*="discussions/new"]') as HTMLAnchorElement;
fireEvent.mouseEnter(link);
expect(link.style.borderColor).toBe('rgb(245, 158, 11)');
expect(link.style.boxShadow).not.toBe('');
fireEvent.mouseLeave(link);
expect(link.style.borderColor).toBe('var(--border-primary)');
expect(link.style.boxShadow).toBe('none');
});
it('FE-COMP-ABOUT-017: Wiki link hover changes border and box-shadow styles', () => {
render(<AboutTab appVersion="1.0.0" />);
const link = document.querySelector('a[href*="wiki"]') as HTMLAnchorElement;
fireEvent.mouseEnter(link);
expect(link.style.borderColor).toBe('rgb(99, 102, 241)');
expect(link.style.boxShadow).not.toBe('');
fireEvent.mouseLeave(link);
expect(link.style.borderColor).toBe('var(--border-primary)');
expect(link.style.boxShadow).toBe('none');
});
});
|