<?php
/**
 * @copyright (c) Kufer Software GmbH, Loisachstrasse 4, D-84453 Mühldorf
 */

include_once 'TeilnehmerZahlenProviderMock.php';

/**
 * Generated by PHPUnit_SkeletonGenerator on 2017-04-11 at 09:23:51.
 */
class TeilnehmerzahlenMinTest extends \PHPUnit\Framework\TestCase
{
  /**
   * @test
   */
  public function normalkursTeilMin_TeilMinGesetztAberTnKiMinNicht_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 8;
    $kurs->kurse2->tnki_min = 0;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetNormalkurs($tnZahlenDb);

    $this->assertEquals(8, $tnBerechnet->getAnzahlTeilnehmerMinimal());
  }

  /**
   * @test
   */
  public function normalkursTeilMin_TeilMinGesetztTnKiMinIstKleinerTeilMinPlusKinderMin_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 8;
    $kurs->kurse2->tnki_min = 5;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetNormalkurs($tnZahlenDb);

    $this->assertEquals(8, $tnBerechnet->getAnzahlTeilnehmerMinimal());
  }

  /**
   * @test
   */
  public function normalkursTeilMin_TeilMinGesetztTnKiMinIstGroesserTeilMinPlusKinderMin_TnKiMinMinusKinderMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 8;
    $kurs->kinder_min = 5;
    $kurs->kurse2->tnki_min = 15;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetNormalkurs($tnZahlenDb);

    $this->assertEquals(10, $tnBerechnet->getAnzahlTeilnehmerMinimal());
  }

  /**
   * @test
   */
  public function normalkursTeilMin_TeilMinGesetztTnKiMinIstGroesser_TnKiMinMinusKinderMinAberMindestensTeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 8;
    $kurs->kinder_min = 10;
    $kurs->kurse2->tnki_min = 15;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetNormalkurs($tnZahlenDb);

    $this->assertEquals(8, $tnBerechnet->getAnzahlTeilnehmerMinimal());
  }

  /**
   * @test
   */
  public function normalkursKinderMin_KindMinGesetztAberTnKiMinNicht_KindMin()
  {
    $kurs = new \Kurs();
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 0;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetNormalkurs($tnZahlenDb);

    $this->assertEquals(8, $tnBerechnet->getAnzahlKinderMinimal());
  }

  /**
   * @test
   */
  public function normalkursKinderMin_KindMinGesetztTnKiMinIstKleiner_KindMin()
  {
    $kurs = new \Kurs();
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 5;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetNormalkurs($tnZahlenDb);

    $this->assertEquals(8, $tnBerechnet->getAnzahlKinderMinimal());
  }

  /**
   * @test
   */
  public function normalkursKinderMin_KindMinGesetztTnKiMinIstGroesserTnMinPlusKinderMin_TnKiMinMinusTeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 5;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 15;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetNormalkurs($tnZahlenDb);

    $this->assertEquals(10, $tnBerechnet->getAnzahlKinderMinimal());
  }

  /**
   * @test
   */
  public function normalkursKinderMin_KindMinGesetztTnKiMinIstKleinerTnMinPlusKinderMin_TnKiMinMinusTeilMinAberMindestensKindMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 10;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 15;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetNormalkurs($tnZahlenDb);

    $this->assertEquals(8, $tnBerechnet->getAnzahlKinderMinimal());
  }

  /**
   * @test
   */
  public function normalkursTnKiMin_TnKiMinNichtGesetzt_TeilMinPlusKindMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 10;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 0;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetNormalkurs($tnZahlenDb);

    $this->assertEquals(18, $tnBerechnet->getAnzahlTeilnehmerUndKinderMinimal());
  }

  /**
   * @test
   */
  public function normalkursTnKiMin_TnKiMinGleichTeilMinPlusKindMin_TnKiMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 10;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 18;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetNormalkurs($tnZahlenDb);

    $this->assertEquals(18, $tnBerechnet->getAnzahlTeilnehmerUndKinderMinimal());
  }

  /**
   * @test
   */
  public function normalkursTnKiMin_TnKiMinKleinerTeilMinPlusKindMin_TeilMinPlusKindMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 10;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 5;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetNormalkurs($tnZahlenDb);

    $this->assertEquals(18, $tnBerechnet->getAnzahlTeilnehmerUndKinderMinimal());
  }

  /**
   * @test
   */
  public function normalkursTnKiMin_TnKiMinGroesserTeilMinPlusKindMin_TeilMinPlusKindMin()
  {
    // ACHTUNG: Diese Bedingungen sind nicht erfüllbar. Ggf. klären, ob das wirklich so sein soll.
    // Möglicherweise passt das dann dadurch, dass teil_min und kinder_min ja dann ebenfalls berechnet werden und tnki_min berücksichtigen

    $kurs = new \Kurs();
    $kurs->teil_min = 10;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 55;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetNormalkurs($tnZahlenDb);

    $this->assertEquals(55, $tnBerechnet->getAnzahlTeilnehmerUndKinderMinimal());
  }

  /**
   * @test
   */
  public function kinderkursTeilMin_TeilMinGesetztAberTnKiMinNicht_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 8;
    $kurs->kurse2->tnki_min = 0;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetKinderkurs($tnZahlenDb);

    $this->assertEquals(8, $tnBerechnet->getAnzahlTeilnehmerMinimal());
  }

  /**
   * @test
   */
  public function kinderkursTeilMin_TeilMinGesetztTnKiMinIstKleiner_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 8;
    $kurs->kurse2->tnki_min = 5;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetKinderkurs($tnZahlenDb);

    $this->assertEquals(8, $tnBerechnet->getAnzahlTeilnehmerMinimal());
  }

  /**
   * @test
   */
  public function kinderkursTeilMin_TeilMinGesetztTnKiMinIstGroesserTnMinPlusKinderMin_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 8;
    $kurs->kinder_min = 5;
    $kurs->kurse2->tnki_min = 15;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetKinderkurs($tnZahlenDb);

    $this->assertEquals(8, $tnBerechnet->getAnzahlTeilnehmerMinimal());
  }

  /**
   * @test
   */
  public function kinderkursTeilMin_TeilMinGesetztTnKiMinIstKleinerTnMinPlusKinderMin_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 8;
    $kurs->kinder_min = 10;
    $kurs->kurse2->tnki_min = 15;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetKinderkurs($tnZahlenDb);

    $this->assertEquals(8, $tnBerechnet->getAnzahlTeilnehmerMinimal());
  }

  /**
   * @test
   */
  public function kinderkursKinderMin_KindMinGesetztAberTnKiMinNicht_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 10;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 0;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetKinderkurs($tnZahlenDb);

    $this->assertEquals(10, $tnBerechnet->getAnzahlKinderMinimal());
  }

  /**
   * @test
   */
  public function kinderkursKinderMin_KindMinGesetztTnKiMinIstKleiner_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 10;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 5;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetKinderkurs($tnZahlenDb);

    $this->assertEquals(10, $tnBerechnet->getAnzahlKinderMinimal());
  }

  /**
   * @test
   */
  public function kinderkursKinderMin_KindMinGesetztTnKiMinIstGroesserTnMinPlusKinderMin_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 5;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 15;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetKinderkurs($tnZahlenDb);

    $this->assertEquals(5, $tnBerechnet->getAnzahlKinderMinimal());
  }

  /**
   * @test
   */
  public function kinderkursKinderMin_KindMinGesetztTnKiMinIstGroesserTnMinPlusKindMin_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 10;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 15;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetKinderkurs($tnZahlenDb);

    $this->assertEquals(10, $tnBerechnet->getAnzahlKinderMinimal());
  }

  /**
   * @test
   */
  public function kinderkursTnKiMin_TnKiMinNichtGesetzt_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 10;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 0;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetKinderkurs($tnZahlenDb);

    $this->assertEquals(10, $tnBerechnet->getAnzahlTeilnehmerUndKinderMinimal());
  }

  /**
   * @test
   */
  public function kinderkursTnKiMin_TnKiMinGleichTeilMinPlusKindMin_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 10;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 18;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetKinderkurs($tnZahlenDb);

    $this->assertEquals(10, $tnBerechnet->getAnzahlTeilnehmerUndKinderMinimal());
  }

  /**
   * @test
   */
  public function kinderkursTnKiMin_TnKiMinKleinerTeilMinPlusKindMin_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 10;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 5;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetKinderkurs($tnZahlenDb);

    $this->assertEquals(10, $tnBerechnet->getAnzahlTeilnehmerUndKinderMinimal());
  }

  /**
   * @test
   */
  public function kinderkursTnKiMin_TnKiMinGroesserTeilMinPlusKindMin_TeilMin()
  {
    $kurs = new \Kurs();
    $kurs->teil_min = 10;
    $kurs->kinder_min = 8;
    $kurs->kurse2->tnki_min = 55;
    $tnZahlenDb = new TeilnehmerZahlenProviderMock($kurs);
    $tnBerechnet = new TeilnehmerzahlenBerechnetKinderkurs($tnZahlenDb);

    $this->assertEquals(10, $tnBerechnet->getAnzahlTeilnehmerUndKinderMinimal());
  }
}
