/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */

import EmberObject from '@ember/object';
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import sinon from 'sinon';

module('Unit | Component | identity/edit-form', function (hooks) {
  setupTest(hooks);

  const testCases = [
    {
      identityType: 'entity',
      mode: 'create',
      expected: 'vault.cluster.access.identity',
    },
    {
      identityType: 'entity',
      mode: 'edit',
      expected: 'vault.cluster.access.identity.show',
    },
    {
      identityType: 'entity-merge',
      mode: 'merge',
      expected: 'vault.cluster.access.identity',
    },
    {
      identityType: 'entity-alias',
      mode: 'create',
      expected: 'vault.cluster.access.identity.aliases',
    },
    {
      identityType: 'entity-alias',
      mode: 'edit',
      expected: 'vault.cluster.access.identity.aliases.show',
    },
    {
      identityType: 'group',
      mode: 'create',
      expected: 'vault.cluster.access.identity',
    },
    {
      identityType: 'group',
      mode: 'edit',
      expected: 'vault.cluster.access.identity.show',
    },
    {
      identityType: 'group-alias',
      mode: 'create',
      expected: 'vault.cluster.access.identity.aliases',
    },
    {
      identityType: 'group-alias',
      mode: 'edit',
      expected: 'vault.cluster.access.identity.aliases.show',
    },
  ];
  testCases.forEach(function (testCase) {
    const model = EmberObject.create({
      identityType: testCase.identityType,
      rollbackAttributes: sinon.spy(),
    });
    test(`it computes cancelLink properly: ${testCase.identityType} ${testCase.mode}`, function (assert) {
      const component = this.owner.lookup('component:identity/edit-form');

      component.set('mode', testCase.mode);
      component.set('model', model);
      assert.strictEqual(component.get('cancelLink'), testCase.expected, 'cancel link is correct');
    });
  });
});
