import { describe, expect, test, vi } from 'vitest';
import { render, screen } from '@testing-library/svelte';
import { pageUrlModule } from '$test-utils/mocks/appState';

const state = vi.hoisted(() => ({
  pageUrl: new URL('http://localhost/discover')
}));

vi.mock('$app/state', () => pageUrlModule(state));

import DiscoverTabs from './DiscoverTabs.svelte';

describe('DiscoverTabs', () => {
  test('Discover tab is current on /discover', () => {
    state.pageUrl = new URL('http://localhost/discover');
    render(DiscoverTabs);
    expect(screen.getByRole('link', { name: /discover/i })).toHaveAttribute('aria-current', 'page');
    expect(screen.getByRole('link', { name: /requests/i })).not.toHaveAttribute('aria-current');
  });

  test('Requests tab is current on /requests', () => {
    state.pageUrl = new URL('http://localhost/requests');
    render(DiscoverTabs);
    expect(screen.getByRole('link', { name: /requests/i })).toHaveAttribute('aria-current', 'page');
    expect(screen.getByRole('link', { name: /discover/i })).not.toHaveAttribute('aria-current');
  });

  test('renders both tabs in order', () => {
    state.pageUrl = new URL('http://localhost/discover');
    render(DiscoverTabs);
    const labels = screen.getAllByRole('link').map((l) => l.textContent?.trim());
    expect(labels).toEqual(['Discover', 'Requests']);
  });
});
