Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 59 additions & 63 deletions packages/integrations/src/__tests__/github.test.ts
Original file line number Diff line number Diff line change
@@ -1,67 +1,63 @@
import { describe, it, expect } from 'vitest';
import { formatFindingAsMarkdown } from '../github';
import { type AccessibilityFinding } from '../types';

describe('formatFindingAsMarkdown', () => {
const baseFinding: AccessibilityFinding = {
id: 'f-1234',
url: 'https://example.com',
wcagCriteria: '1.4.3 Contrast (Minimum)',
severity: 'minor',
description: 'Text has insufficient color contrast.',
help: 'Ensure text has a contrast ratio of at least 4.5:1.',
impact: 'Users with low vision cannot read the text.',
timestamp: '2023-10-27T10:00:00Z',
element: 'div.low-contrast'
};

it('maps critical severity to πŸ”΄', () => {
const finding: AccessibilityFinding = { ...baseFinding, severity: 'critical' };
const markdown = formatFindingAsMarkdown(finding);
expect(markdown).toContain('πŸ”΄ **Severity:** CRITICAL');
});

it('maps serious severity to 🟠', () => {
const finding: AccessibilityFinding = { ...baseFinding, severity: 'serious' };
const markdown = formatFindingAsMarkdown(finding);
expect(markdown).toContain('🟠 **Severity:** SERIOUS');
});

it('maps moderate severity to 🟑', () => {
const finding: AccessibilityFinding = { ...baseFinding, severity: 'moderate' };
const markdown = formatFindingAsMarkdown(finding);
expect(markdown).toContain('🟑 **Severity:** MODERATE');
});

it('maps minor severity to πŸ”΅', () => {
const finding: AccessibilityFinding = { ...baseFinding, severity: 'minor' };
const markdown = formatFindingAsMarkdown(finding);
expect(markdown).toContain('πŸ”΅ **Severity:** MINOR');
});

it('uses βšͺ for unknown severity', () => {
const finding = { ...baseFinding, severity: 'unknown' } as unknown as AccessibilityFinding;
const markdown = formatFindingAsMarkdown(finding);
expect(markdown).toContain('βšͺ **Severity:** UNKNOWN');
});

it('includes all fields in the generated markdown', () => {
const markdown = formatFindingAsMarkdown(baseFinding);
expect(markdown).toContain('## Accessibility Finding');
expect(markdown).toContain('Text has insufficient color contrast.');
expect(markdown).toContain('Ensure text has a contrast ratio of at least 4.5:1.');
expect(markdown).toContain('Users with low vision cannot read the text.');
expect(markdown).toContain('| URL | https://example.com |');
expect(markdown).toContain('| Element | div.low-contrast |');
expect(markdown).toContain('| WCAG Criteria | 1.4.3 Contrast (Minimum) |');
expect(markdown).toContain('| Finding ID | f-1234 |');
expect(markdown).toContain('| Timestamp | 2023-10-27T10:00:00Z |');
expect(markdown).toContain('*Generated by AccessibleMadeFlexible*');
});

it('falls back to "N/A" when element is undefined', () => {
const findingWithoutElement: AccessibilityFinding = { ...baseFinding, element: undefined };
const markdown = formatFindingAsMarkdown(findingWithoutElement);
expect(markdown).toContain('| Element | N/A |');
import { AccessibilityFinding } from '../types';

describe('github integrations', () => {
describe('formatFindingAsMarkdown', () => {
const baseFinding: AccessibilityFinding = {
id: 'test-123',
url: 'https://example.com',
element: '<button>click</button>',
wcagCriteria: '1.1.1 Non-text Content',
severity: 'serious',
description: 'Button has no accessible name',
help: 'Provide an accessible name for the button',
impact: 'high',
timestamp: '2023-10-27T10:00:00Z'
};

it('should format a finding with valid severity properly', () => {
const markdown = formatFindingAsMarkdown(baseFinding);
expect(markdown).toContain('🟠 **Severity:** SERIOUS');
expect(markdown).toContain(baseFinding.description);
expect(markdown).toContain(baseFinding.help);
expect(markdown).toContain(baseFinding.impact);
expect(markdown).toContain(baseFinding.url);
expect(markdown).toContain(baseFinding.element!);
});

it('should format a finding with critical severity properly', () => {
const finding = { ...baseFinding, severity: 'critical' as const };
const markdown = formatFindingAsMarkdown(finding);
expect(markdown).toContain('πŸ”΄ **Severity:** CRITICAL');
});

it('should format a finding with moderate severity properly', () => {
const finding = { ...baseFinding, severity: 'moderate' as const };
const markdown = formatFindingAsMarkdown(finding);
expect(markdown).toContain('🟑 **Severity:** MODERATE');
});

it('should format a finding with minor severity properly', () => {
const finding = { ...baseFinding, severity: 'minor' as const };
const markdown = formatFindingAsMarkdown(finding);
expect(markdown).toContain('πŸ”΅ **Severity:** MINOR');
});

it('should handle missing element field', () => {
const findingWithoutElement = { ...baseFinding, element: undefined };
const markdown = formatFindingAsMarkdown(findingWithoutElement);
expect(markdown).toContain('| Element | N/A |');
});

it('should use fallback emoji for invalid or unexpected severity strings', () => {
// @ts-expect-error - Intentionally passing an invalid severity string to test the fallback behavior
const invalidFinding: AccessibilityFinding = {
Comment thread
Hardonian marked this conversation as resolved.
...baseFinding,
severity: 'unknown_severity_level'
};
const markdown = formatFindingAsMarkdown(invalidFinding);
expect(markdown).toContain('βšͺ **Severity:** UNKNOWN_SEVERITY_LEVEL');
});
});
});
Loading