// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {assert} from 'chai';
import {valuesForField, valueForField, fieldDefsWithGroup, fieldValueMapKey,
  fieldDefsWithoutGroup, HARDCODED_FIELD_GROUPS} from './metadata-helpers.js';

const fieldDefs = [
  {
    fieldRef: {
      fieldName: 'Ignore',
      fieldId: 1,
    },
  },
  {
    fieldRef: {
      fieldName: 'DesignDoc',
      fieldId: 2,
    },
  },
];
const fieldGroups = HARDCODED_FIELD_GROUPS;

const fieldValueMap = new Map([
  ['field', ['one', 'two', 'three']],
  ['field-two phase', ['four']],
  ['field-three', ['five']],
]);

describe('metadata-helpers', () => {
  it('valuesForField', () => {
    assert.deepEqual(valuesForField(fieldValueMap, 'Field-None'), []);
    assert.deepEqual(valuesForField(fieldValueMap, 'Field'),
        ['one', 'two', 'three']);
    assert.deepEqual(valuesForField(fieldValueMap, 'Field-Two', 'Phase'),
        ['four']);
    assert.deepEqual(valuesForField(fieldValueMap, 'Field-Three'), ['five']);
  });

  it('valueForField', () => {
    assert.equal(valueForField(fieldValueMap, 'Field-None'),
        undefined);
    assert.equal(valueForField(fieldValueMap, 'Field-Two', 'Phase'), 'four');
    assert.equal(valueForField(fieldValueMap, 'Field-Three'), 'five');
  });

  it('fieldValueMapKey', () => {
    assert.equal(fieldValueMapKey('test', 'two'), 'test two');

    assert.equal(fieldValueMapKey('noPhase'), 'nophase');
  });

  it('fieldDefsWithoutGroup ignores non applicable types', () => {
    assert.deepEqual(fieldDefsWithoutGroup(
        fieldDefs, fieldGroups, 'ungrouped-type'), fieldDefs);
  });

  it('fieldDefsWithoutGroup filters grouped fields', () => {
    assert.deepEqual(fieldDefsWithoutGroup(
        fieldDefs, fieldGroups, 'flt-launch'), [
      {
        fieldRef: {
          fieldName: 'Ignore',
          fieldId: 1,
        },
      },
    ]);
  });

  it('fieldDefsWithGroup filters by type', () => {
    const filteredGroupsList = [{
      groupName: 'Docs',
      fieldDefs: [
        {
          fieldRef: {
            fieldName: 'DesignDoc',
            fieldId: 2,
          },
        },
      ],
    }];

    assert.deepEqual(
        fieldDefsWithGroup(fieldDefs, fieldGroups, 'Not-FLT-Launch'), []);

    assert.deepEqual(fieldDefsWithGroup(fieldDefs, fieldGroups, 'flt-launch'),
        filteredGroupsList);

    assert.deepEqual(fieldDefsWithGroup(fieldDefs, fieldGroups, 'FLT-LAUNCH'),
        filteredGroupsList);
  });
});
