/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * 'License'); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
import findTabIndexByComponentId from 'src/dashboard/util/findTabIndexByComponentId';

describe('findTabIndexByComponentId', () => {
  const topLevelTabsComponent = {
    children: ['TAB-0g-5l347I2', 'TAB-qrwN_9VB5'],
    id: 'TABS-MNQQSW-kyd',
    meta: {},
    parents: ['ROOT_ID'],
    type: 'TABS',
  };
  const rowLevelTabsComponent = {
    children: [
      'TAB-TwyUUGp2Bg',
      'TAB-Zl1BQAUvN',
      'TAB-P0DllxzTU',
      'TAB---e53RNei',
    ],
    id: 'TABS-Oduxop1L7I',
    meta: {},
    parents: ['ROOT_ID', 'TABS-MNQQSW-kyd', 'TAB-qrwN_9VB5'],
    type: 'TABS',
  };
  const goodPathToChild = [
    'ROOT_ID',
    'TABS-MNQQSW-kyd',
    'TAB-qrwN_9VB5',
    'TABS-Oduxop1L7I',
    'TAB-P0DllxzTU',
    'ROW-JXhrFnVP8',
    'CHART-dUIVg-ENq6',
  ];
  const badPath = ['ROOT_ID', 'TABS-MNQQSW-kyd', 'TAB-ABC', 'TABS-Oduxop1L7I'];

  it('should return -1 if no directPathToChild', () => {
    expect(
      findTabIndexByComponentId({
        currentComponent: topLevelTabsComponent,
        directPathToChild: [],
      }),
    ).toBe(-1);
  });

  it('should return -1 if not found tab id', () => {
    expect(
      findTabIndexByComponentId({
        currentComponent: topLevelTabsComponent,
        directPathToChild: badPath,
      }),
    ).toBe(-1);
  });

  it('should return children index if matched an id in the path', () => {
    expect(
      findTabIndexByComponentId({
        currentComponent: topLevelTabsComponent,
        directPathToChild: goodPathToChild,
      }),
    ).toBe(1);

    expect(
      findTabIndexByComponentId({
        currentComponent: rowLevelTabsComponent,
        directPathToChild: goodPathToChild,
      }),
    ).toBe(2);
  });
});
