import { render } from '@dynatrace/strato-components-preview-testing/jest';
import { screen } from '@testing-library/react';
import React from 'react';
import { buildMockedFetchResponse } from './test-utils';
import actionNameWidget from './action-name.widget';

describe('actionNameWidget', () => {
  let fetchMock;

  beforeEach(() => {
    fetchMock = jest.fn();
    globalThis.fetch = fetchMock;
  });

  afterEach(() => {
    // Clean up the mock to prevent interference with other tests
    fetchMock.mockClear();
  });

  it('should render a widget with values', async () => {
    fetchMock.mockImplementation((url: string) => {
      if (url.startsWith('/platform/app-settings/v2/objects?')) {
        return buildMockedFetchResponse({
          items: [
            {
              objectId: 'action-name-connection-object-id',
              summary: 'My Connection',
            },
          ],
          totalCount: 1,
          pageSize: 500,
        });
      } else if (
        url === '/platform/app-settings/v2/objects/action-name-connection-object-id'
      ) {
        return buildMockedFetchResponse({
          objectId: 'action-name-connection-object-id',
          summary: 'My Connection',
        });
      } else {
        return Promise.reject(new Error(`Unexpected fetch URL: ${url}`));
      }
    });

    render(
      <actionNameWidget
        value={{ name: 'Mark', connectionId: 'action-name-connection-object-id' }}
        onValueChanged={jest.fn()}
      />,
    );

    expect(fetchMock).toHaveBeenCalledTimes(2);
    expect(screen.getByText('Mark')).toBeTruthy();
    expect(await screen.findByText('My Connection')).toBeTruthy();
  });
});
