/**
 *  Tests for Rater Factory
 *
 *  Copyright (C) 2010-2020 R-T Specialty, LLC.
 *
 *  This file is part of the Liza Data Collection Framework.
 *
 *  liza is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Affero General Public License as
 *  published by the Free Software Foundation, either version 3 of the
 *  License, or (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
import {PositiveInteger} from '../../../src/numeric';
import {expect} from 'chai';
import {
  DummySessionTemplate,
  getDummySession,
  validate_session_template,
} from '../../../src/dullahan/program/RaterFactory';

describe('getDummySession', () => {
  it('applies a DummySessionTemplate', () => {
    const template = {
      agentId: <PositiveInteger>900000,
      agentName: 'foo',
      agentEntityId: <PositiveInteger>1234567,
      agencyNumber: 'AGT12345',
    };

    const session = getDummySession(template);

    expect(session.agentId()).to.equal(template.agentId);
    expect(session.agentName()).to.equal(template.agentName);
    expect(session.agentEntityId()).to.equal(template.agentEntityId);
    expect(session.agencyNumber()).to.equal(template.agencyNumber);
  });
});

describe('validate_session_template', () => {
  const tests: (keyof DummySessionTemplate)[] = [
    'agentId',
    'agentName',
    'agentEntityId',
    'agencyNumber',
  ];

  tests.forEach(agent_field => {
    it(`detects missing ${agent_field}`, () => {
      const template = {
        agentId: <PositiveInteger>900000,
        agentName: 'foo',
        agentEntityId: <PositiveInteger>1234567,
        agencyNumber: 'AGT12345',
      };

      delete template[agent_field];

      expect(() => validate_session_template(template)).to.throw(
        Error,
        `Missing session data for the following fields: ${agent_field}`
      );
    });
  });
});
