import createFingerprinter from 'consul-ui/utils/create-fingerprinter';
import { module, test } from 'qunit';

module('Unit | Utility | create fingerprinter', function() {
  test("fingerprint returns a 'unique' fingerprinted object based on primary, slug and foreign keys", function(assert) {
    const obj = {
      ID: 'slug',
      Namespace: 'namespace',
    };
    const expected = {
      Datacenter: 'dc',
      Namespace: 'namespace',
      ID: 'slug',
      uid: '["namespace","dc","slug"]',
    };
    const fingerprint = createFingerprinter('Datacenter', 'Namespace');
    const actual = fingerprint('uid', 'ID', 'dc')(obj);
    assert.deepEqual(actual, expected);
  });
  test("fingerprint returns a 'unique' fingerprinted object based on primary, slug and foreign keys, and uses default namespace if none set", function(assert) {
    const obj = {
      ID: 'slug',
    };
    const expected = {
      Datacenter: 'dc',
      Namespace: 'default',
      ID: 'slug',
      uid: '["default","dc","slug"]',
    };
    const fingerprint = createFingerprinter('Datacenter', 'Namespace');
    const actual = fingerprint('uid', 'ID', 'dc')(obj);
    assert.deepEqual(actual, expected);
  });
  test("fingerprint throws an error if it can't find a foreignKey", function(assert) {
    const fingerprint = createFingerprinter('Datacenter', 'Namespace');
    [undefined, null].forEach(function(item) {
      assert.throws(function() {
        fingerprint('uid', 'ID', item);
      }, /missing foreignKey/);
    });
  });
  test("fingerprint throws an error if it can't find a slug", function(assert) {
    const fingerprint = createFingerprinter('Datacenter', 'Namespace');
    [
      {},
      {
        ID: null,
      },
    ].forEach(function(item) {
      assert.throws(function() {
        fingerprint('uid', 'ID', 'dc')(item);
      }, /missing slug/);
    });
  });
});
