Skip to content

Commit

Permalink
Fix: null values are removed from the generated xml.
Browse files Browse the repository at this point in the history
  • Loading branch information
firebed committed Feb 29, 2024
1 parent 16db670 commit 9ac6ac9
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/Xml/XMLWriter.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ public function __construct()

protected function build(DOMNode $parent, string $nodeName, mixed $nodeValue, $namespace = null): void
{
if (is_null($nodeValue)) {
return;
}

if ($nodeValue instanceof Type) {
$this->buildType($parent, $nodeName, $nodeValue);
return;
Expand Down
66 changes: 66 additions & 0 deletions tests/XmlNullValuesTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php

namespace Tests;

use Firebed\AadeMyData\Enums\ExpenseClassificationCategory;
use Firebed\AadeMyData\Enums\IncomeClassificationCategory;
use Firebed\AadeMyData\Enums\IncomeClassificationType;
use Firebed\AadeMyData\Models\ExpensesClassification;
use Firebed\AadeMyData\Models\IncomeClassification;
use Firebed\AadeMyData\Models\Invoice;
use Firebed\AadeMyData\Models\InvoiceDetails;
use PHPUnit\Framework\TestCase;
use Tests\Traits\HandlesInvoiceXml;

class XmlNullValuesTest extends TestCase
{
use HandlesInvoiceXml;

public function test_null_values_are_removed_from_generated_xml()
{
$icls1 = new IncomeClassification();
$icls1->setClassificationType(null);
$icls1->setClassificationCategory(IncomeClassificationCategory::CATEGORY_3);
$icls1->setAmount(0);

$icls2 = new IncomeClassification();
$icls2->setClassificationType(IncomeClassificationType::E3_106);
$icls2->setClassificationCategory(IncomeClassificationCategory::CATEGORY_1_3);
$icls2->setAmount(0);

$ecls = new ExpensesClassification();
$ecls->setClassificationType(null);
$ecls->setClassificationCategory(ExpenseClassificationCategory::CATEGORY_2_1);
$ecls->setAmount(0);

$row = new InvoiceDetails();
$row->addIncomeClassification($icls1);
$row->addIncomeClassification($icls2);
$row->addExpensesClassification($ecls);

$invoice = new Invoice();
$invoice->addInvoiceDetails($row);

$classifications = $this->toXML($invoice)->InvoicesDoc->invoice->invoiceDetails;

$income = $classifications->incomeClassification;

$this->assertCount(2, $income);
$this->assertCount(2, $income[0]);

$this->assertEquals(IncomeClassificationCategory::CATEGORY_3->value, $income[0]->get('icls:classificationCategory'));
$this->assertEquals(0, $income[0]->get('icls:amount'));
$this->assertArrayNotHasKey('icls:classificationType', $income[0]);

$this->assertEquals(IncomeClassificationCategory::CATEGORY_1_3->value, $income[1]->get('icls:classificationCategory'));
$this->assertEquals(0, $income[1]->get('icls:amount'));
$this->assertEquals(IncomeClassificationType::E3_106->value, $income[1]->get('icls:classificationType'));

$expenses = $classifications->expensesClassification;
$this->assertCount(2, $expenses);

$this->assertEquals(ExpenseClassificationCategory::CATEGORY_2_1->value, $expenses->get('ecls:classificationCategory'));
$this->assertEquals(0, $expenses->get('ecls:amount'));
$this->assertArrayNotHasKey('ecls:classificationType', $expenses);
}
}

0 comments on commit 9ac6ac9

Please sign in to comment.