/*
******************************************************************************
* Copyright © 2018 PTA GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
*
*     http://www.eclipse.org/legal/epl-v10.html
*
******************************************************************************
*/


import { TestBed, inject } from '@angular/core/testing';
import { StatusChangesAgGridConfiguration } from './status-changes-ag-grid-configuration';
import { SessionContext } from '../../common/session-context';
import { STATUSES } from '../../test-data/statuses';
import * as moment from 'moment';

describe('StatusChangesAgGridConfiguration', () => {
    let sessionContext: SessionContext;

    beforeEach(() => {
        sessionContext = new SessionContext();

      TestBed.configureTestingModule({
      });
    });

    it('should provide the correct functions', (() => {
        const configArray: any = StatusChangesAgGridConfiguration.createColumnDefs( sessionContext );

        const statusIdSegment = configArray[0];
        expect(statusIdSegment.field).toBe('statusId');
        sessionContext.setStatuses(STATUSES);
        expect(statusIdSegment.valueGetter({data: { statusId: 999 }})).toBeFalsy();
        expect(statusIdSegment.valueGetter({data: { statusId: 3 }})).toBe('beendet');

        const modDateSegment = configArray[1];
        expect(modDateSegment.field).toBe('modDate');
        expect(modDateSegment.valueFormatter({data: {modDate: null}})).toBe('');

    }));

});
