diff --git a/src/Rule/Consignment/MinimumItemValueRule.php b/src/Rule/Consignment/MinimumItemValueRule.php index 305ee44c..b8a5b5ed 100644 --- a/src/Rule/Consignment/MinimumItemValueRule.php +++ b/src/Rule/Consignment/MinimumItemValueRule.php @@ -20,7 +20,13 @@ public function validate($validationSubject): void $totalValue = 0; foreach ($validationSubject->items as $item) { - $totalValue += $item->getItemValue(); + $itemValue = $item->getItemValue(); + + if (! isset($itemValue['amount'])) { + continue; + } + + $totalValue += (int) $itemValue['amount']; } if ($totalValue < 100) { diff --git a/test/Rule/MinimumItemValueRuleTest.php b/test/Rule/MinimumItemValueRuleTest.php new file mode 100644 index 00000000..8c13bffb --- /dev/null +++ b/test/Rule/MinimumItemValueRuleTest.php @@ -0,0 +1,92 @@ + [ + [ + 'value' => 50, + ], + [ + 'value' => 50, + ], + ], + ], + 'expected'=>true, + ], + [ + [ + 'items' => [ + [ + 'value' => 5000, + ], + [ + 'value' => 9995, + ], + ], + ], + 'expected'=>true, + ], + [ + [ + 'items' => [ + [ + 'value' => 50, + ], + ], + ], + 'expected'=>false, + ], + [ + [ + 'items' => [], + ], + 'expected'=>true, + ], + ]; + } + + /** + * @param array $data + * @param bool $expected + * + * @dataProvider provideMinimumItemValueData + */ + public function testMinimumItemValueRule(array $data, bool $expected): void + { + $rule = new MinimumItemValueRule(); + $consignment = new PostNLConsignment(); + + foreach ($data['items'] as $item) { + $consignment->addItem( + (new MyParcelCustomsItem()) + ->setItemValue($item['value']) + ->setAmount(1) + ->setWeight(1) + ->setClassification(123456) + ->setCountry('NL') + ->setDescription('test') + ); + } + + $rule->validate($consignment); + + self::assertEquals($expected, 0 === count($rule->getErrors())); + } +}