delete invoices (#1652)
* include all meta fields as template variables * support invoice preview via command * support deletion of generated invoices
This commit is contained in:
@@ -157,6 +157,11 @@ class InvoiceCreateCommandTest extends KernelTestCase
|
||||
$this->assertCommandErrors(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--customer' => 1, '--template' => 'x', '--start' => '2020-01-01', '--end' => 'öäüß'], 'Invalid end date given');
|
||||
}
|
||||
|
||||
public function testCreateWithInvalidPreviewDirectory()
|
||||
{
|
||||
$this->assertCommandErrors(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--customer' => 1, '--template' => 'x', '--start' => '2020-01-01', '--end' => '2020-01-02', '--preview' => '/kjhg/'], 'Invalid preview directory given');
|
||||
}
|
||||
|
||||
public function testCreateWithInvalidCustomer()
|
||||
{
|
||||
$this->assertCommandErrors(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--customer' => 3, '--template' => 'x'], 'Unknown customer ID: 3');
|
||||
@@ -245,4 +250,17 @@ class InvoiceCreateCommandTest extends KernelTestCase
|
||||
$output = $commandTester->getDisplay();
|
||||
$this->assertStringContainsString('Created 1 invoice(s) ', $output);
|
||||
}
|
||||
|
||||
public function testCreateInvoiceByProjectWithPreview()
|
||||
{
|
||||
$start = new \DateTime('-2 months');
|
||||
$end = new \DateTime();
|
||||
|
||||
$this->prepareFixtures($start);
|
||||
|
||||
$commandTester = $this->createInvoice(['--user' => UserFixtures::USERNAME_SUPER_ADMIN, '--exported' => 'all', '--preview' => sys_get_temp_dir(), '--by-project' => null, '--template-meta' => 'template', '--start' => $start->format('Y-m-d'), '--end' => $end->format('Y-m-d')]);
|
||||
|
||||
$output = $commandTester->getDisplay();
|
||||
$this->assertStringContainsString('Created 1 invoice(s) ', $output);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -266,7 +266,7 @@ class InvoiceControllerTest extends ControllerBaseTest
|
||||
$this->assertEquals('invoice_print', $node->getIterator()[0]->getAttribute('class'));
|
||||
}
|
||||
|
||||
public function testCreateActionAsAdminWithDownloadAndStatusChange()
|
||||
public function testCreateActionAsAdminWithDownloadAndStatusChangeAndDelete()
|
||||
{
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
/** @var EntityManager $em */
|
||||
@@ -350,6 +350,11 @@ class InvoiceControllerTest extends ControllerBaseTest
|
||||
$this->assertIsRedirect($client, '/invoice/show');
|
||||
$client->followRedirect();
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
|
||||
$this->request($client, '/invoice/delete/1');
|
||||
$this->assertIsRedirect($client, '/invoice/show');
|
||||
$client->followRedirect();
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
}
|
||||
|
||||
public function testEditTemplateAction()
|
||||
|
||||
@@ -76,6 +76,15 @@ class InvoiceTemplateTest extends TestCase
|
||||
self::assertInstanceOf(InvoiceTemplate::class, $sut->setLanguage('de'));
|
||||
self::assertEquals('de', $sut->getLanguage());
|
||||
|
||||
self::assertInstanceOf(InvoiceTemplate::class, $sut->setNumberGenerator('foo'));
|
||||
self::assertEquals('foo', $sut->getNumberGenerator());
|
||||
|
||||
self::assertInstanceOf(InvoiceTemplate::class, $sut->setRenderer('bar'));
|
||||
self::assertEquals('bar', $sut->getRenderer());
|
||||
|
||||
self::assertInstanceOf(InvoiceTemplate::class, $sut->setCalculator('fooBar'));
|
||||
self::assertEquals('fooBar', $sut->getCalculator());
|
||||
|
||||
self::assertEquals($sut, clone $sut);
|
||||
}
|
||||
|
||||
|
||||
@@ -184,13 +184,15 @@ class UserTest extends TestCase
|
||||
{
|
||||
$sut = new User();
|
||||
$sut->setAlias('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
|
||||
self::assertEquals(60, \strlen($sut->getAlias()));
|
||||
self::assertEquals(60, mb_strlen($sut->getAlias()));
|
||||
$sut->setAlias('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxAAAAA');
|
||||
self::assertEquals(60, \strlen($sut->getAlias()));
|
||||
self::assertEquals(60, mb_strlen($sut->getAlias()));
|
||||
$sut->setAlias('万政提質打録施熟活者韓症写気当。規談表有部確暑将回優隊見竜能南事。竹阪板府入違護究兵厚能提。済伸知題熱正写場京誉事週在複今徳際供。審利世連手阿量携泉指済像更映刊政病世。熱楽時予資方賀月改洋者職原桜提増脚職。気公誌荒原輝文治察専及唱戦白廃模書。着授健出山力集出止員捉害実載措明国無今。棋出陶供供知機使協物確講最新両。');
|
||||
self::assertEquals(60, mb_strlen($sut->getAlias()));
|
||||
$sut->setTitle('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
|
||||
self::assertEquals(50, \strlen($sut->getTitle()));
|
||||
self::assertEquals(50, mb_strlen($sut->getTitle()));
|
||||
$sut->setTitle('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxAAAAAA');
|
||||
self::assertEquals(50, \strlen($sut->getTitle()));
|
||||
self::assertEquals(50, mb_strlen($sut->getTitle()));
|
||||
}
|
||||
|
||||
public function testPreferencesCollectionIsCreatedOnBrokenUser()
|
||||
|
||||
@@ -39,6 +39,7 @@ class InvoiceModelDefaultHydratorTest extends TestCase
|
||||
'invoice.currency',
|
||||
'invoice.currency_symbol',
|
||||
'invoice.vat',
|
||||
'invoice.language',
|
||||
'invoice.tax',
|
||||
'invoice.tax_nc',
|
||||
'invoice.tax_plain',
|
||||
@@ -60,11 +61,19 @@ class InvoiceModelDefaultHydratorTest extends TestCase
|
||||
'template.contact',
|
||||
'template.payment_details',
|
||||
'query.begin',
|
||||
'query.day',
|
||||
'query.end',
|
||||
'query.day',
|
||||
'query.month',
|
||||
'query.month_number',
|
||||
'query.year',
|
||||
'query.begin_day',
|
||||
'query.begin_month',
|
||||
'query.begin_month_number',
|
||||
'query.begin_year',
|
||||
'query.end_day',
|
||||
'query.end_month',
|
||||
'query.end_month_number',
|
||||
'query.end_year',
|
||||
];
|
||||
|
||||
$givenKeys = array_keys($model);
|
||||
|
||||
@@ -84,6 +84,7 @@ class DebugRendererTest extends TestCase
|
||||
'invoice.currency_symbol',
|
||||
'invoice.vat',
|
||||
'invoice.tax',
|
||||
'invoice.language',
|
||||
'invoice.tax_nc',
|
||||
'invoice.tax_plain',
|
||||
'invoice.total_time',
|
||||
@@ -109,6 +110,14 @@ class DebugRendererTest extends TestCase
|
||||
'query.month',
|
||||
'query.month_number',
|
||||
'query.year',
|
||||
'query.begin_day',
|
||||
'query.begin_month',
|
||||
'query.begin_month_number',
|
||||
'query.begin_year',
|
||||
'query.end_day',
|
||||
'query.end_month',
|
||||
'query.end_month_number',
|
||||
'query.end_year',
|
||||
'customer.id',
|
||||
'customer.address',
|
||||
'customer.name',
|
||||
|
||||
@@ -115,6 +115,7 @@ trait RendererTestTrait
|
||||
$template = new InvoiceTemplate();
|
||||
$template->setTitle('a very *long* test invoice / template title with [special] character');
|
||||
$template->setVat(19);
|
||||
$template->setLanguage('en');
|
||||
|
||||
$project = new Project();
|
||||
$project->setName('project name');
|
||||
|
||||
@@ -69,9 +69,19 @@ class TextRendererTest extends KernelTestCase
|
||||
|
||||
foreach ($model->toArray() as $key => $value) {
|
||||
if (null === $value || '' === $value) {
|
||||
self::assertStringContainsString(sprintf("%s:\n\n", $key), $content);
|
||||
self::assertStringContainsString(sprintf("%s\n", $key), $content);
|
||||
} else {
|
||||
self::assertStringContainsString(sprintf("%s:\n %s", $key, explode("\n", $value)[0]), $content);
|
||||
self::assertStringContainsString(sprintf("%s\n %s", $key, explode("\n", $value)[0]), $content);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($model->getCalculator()->getEntries() as $entry) {
|
||||
foreach ($model->itemToArray($entry) as $key => $value) {
|
||||
if (null === $value || '' === $value) {
|
||||
self::assertStringContainsString(sprintf("%s\n", $key), $content);
|
||||
} else {
|
||||
self::assertStringContainsString(sprintf("%s\n %s", $key, explode("\n", $value)[0]), $content);
|
||||
}
|
||||
}
|
||||
}
|
||||
self::assertEquals(\count($model->getCalculator()->getEntries()), substr_count($content, PHP_EOL . '---' . PHP_EOL));
|
||||
|
||||
Reference in New Issue
Block a user