import React from 'react';
import {render, screen} from '@testing-library/react';

jest.mock('@/i18n', () => jest.fn().mockResolvedValue({messages: {SoutiensPage: {title: 'Nos soutiens', intro: 'Ils nous aident.', empty: 'Aucun soutien.', visit_site: 'Visiter le site'}}}));
jest.mock('@/services/soutienService', () => ({getSoutiens: jest.fn()}));

import Page, {generateMetadata} from '../page';
import {getSoutiens} from '@/services/soutienService';

const mockedGetSoutiens = getSoutiens as jest.Mock;
const props = {params: Promise.resolve({locale: 'fr'})};

describe('Page soutiens (spec L6)', () => {
  beforeEach(() => jest.clearAllMocks());

  it('shouldListEveryActiveSupporterWithLogoDescriptionAndLink', async () => {
    mockedGetSoutiens.mockResolvedValue([
      {souId: 1, souNom: 'Région Bretagne', souUrl: 'https://bretagne.bzh', souDescription: 'Soutien historique', souPiedDePage: true, logoUrl: 'https://pimcore.test/region.png'},
      {souId: 2, souNom: 'Mécène discret', souUrl: null, souDescription: null, souPiedDePage: false, logoUrl: null},
    ]);

    render(await Page(props));

    expect(mockedGetSoutiens).toHaveBeenCalledWith();
    expect(screen.getByRole('heading', {level: 1})).toHaveTextContent('Nos soutiens');
    expect(screen.getByRole('img', {name: 'Région Bretagne'})).toHaveAttribute('src', 'https://pimcore.test/region.png');
    expect(screen.getByText('Soutien historique')).toBeInTheDocument();
    expect(screen.getByRole('link', {name: /Visiter le site/})).toHaveAttribute('href', 'https://bretagne.bzh');
    expect(screen.getByRole('heading', {level: 2, name: 'Mécène discret'})).toBeInTheDocument();
  });

  it('shouldSayWhenNoSupporterIsListed', async () => {
    mockedGetSoutiens.mockResolvedValue([]);

    render(await Page(props));

    expect(screen.getByText('Aucun soutien.')).toBeInTheDocument();
  });

  it('shouldTitleTheDocument', async () => {
    expect((await generateMetadata(props)).title).toContain('Nos soutiens');
  });
});
