Meta-fields for InvoiceTemplate, structured Customer address (#5519)
This commit is contained in:
@@ -35,6 +35,13 @@ class CustomerTest extends AbstractEntityTestCase
|
||||
self::assertNull($sut->getVatId());
|
||||
self::assertNull($sut->getContact());
|
||||
self::assertNull($sut->getAddress());
|
||||
self::assertNull($sut->getAddressLine1());
|
||||
self::assertNull($sut->getAddressLine2());
|
||||
self::assertNull($sut->getAddressLine3());
|
||||
self::assertNull($sut->getFormattedAddress());
|
||||
self::assertNull($sut->getCity());
|
||||
self::assertNull($sut->getPostCode());
|
||||
self::assertNull($sut->getBuyerReference());
|
||||
self::assertNull($sut->getCountry());
|
||||
self::assertEquals('EUR', $sut->getCurrency());
|
||||
self::assertEquals('EUR', Customer::DEFAULT_CURRENCY);
|
||||
@@ -137,6 +144,51 @@ class CustomerTest extends AbstractEntityTestCase
|
||||
|
||||
$sut->setCurrency(null);
|
||||
self::assertNull($sut->getCurrency());
|
||||
|
||||
$sut->setBuyerReference('BR-876876876876');
|
||||
self::assertEquals('BR-876876876876', $sut->getBuyerReference());
|
||||
|
||||
$sut->setBuyerReference(null);
|
||||
self::assertNull($sut->getBuyerReference());
|
||||
|
||||
$sut->setAddressLine1('address line 1');
|
||||
$sut->setAddressLine2('address line 2');
|
||||
$sut->setAddressLine3('address line 3');
|
||||
$sut->setCity('looney toon');
|
||||
$sut->setPostcode('zip 12345');
|
||||
$sut->setAddress('foo bar
|
||||
sdfsadf
|
||||
sdfarwt34
|
||||
786876 uitiutziuz');
|
||||
|
||||
self::assertEquals('address line 1', $sut->getAddressLine1());
|
||||
self::assertEquals('address line 2', $sut->getAddressLine2());
|
||||
self::assertEquals('address line 3', $sut->getAddressLine3());
|
||||
self::assertEquals('looney toon', $sut->getCity());
|
||||
self::assertEquals('zip 12345', $sut->getPostCode());
|
||||
self::assertEquals('foo bar
|
||||
sdfsadf
|
||||
sdfarwt34
|
||||
786876 uitiutziuz', $sut->getAddress());
|
||||
self::assertEquals('address line 1
|
||||
address line 2
|
||||
address line 3
|
||||
zip 12345 looney toon', $sut->getFormattedAddress());
|
||||
|
||||
$sut->setAddressLine1(null);
|
||||
$sut->setAddressLine2(null);
|
||||
$sut->setAddressLine3(null);
|
||||
$sut->setCity(null);
|
||||
$sut->setPostcode(null);
|
||||
$sut->setAddress(null);
|
||||
|
||||
self::assertNull($sut->getAddress());
|
||||
self::assertNull($sut->getAddressLine1());
|
||||
self::assertNull($sut->getAddressLine2());
|
||||
self::assertNull($sut->getAddressLine3());
|
||||
self::assertNull($sut->getFormattedAddress());
|
||||
self::assertNull($sut->getCity());
|
||||
self::assertNull($sut->getPostCode());
|
||||
}
|
||||
|
||||
public function testMetaFields(): void
|
||||
@@ -212,6 +264,11 @@ class CustomerTest extends AbstractEntityTestCase
|
||||
['mobile', 'string'],
|
||||
['fax', 'string'],
|
||||
['homepage', 'string'],
|
||||
['address_line1', 'string'],
|
||||
['address_line2', 'string'],
|
||||
['address_line3', 'string'],
|
||||
['postcode', 'string'],
|
||||
['city', 'string'],
|
||||
['country', 'string'],
|
||||
['currency', 'string'],
|
||||
['timezone', 'string'],
|
||||
@@ -222,6 +279,7 @@ class CustomerTest extends AbstractEntityTestCase
|
||||
['visible', 'boolean'],
|
||||
['comment', 'string'],
|
||||
['billable', 'boolean'],
|
||||
['buyer_reference', 'string'],
|
||||
];
|
||||
|
||||
self::assertCount(\count($expected), $columns);
|
||||
|
||||
40
tests/Entity/InvoiceTemplateMetaTest.php
Normal file
40
tests/Entity/InvoiceTemplateMetaTest.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Kimai time-tracking app.
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace App\Tests\Entity;
|
||||
|
||||
use App\Entity\EntityWithMetaFields;
|
||||
use App\Entity\InvoiceTemplate;
|
||||
use App\Entity\InvoiceTemplateMeta;
|
||||
use App\Entity\MetaTableTypeInterface;
|
||||
use App\Entity\Timesheet;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
|
||||
#[CoversClass(InvoiceTemplateMeta::class)]
|
||||
class InvoiceTemplateMetaTest extends AbstractMetaEntityTestCase
|
||||
{
|
||||
protected function getEntity(): EntityWithMetaFields
|
||||
{
|
||||
return new InvoiceTemplate();
|
||||
}
|
||||
|
||||
protected function getMetaEntity(): MetaTableTypeInterface
|
||||
{
|
||||
return new InvoiceTemplateMeta();
|
||||
}
|
||||
|
||||
public function testSetEntityThrowsException(): void
|
||||
{
|
||||
$this->expectException(\InvalidArgumentException::class);
|
||||
$this->expectExceptionMessage('Expected instanceof InvoiceTemplate, received "App\Entity\Timesheet"');
|
||||
|
||||
$sut = new InvoiceTemplateMeta();
|
||||
$sut->setEntity(new Timesheet());
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user