/**
  * @covers Intacct\FieldTypes\Record::setFields
  * @expectedException InvalidArgumentException
  * @expectedExceptionMessage "456INVALID" is not a valid name for an XML element
  */
 public function testConstructFailureInvalidFieldName()
 {
     $xml = new XMLWriter();
     $xml->openMemory();
     $xml->setIndent(true);
     $xml->setIndentString('    ');
     $xml->startDocument();
     $record = new Record();
     $record->setObjectName('CLASS');
     $record->setFields(['CLASSID' => 'UT01', 'NAME' => 'Unit Test 01', '456INVALID' => 'unit test']);
     $record->writeXml($xml);
 }
    /**
     * @covers Intacct\Functions\Common\Update::setRecords
     * @covers Intacct\Functions\Common\Update::writeXml
     */
    public function testWriteXmlOwnedObject()
    {
        $expected = <<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<function controlid="unittest">
    <update>
        <GLBATCH>
            <RECORDNO>1234</RECORDNO>
            <JOURNAL>GJ</JOURNAL>
            <BATCH_DATE>06/30/2016</BATCH_DATE>
            <BATCH_TITLE>test</BATCH_TITLE>
            <ENTRIES>
                <GLENTRY>
                    <ACCOUNTNO>1000</ACCOUNTNO>
                    <TR_TYPE>1</TR_TYPE>
                    <TRX_AMOUNT>10.12</TRX_AMOUNT>
                </GLENTRY>
                <GLENTRY>
                    <ACCOUNTNO>2000</ACCOUNTNO>
                    <TR_TYPE>-1</TR_TYPE>
                    <TRX_AMOUNT>10.12</TRX_AMOUNT>
                    <ALLOCATION>Custom</ALLOCATION>
                    <SPLIT>
                        <AMOUNT>600</AMOUNT>
                    </SPLIT>
                    <SPLIT>
                        <AMOUNT>400</AMOUNT>
                    </SPLIT>
                </GLENTRY>
            </ENTRIES>
        </GLBATCH>
    </update>
</function>
EOF;
        $entry1 = new Record();
        $entry1->setObjectName('GLENTRY');
        $entry1->setFields(['ACCOUNTNO' => '1000', 'TR_TYPE' => '1', 'TRX_AMOUNT' => 10.12]);
        $split1 = new Record();
        $split1->setObjectName('SPLIT');
        $split1->setFields(['AMOUNT' => 600]);
        $split2 = new Record();
        $split2->setObjectName('SPLIT');
        $split2->setFields(['AMOUNT' => 400]);
        $entry2 = new Record();
        $entry2->setObjectName('GLENTRY');
        $entry2->setFields(['ACCOUNTNO' => '2000', 'TR_TYPE' => '-1', 'TRX_AMOUNT' => 10.12, 'ALLOCATION' => 'Custom', $split1, $split2]);
        $batch = new Record();
        $batch->setObjectName('GLBATCH');
        $batch->setFields(['RECORDNO' => 1234, 'JOURNAL' => 'GJ', 'BATCH_DATE' => new DateType('2016-06-30'), 'BATCH_TITLE' => 'test', 'ENTRIES' => [$entry1, $entry2]]);
        $xml = new XMLWriter();
        $xml->openMemory();
        $xml->setIndent(true);
        $xml->setIndentString('    ');
        $xml->startDocument();
        $update = new Update('unittest');
        $update->setRecords([$batch]);
        $update->writeXml($xml);
        $this->assertXmlStringEqualsXmlString($expected, $xml->flush());
    }