/**
 * Copyright IBM Corp. 2016, 2025
 * SPDX-License-Identifier: BUSL-1.1
 */

import { module, test } from 'qunit';
import { setupRenderingTest } from 'vault/tests/helpers';
import { stringArrayToCamelCase } from 'vault/helpers/string-array-to-camel';

module('Integration | Helper | string-array-to-camel', function (hooks) {
  setupRenderingTest(hooks);

  test('it returns camelCase string with all caps and two words separated by space', async function (assert) {
    const string = 'FOO Bar';
    const expected = 'fooBar';
    const result = stringArrayToCamelCase(string);

    assert.strictEqual(
      result,
      expected,
      'camelCase string returned for call caps and two words separated by space'
    );
  });

  test('it returns an array of camelCased strings if an array of strings passed in', function (assert) {
    const string = ['FOO Bar', 'Baz Qux', 'wibble wobble', 'wobble WIBBLes'];
    const expected = ['fooBar', 'bazQux', 'wibbleWobble', 'wobbleWibbles'];
    const result = stringArrayToCamelCase(string);
    assert.deepEqual(result, expected, 'camelCase array of strings returned for all sorts of strings');
  });

  test('it returns string if string is numbers', function (assert) {
    const string = '123';
    const expected = '123';
    const result = stringArrayToCamelCase(string);
    assert.strictEqual(result, expected, 'camelCase kind of handles strings with numbers');
  });

  test('it returns error if str is not a string', function (assert) {
    const string = { name: 'foo.bar*baz' };
    let result;
    try {
      result = stringArrayToCamelCase(string);
    } catch (e) {
      result = e.message;
    }
    assert.deepEqual(result, 'Assertion Failed: must pass in a string or array of strings');
  });

  test('it returns error if str is not an array of string', function (assert) {
    const string = [{ name: 'foo.bar*baz' }];
    let result;
    try {
      result = stringArrayToCamelCase(string);
    } catch (e) {
      result = e.message;
    }
    assert.deepEqual(result, 'Assertion Failed: must pass in a string or array of strings');
  });
});
