import initCreateCluster from '~/create_cluster/init_create_cluster';
import initGkeDropdowns from '~/create_cluster/gke_cluster';
import initGkeNamespace from '~/create_cluster/gke_cluster_namespace';
import PersistentUserCallout from '~/persistent_user_callout';

// This import is loaded dynamically in `init_create_cluster`.
// Let's eager import it here so that the first spec doesn't timeout.
// https://gitlab.com/gitlab-org/gitlab/issues/118499
import '~/create_cluster/eks_cluster';

jest.mock('~/create_cluster/gke_cluster', () => jest.fn());
jest.mock('~/create_cluster/gke_cluster_namespace', () => jest.fn());
jest.mock('~/persistent_user_callout', () => ({
  factory: jest.fn(),
}));

describe('initCreateCluster', () => {
  let document;
  let gon;

  beforeEach(() => {
    document = {
      body: { dataset: {} },
      querySelector: jest.fn(),
    };
    gon = { features: {} };
  });

  afterEach(() => {
    jest.clearAllMocks();
  });

  describe.each`
    pageSuffix                 | page
    ${':clusters:new'}         | ${'project:clusters:new'}
    ${':clusters:create_gcp'}  | ${'groups:clusters:create_gcp'}
    ${':clusters:create_user'} | ${'admin:clusters:create_user'}
  `('when cluster page ends in $pageSuffix', ({ page }) => {
    beforeEach(() => {
      document.body.dataset = { page };

      initCreateCluster(document, gon);
    });

    it('initializes create GKE cluster app', () => {
      expect(initGkeDropdowns).toHaveBeenCalled();
    });

    it('initializes gcp signup offer banner', () => {
      expect(PersistentUserCallout.factory).toHaveBeenCalled();
    });
  });

  describe('when creating a project level cluster', () => {
    it('initializes gke namespace app', () => {
      document.body.dataset.page = 'project:clusters:new';

      initCreateCluster(document, gon);

      expect(initGkeNamespace).toHaveBeenCalled();
    });
  });

  describe.each`
    clusterLevel        | page
    ${'group level'}    | ${'groups:clusters:new'}
    ${'instance level'} | ${'admin:clusters:create_gcp'}
  `('when creating a $clusterLevel cluster', ({ page }) => {
    it('does not initialize gke namespace app', () => {
      document.body.dataset = { page };

      initCreateCluster(document, gon);

      expect(initGkeNamespace).not.toHaveBeenCalled();
    });
  });
});