import createIsValidServerError from 'consul-ui/utils/http/acl/is-valid-server-error';
import { module, test } from 'qunit';

module('Unit | Utility | http/acl/is valid server error', function() {
  const createEmberDataError = function(response) {
    return {
      errors: [
        {
          detail: response,
        },
      ],
    };
  };
  test('it returns a function', function(assert) {
    const isValidServerError = createIsValidServerError();
    assert.ok(typeof isValidServerError === 'function');
  });
  test("it returns false if there is no 'correctly' formatted error", function(assert) {
    const isValidServerError = createIsValidServerError();
    assert.notOk(isValidServerError());
    assert.notOk(isValidServerError({}));
    assert.notOk(isValidServerError({ errors: {} }));
    assert.notOk(isValidServerError({ errors: [{}] }));
    assert.notOk(isValidServerError({ errors: [{ notDetail: '' }] }));
  });
  // don't go too crazy with these, just enough for sanity check, we are essentially testing indexOf
  test("it returns false if the response doesn't contain the exact error response", function(assert) {
    const isValidServerError = createIsValidServerError();
    [
      "pc error making call: rpc: can't find method ACL",
      "rpc error making call: rpc: can't find method",
      "rpc rror making call: rpc: can't find method ACL",
    ].forEach(function(response) {
      const e = createEmberDataError(response);
      assert.notOk(isValidServerError(e));
    });
  });
  test('it returns true if the response contains the exact error response', function(assert) {
    const isValidServerError = createIsValidServerError();
    [
      "rpc error making call: rpc: can't find method ACL",
      " rpc error making call: rpc: can't find method ACL",
      "rpc error making call: rpc: rpc error making call: rpc: rpc error making call: rpc: can't find method ACL",
    ].forEach(function(response) {
      const e = createEmberDataError(response);
      assert.ok(isValidServerError(e));
    });
  });
});
