function it_should_use_a_registered_modifier_when_it_is_part_of_the_plan_definition($basePlan, PlanModifierInterface $modifier, PaymentPlan $planProvidedByModifier, PaymentPlan $unmodifiedPlan)
 {
     $definition = PlanDefinition::withNameAndAttributesAsArray('Foo', ['modifiers' => ['mymodifier']]);
     $this->registerModifier('mymodifier', $modifier);
     $modifier->setBaseCalculator($basePlan)->shouldBeCalled();
     $modifier->getPlan($definition, Money::GBP(100), PlanParameters::none())->shouldBeCalled()->willReturn($planProvidedByModifier);
     $basePlan->getPlan(PlanDefinition::withName('Foo'), Money::GBP(100), PlanParameters::none())->willReturn($unmodifiedPlan);
     $this->getPlan($definition, Money::GBP(100), PlanParameters::none())->shouldReturn($planProvidedByModifier);
     $this->getPlan(PlanDefinition::withName('Foo'), Money::GBP(100), PlanParameters::none())->shouldReturn($unmodifiedPlan);
 }
 public function testFunction()
 {
     $calculator = $this->getContainer()->get('ice.payment_plan.calculator');
     $plan = $calculator->getPlan(PlanDefinition::withNameAndAttributesAsArray('PercentOnDate', ['short_description' => 'Test', 'long_description' => 'My test plan', 'payments' => ['immediate' => 0.4, '2016-01-01' => 0.6], 'modifiers' => ['bursary_off_final_payment']]), Money::GBP(1000), PlanParameters::none());
     $this->assertInstanceOf('Ice\\PaymentPlan\\PaymentPlan', $plan);
 }
 function it_should_return_a_plan_based_on_definition_attributes()
 {
     $expected = new PaymentPlan([PlannedPayment::immediate(Money::GBP(10)), PlannedPayment::withDueDate(Money::GBP(70), DueDate::fromString('2014-01-01')), PlannedPayment::withDueDate(Money::GBP(20), DueDate::fromString('2015-01-01'))], 'Foo', 'FooFoo');
     $this->getPlan(PlanDefinition::withNameAndAttributesAsArray('PercentOnDate', ['short_description' => 'Foo', 'long_description' => 'FooFoo', 'payments' => ['immediate' => 0.1, '2014-01-01' => 0.7, '2015-01-01' => 0.2]]), Money::GBP(100), PlanParameters::none())->shouldBeLike($expected);
 }
 function it_should_not_modify_a_plan_if_there_is_no_bursary($baseCalculator, PaymentPlan $childPlan)
 {
     $baseCalculator->getPlan(Def::withName('Foo'), Money::GBP(100), Params::none())->willReturn($childPlan);
     $baseCalculator->getPlan(Def::withName('Foo'), Money::GBP(100), Params::none())->shouldBeCalled();
     $this->getPlan(Def::withName('Foo'), Money::GBP(100), Params::none())->shouldReturn($childPlan);
 }
 function it_should_use_a_calculator_to_return_a_plan(PaymentPlan $fooPlan, $delegatedFooCalculator)
 {
     $delegatedFooCalculator->getPlan(PlanDefinition::withName('Foo'), Money::GBP(100), PlanParameters::none())->willReturn($fooPlan);
     $this->getPlan(PlanDefinition::withName('Foo'), Money::GBP(100), PlanParameters::none())->shouldReturn($fooPlan);
 }