All files / src/components/admin/monitoring ErrorHistoryTab.test.tsx

0% Statements 0/137
100% Branches 0/0
0% Functions 0/1
0% Lines 0/137

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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                                                                                                                                                                                                                                                                                   
import React from 'react';
import { render, screen } from '@testing-library/react';
import { ErrorHistoryTab, type ErrorHistoryEntry } from './ErrorHistoryTab';

const mockHistory: ErrorHistoryEntry[] = [
  {
    id: '1',
    userId: 1,
    userEmail: 'alice@example.com',
    action: 'CREATED',
    previousValue: null,
    newValue: null,
    createdAt: new Date().toISOString(),
  },
  {
    id: '2',
    userId: 2,
    userEmail: 'bob@example.com',
    action: 'PRIORITY_CHANGED',
    previousValue: 'MEDIUM',
    newValue: 'HIGH',
    createdAt: new Date().toISOString(),
  },
  {
    id: '3',
    userId: 1,
    userEmail: 'alice@example.com',
    action: 'ASSIGNED',
    previousValue: null,
    newValue: 'bob@example.com',
    createdAt: new Date().toISOString(),
  },
];

describe('ErrorHistoryTab', () => {
  it('renders history tab', () => {
    render(<ErrorHistoryTab history={mockHistory} />);
    expect(screen.getByTestId('error-history-tab')).toBeInTheDocument();
  });

  it('displays history entries', () => {
    render(<ErrorHistoryTab history={mockHistory} />);
    const entries = screen.getAllByTestId('history-entry');
    expect(entries).toHaveLength(3);
  });

  it('displays user email for each entry', () => {
    render(<ErrorHistoryTab history={mockHistory} />);
    expect(screen.getAllByText('alice@example.com')).toHaveLength(2);
    // bob appears twice: once as actor, once as assignee in newValue
    expect(screen.getAllByText('bob@example.com').length).toBeGreaterThanOrEqual(1);
  });

  it('shows action labels', () => {
    render(<ErrorHistoryTab history={mockHistory} />);
    expect(screen.getByText('created this error')).toBeInTheDocument();
    expect(screen.getByText('changed priority')).toBeInTheDocument();
    expect(screen.getByText('assigned to')).toBeInTheDocument();
  });

  it('shows new values when present', () => {
    render(<ErrorHistoryTab history={mockHistory} />);
    expect(screen.getByText('High')).toBeInTheDocument();
    // bob@example.com appears twice: once as actor, once as assignee
    expect(screen.getAllByText('bob@example.com').length).toBeGreaterThanOrEqual(1);
  });

  it('shows empty state when no history', () => {
    render(<ErrorHistoryTab history={[]} />);
    expect(screen.getByText('No history available')).toBeInTheDocument();
  });

  it('handles SNOOZED action with date formatting', () => {
    const snoozedHistory: ErrorHistoryEntry[] = [
      {
        id: '1',
        userId: 1,
        userEmail: 'user@example.com',
        action: 'SNOOZED',
        previousValue: null,
        newValue: new Date('2025-01-15T10:00:00Z').toISOString(),
        createdAt: new Date().toISOString(),
      },
    ];
    render(<ErrorHistoryTab history={snoozedHistory} />);
    expect(screen.getByText('snoozed until')).toBeInTheDocument();
  });

  it('handles STATUS_CHANGED action', () => {
    const statusHistory: ErrorHistoryEntry[] = [
      {
        id: '1',
        userId: 1,
        userEmail: 'user@example.com',
        action: 'STATUS_CHANGED',
        previousValue: 'open',
        newValue: 'resolved',
        createdAt: new Date().toISOString(),
      },
    ];
    render(<ErrorHistoryTab history={statusHistory} />);
    expect(screen.getByText('changed status')).toBeInTheDocument();
    expect(screen.getByText('resolved')).toBeInTheDocument();
  });

  it('handles COMMENTED action', () => {
    const commentHistory: ErrorHistoryEntry[] = [
      {
        id: '1',
        userId: 1,
        userEmail: 'user@example.com',
        action: 'COMMENTED',
        previousValue: null,
        newValue: null,
        createdAt: new Date().toISOString(),
      },
    ];
    render(<ErrorHistoryTab history={commentHistory} />);
    expect(screen.getByText('added a comment')).toBeInTheDocument();
  });

  it('handles REOPENED action', () => {
    const reopenedHistory: ErrorHistoryEntry[] = [
      {
        id: '1',
        userId: 1,
        userEmail: 'user@example.com',
        action: 'REOPENED',
        previousValue: 'resolved',
        newValue: 'open',
        createdAt: new Date().toISOString(),
      },
    ];
    render(<ErrorHistoryTab history={reopenedHistory} />);
    expect(screen.getByText('reopened')).toBeInTheDocument();
  });
});