import {initializeOrg} from 'sentry-test/initializeOrg';

import {_debouncedLoadStats} from 'sentry/actionCreators/projects';
import {Client} from 'sentry/api';

describe('Projects ActionCreators', function () {
  const api = new Client();
  const {organization, project} = initializeOrg();

  it('loadStatsForProject', function () {
    jest.useFakeTimers();
    const mock = MockApiClient.addMockResponse({
      url: '/organizations/org-slug/projects/',
    });
    expect(mock).not.toHaveBeenCalled();

    _debouncedLoadStats(api, new Set([...Array(50)].map((_, i) => String(i))), {
      projectId: project.id,
      orgId: organization.slug,
    });

    expect(mock).toHaveBeenCalledTimes(5);
    expect(mock).toHaveBeenLastCalledWith(
      '/organizations/org-slug/projects/',
      expect.objectContaining({
        query: {
          statsPeriod: '24h',
          query: 'id:40 id:41 id:42 id:43 id:44 id:45 id:46 id:47 id:48 id:49',
        },
      })
    );
  });

  it('loadStatsForProject() with additional query', function () {
    jest.useFakeTimers();
    const mock = MockApiClient.addMockResponse({
      url: '/organizations/org-slug/projects/',
    });
    expect(mock).not.toHaveBeenCalled();

    _debouncedLoadStats(api, new Set(['1', '2', '3']), {
      projectId: project.id,
      orgId: organization.slug,
      query: {transactionStats: '1'},
    });

    expect(mock).toHaveBeenCalledTimes(1);
    expect(mock).toHaveBeenLastCalledWith(
      '/organizations/org-slug/projects/',
      expect.objectContaining({
        query: {
          statsPeriod: '24h',
          query: 'id:1 id:2 id:3',
          transactionStats: '1',
        },
      })
    );
  });
});
