/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: BUSL-1.1
 */

import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import { render } from '@ember/test-helpers';
import { create } from 'ember-cli-page-object';
import featuresSelection from 'vault/tests/pages/components/wizard/features-selection';
import hbs from 'htmlbars-inline-precompile';
import Service from '@ember/service';

const component = create(featuresSelection);

const permissionsService = Service.extend({
  hasPermission(path) {
    // This enables the Secrets and Authentication wizard items and disables the others.
    const allowedPaths = ['sys/mounts/example', 'sys/auth', 'sys/auth/foo', 'sys/wrapping/wrap'];
    if (allowedPaths.includes(path)) {
      return true;
    }
    return false;
  },
});

module('Integration | Component | features-selection', function (hooks) {
  setupRenderingTest(hooks);

  hooks.beforeEach(function () {
    this.owner.register('service:permissions', permissionsService);
  });

  test('it disables and enables wizard items according to user permissions', async function (assert) {
    assert.expect(4);
    const enabled = { Secrets: true, Authentication: true, Policies: false, Tools: false };
    await render(hbs`<Wizard::FeaturesSelection/>`);

    component.wizardItems.forEach((i) => {
      assert.strictEqual(
        i.hasDisabledTooltip,
        !enabled[i.text],
        'shows a tooltip only when the wizard item is not enabled'
      );
    });
  });

  test('it disables the start button if no wizard items are checked', async function (assert) {
    await render(hbs`<Wizard::FeaturesSelection/>`);
    assert.true(component.hasDisabledStartButton);
  });

  test('it enables the start button when user has permission and wizard items are checked', async function (assert) {
    await render(hbs`<Wizard::FeaturesSelection/>`);
    await component.selectSecrets();
    assert.false(component.hasDisabledStartButton);
  });
});
