import { createAppOptions } from '~/pipelines/pipeline_tabs';

jest.mock('~/lib/utils/url_utility', () => ({
  removeParams: () => 'gitlab.com',
  joinPaths: () => {},
  setUrlFragment: () => {},
}));

jest.mock('~/pipelines/utils', () => ({
  getPipelineDefaultTab: () => '',
}));

describe('~/pipelines/pipeline_tabs.js', () => {
  describe('createAppOptions', () => {
    const SELECTOR = 'SELECTOR';

    let el;

    const createElement = () => {
      el = document.createElement('div');
      el.id = SELECTOR;
      el.dataset.canGenerateCodequalityReports = 'true';
      el.dataset.codequalityReportDownloadPath = 'codequalityReportDownloadPath';
      el.dataset.downloadablePathForReportType = 'downloadablePathForReportType';
      el.dataset.exposeSecurityDashboard = 'true';
      el.dataset.exposeLicenseScanningData = 'true';
      el.dataset.failedJobsCount = 1;
      el.dataset.graphqlResourceEtag = 'graphqlResourceEtag';
      el.dataset.pipelineIid = '123';
      el.dataset.pipelineProjectPath = 'pipelineProjectPath';

      document.body.appendChild(el);
    };

    afterEach(() => {
      el = null;
    });

    it("extracts the properties from the element's dataset", () => {
      createElement();
      const options = createAppOptions(`#${SELECTOR}`, null);

      expect(options).toMatchObject({
        el,
        provide: {
          canGenerateCodequalityReports: true,
          codequalityReportDownloadPath: 'codequalityReportDownloadPath',
          downloadablePathForReportType: 'downloadablePathForReportType',
          exposeSecurityDashboard: true,
          exposeLicenseScanningData: true,
          failedJobsCount: '1',
          graphqlResourceEtag: 'graphqlResourceEtag',
          pipelineIid: '123',
          pipelineProjectPath: 'pipelineProjectPath',
        },
      });
    });

    it('returns `null` if el does not exist', () => {
      expect(createAppOptions('foo', null)).toBe(null);
    });
  });
});