From 6df135d54761aa70f951be059811028b97b9d12c Mon Sep 17 00:00:00 2001 From: Kevin Papst Date: Tue, 21 Feb 2023 10:42:25 +0100 Subject: [PATCH] fixed replacer cannot find value for field (#3862) --- src/Constants.php | 4 +-- .../ConfigurableNumberGenerator.php | 10 ++++-- .../ConfigurableNumberGeneratorTest.php | 32 +++++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/Constants.php b/src/Constants.php index 5291c9f7c..7d760e649 100644 --- a/src/Constants.php +++ b/src/Constants.php @@ -17,11 +17,11 @@ class Constants /** * The current release version */ - public const VERSION = '1.30.9'; + public const VERSION = '1.30.10'; /** * The current release: major * 10000 + minor * 100 + patch */ - public const VERSION_ID = 13009; + public const VERSION_ID = 13010; /** * The current release status, either "stable" or "dev" */ diff --git a/src/Invoice/NumberGenerator/ConfigurableNumberGenerator.php b/src/Invoice/NumberGenerator/ConfigurableNumberGenerator.php index 3ca08f017..5459bebb3 100644 --- a/src/Invoice/NumberGenerator/ConfigurableNumberGenerator.php +++ b/src/Invoice/NumberGenerator/ConfigurableNumberGenerator.php @@ -217,11 +217,17 @@ final class ConfigurableNumberGenerator implements NumberGeneratorInterface break; case 'cname': - $partialResult = $this->model->getCustomer() !== null ? $this->model->getCustomer()->getName() : ''; + $partialResult = $this->model->getCustomer() !== null ? $this->model->getCustomer()->getName() : null; + if ($partialResult === null) { + throw new \InvalidArgumentException('Customer has no name, replacer {cname} failed evaluation.'); + } break; case 'cnumber': - $partialResult = $this->model->getCustomer() !== null ? $this->model->getCustomer()->getNumber() : ''; + $partialResult = $this->model->getCustomer() !== null ? $this->model->getCustomer()->getNumber() : null; + if ($partialResult === null) { + throw new \InvalidArgumentException('Customer has no number, replacer {cnumber} failed evaluation.'); + } break; default: diff --git a/tests/Invoice/NumberGenerator/ConfigurableNumberGeneratorTest.php b/tests/Invoice/NumberGenerator/ConfigurableNumberGeneratorTest.php index 96c85db53..42858de76 100644 --- a/tests/Invoice/NumberGenerator/ConfigurableNumberGeneratorTest.php +++ b/tests/Invoice/NumberGenerator/ConfigurableNumberGeneratorTest.php @@ -166,6 +166,38 @@ class ConfigurableNumberGeneratorTest extends TestCase $this->assertEquals('default', $sut->getId()); } + public function getMissingFieldTestData() + { + return [ + ['{Y}/{cnumber}_{ccy,3}', 'Customer has no number, replacer {cnumber} failed evaluation.'], + ['{Y}/{cname}_{ccy,3}', 'Customer has no name, replacer {cname} failed evaluation.'], + ]; + } + + /** + * @dataProvider getMissingFieldTestData + */ + public function testCustomerHasMissingField(string $format, string $message) + { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage($message); + + $user = $this->createMock(User::class); + $user->method('getId')->willReturn(13); + $user->method('getAccountNumber')->willReturn('0815'); + + $customer = new Customer(); + + $sut = $this->getSut($format); + $model = (new InvoiceModelFactoryFactory($this))->create()->createModel(new DebugFormatter()); + $model->setInvoiceDate(new \DateTime()); + $model->setCustomer($customer); + $model->setUser($user); + $sut->setModel($model); + + $sut->getInvoiceNumber(); + } + public function getInvalidTestData() { $invoiceDate = new \DateTime();