/**
 * 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 {idsToHashWithCurrentTimestamp, resourcesToHash} from './reducer.helper';

describe('Reducer Helper', () => {

  it('should create hash with default identifier', () => {
    const payload = [
      { identifier: 'a', value: 'test value'},
      { identifier: 'b', value: 'test value'}
    ];

    const expectedResult = {
      a: payload[0],
      b: payload[1],
    };

    const result = resourcesToHash(payload);

    expect(result).toEqual(expectedResult);
  });

  it('should create hash with custom identifier', () => {
    const payload = [
      { customIdentifier: 'a', value: 'test value'},
      { customIdentifier: 'b', value: 'test value'}
    ];

    const expectedResult = {
      a: payload[0],
      b: payload[1],
    };

    const result = resourcesToHash(payload, 'customIdentifier');

    expect(result).toEqual(expectedResult);
  });

  it('should create hash with current timestamp', () => {
    spyOn(Date, 'now').and.returnValue(1000);

    const expectedResult = {
      a: 1000,
      b: 1000
    };

    const ids = ['a', 'b'];

    const result = idsToHashWithCurrentTimestamp(ids);

    expect(result).toEqual(expectedResult);
  });

});
