Meta-fields for InvoiceTemplate, structured Customer address (#5519)

This commit is contained in:
Kevin Papst
2025-11-02 11:24:17 +01:00
committed by GitHub
parent 76821c24ed
commit cc64acf0f8
72 changed files with 2111 additions and 801 deletions

View File

@@ -9,7 +9,11 @@
namespace App\Tests\Entity;
use App\Entity\Customer;
use App\Entity\CustomerMeta;
use App\Entity\InvoiceTemplate;
use App\Entity\InvoiceTemplateMeta;
use Doctrine\Common\Collections\Collection;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
@@ -35,59 +39,118 @@ class InvoiceTemplateTest extends TestCase
self::assertEquals('default', $sut->getRenderer());
self::assertEquals(30, $sut->getDueDays());
self::assertTrue($sut->isDecimalDuration()); // @phpstan-ignore method.deprecated
}
public function testSetNullForOptionalValues(): void
{
$sut = new InvoiceTemplate();
self::assertInstanceOf(InvoiceTemplate::class, $sut->setPaymentDetails(null));
self::assertInstanceOf(InvoiceTemplate::class, $sut->setVatId(null));
self::assertInstanceOf(InvoiceTemplate::class, $sut->setContact(null));
self::assertInstanceOf(InvoiceTemplate::class, $sut->setAddress(null));
self::assertInstanceOf(InvoiceTemplate::class, $sut->setPaymentTerms(null));
self::assertInstanceOf(Collection::class, $sut->getMetaFields());
self::assertEquals(0, $sut->getMetaFields()->count());
self::assertNull($sut->getMetaField('foo'));
}
public function testSetterAndGetter(): void
{
$sut = new InvoiceTemplate();
self::assertInstanceOf(InvoiceTemplate::class, $sut->setPaymentTerms('foo bar'));
$sut->setPaymentTerms('foo bar');
self::assertEquals('foo bar', $sut->getPaymentTerms());
self::assertInstanceOf(InvoiceTemplate::class, $sut->setPaymentDetails('iuasdzgf isdfhvlksdjfbnvl ksdfbglisbdf'));
$sut->setPaymentDetails('iuasdzgf isdfhvlksdjfbnvl ksdfbglisbdf');
self::assertEquals('iuasdzgf isdfhvlksdjfbnvl ksdfbglisbdf', $sut->getPaymentDetails());
self::assertInstanceOf(InvoiceTemplate::class, $sut->setContact('hello world'));
$sut->setContact('hello world');
self::assertEquals('hello world', $sut->getContact());
self::assertInstanceOf(InvoiceTemplate::class, $sut->setVat(7.31));
$sut->setVat(7.31);
self::assertEquals(7.31, $sut->getVat());
self::assertInstanceOf(InvoiceTemplate::class, $sut->setVatId('1234567890'));
$sut->setVatId('1234567890'); // @phpstan-ignore method.deprecated
self::assertEquals('1234567890', $sut->getVatId());
self::assertInstanceOf(InvoiceTemplate::class, $sut->setLanguage('de'));
$sut->setLanguage('de');
self::assertEquals('de', $sut->getLanguage());
self::assertInstanceOf(InvoiceTemplate::class, $sut->setNumberGenerator('foo'));
$sut->setNumberGenerator('foo');
self::assertEquals('foo', $sut->getNumberGenerator());
self::assertInstanceOf(InvoiceTemplate::class, $sut->setRenderer('bar'));
$sut->setRenderer('bar');
self::assertEquals('bar', $sut->getRenderer());
self::assertInstanceOf(InvoiceTemplate::class, $sut->setCalculator('fooBar'));
$sut->setCalculator('fooBar');
self::assertEquals('fooBar', $sut->getCalculator());
$sut->setCompany('looney toon'); // @phpstan-ignore method.deprecated
self::assertEquals('looney toon', $sut->getCompany());
$sut->setAddress('acme street, 1234 looney town, rainbow'); // @phpstan-ignore method.deprecated
self::assertEquals('acme street, 1234 looney town, rainbow', $sut->getAddress());
self::assertEquals($sut, clone $sut);
$customer = new Customer('foo');
$customer->setVatId('0987654321');
$customer->setCompany('bar');
$customer->setAddressLine1('elmstreet');
$customer->setAddressLine2('2nd floor');
$customer->setPostCode('4711');
$customer->setCity('Over the rainbow');
$sut->setCustomer($customer);
self::assertEquals('elmstreet
2nd floor
4711 Over the rainbow', $sut->getAddress());
self::assertEquals('bar', $sut->getCompany());
self::assertEquals('0987654321', $sut->getVatId());
}
public function testToString(): void
{
$sut = new InvoiceTemplate();
self::assertInstanceOf(InvoiceTemplate::class, $sut->setName('a template name'));
$sut->setName('a template name');
self::assertEquals('a template name', $sut->__toString());
self::assertEquals('a template name', (string) $sut);
}
public function testMetaFields(): void
{
$sut = new InvoiceTemplate();
$meta = new InvoiceTemplateMeta();
$meta->setName('foo')->setValue('bar2')->setType('test');
self::assertInstanceOf(InvoiceTemplate::class, $sut->setMetaField($meta));
self::assertEquals(1, $sut->getMetaFields()->count());
$result = $sut->getMetaField('foo');
self::assertSame($result, $meta);
self::assertEquals('test', $result->getType());
self::assertEquals('bar2', $result->getValue());
$meta2 = new InvoiceTemplateMeta();
$meta2->setName('foo')->setValue('bar')->setType('test2');
self::assertInstanceOf(InvoiceTemplate::class, $sut->setMetaField($meta2));
self::assertEquals(1, $sut->getMetaFields()->count());
self::assertCount(0, $sut->getVisibleMetaFields());
$result = $sut->getMetaField('foo');
self::assertSame($result, $meta);
self::assertEquals('test2', $result->getType());
$sut->setMetaField((new InvoiceTemplateMeta())->setName('blub')->setIsVisible(true));
$sut->setMetaField((new InvoiceTemplateMeta())->setName('blab')->setIsVisible(true));
self::assertEquals(3, $sut->getMetaFields()->count());
self::assertCount(2, $sut->getVisibleMetaFields());
}
public function testThrowsOnMetaFieldWithoutName(): void
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Meta-field needs to have a name');
$sut = new InvoiceTemplate();
$sut->setMetaField(new CustomerMeta());
}
public function testThrowsOnMetaFieldsWrongType(): void
{
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('Meta-field needs to be an instanceof InvoiceTemplateMeta');
$sut = new InvoiceTemplate();
$meta = new CustomerMeta();
$meta->setName('foo');
$sut->setMetaField($meta);
}
}