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

import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import { setupMirage } from 'ember-cli-mirage/test-support';

const openapiStub = {
  openapi: {
    components: {
      schemas: {
        UsersRequest: {
          type: 'object',
          properties: {
            password: {
              description: 'Password for the user',
              type: 'string',
              'x-vault-displayAttrs': { sensitive: true },
            },
          },
        },
      },
    },
    paths: {
      '/users/{username}': {
        post: {
          requestBody: {
            content: {
              'application/json': {
                schema: { $ref: '#/components/schemas/UsersRequest' },
              },
            },
          },
        },
        parameters: [
          {
            description: 'Username for this user.',
            in: 'path',
            name: 'username',
            required: true,
            schema: { type: 'string' },
          },
        ],
        'x-vault-displayAttrs': { itemType: 'User', action: 'Create' },
      },
    },
  },
};

module('Unit | Service | path-help', function (hooks) {
  setupTest(hooks);
  setupMirage(hooks);

  hooks.beforeEach(function () {
    this.pathHelp = this.owner.lookup('service:path-help');
    this.store = this.owner.lookup('service:store');
  });

  test('it should generate model with mutableId', async function (assert) {
    assert.expect(2);

    this.server.get('/auth/userpass/', () => openapiStub);
    this.server.get('/auth/userpass/users/example', () => openapiStub);
    this.server.post('/auth/userpass/users/test', () => {
      assert.ok(true, 'POST request made to correct endpoint');
      return;
    });

    const modelType = 'generated-user-userpass';
    await this.pathHelp.getNewModel(modelType, 'userpass', 'auth/userpass/', 'user');
    const model = this.store.createRecord(modelType);
    model.set('mutableId', 'test');
    await model.save();
    assert.strictEqual(model.get('id'), 'test', 'model id is set to mutableId value on save success');
  });
});
