/** * {@inheritdoc} */ public function isEligible(ShippingSubjectInterface $subject, array $configuration) { $count = $subject->getShippingUnitCount(); if ($configuration['equal']) { return $count >= $configuration['count']; } return $count > $configuration['count']; }
/** * {@inheritdoc} */ public function calculate(ShippingSubjectInterface $subject, array $configuration) { $firstUnitCost = $configuration['first_unit_cost']; $additionalUnitCost = $configuration['additional_unit_cost']; $additionalUnitLimit = $configuration['additional_unit_limit']; $totalUnits = $subject->getShippingUnitCount(); $additionalUnits = $totalUnits - 1; if (0 !== $additionalUnitLimit) { $additionalUnits = $additionalUnitLimit >= $additionalUnits ? $additionalUnits : $additionalUnitLimit; } return (int) ($firstUnitCost + $additionalUnits * $additionalUnitCost); }
function it_should_recognize_subject_as_eligible_if_unit_count_is_equal_with_configured_depending_on_equal_setting(ShippingSubjectInterface $subject) { $subject->getShippingUnitCount()->shouldBeCalled()->willReturn(10); $this->isEligible($subject, ['count' => 10, 'equal' => false])->shouldReturn(false); $this->isEligible($subject, ['count' => 10, 'equal' => true])->shouldReturn(true); }
/** * {@inheritdoc} */ public function calculate(ShippingSubjectInterface $subject, array $configuration) { return (int) ($configuration['amount'] * $subject->getShippingUnitCount()); }
function its_calculated_value_should_be_an_integer(ShippingSubjectInterface $subject) { $subject->getShippingUnitCount()->willReturn(6); $this->calculate($subject, ['amount' => 200])->shouldBeInteger(); }