Skip to content

Commit

Permalink
Fix "Argument 1 passed to Mekras\Atom\Extensions::createElement() mus…
Browse files Browse the repository at this point in the history
…t be an instance of Mekras\Atom\Node, null given" error.
  • Loading branch information
mekras committed Aug 5, 2016
1 parent e883c8e commit bf52547
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 14 deletions.
54 changes: 54 additions & 0 deletions src/Document/EntryDocument.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php
/**
* OData client library
*
* @author Михаил Красильников <m.krasilnikov@yandex.ru>
* @license MIT
*/
namespace Mekras\OData\Client\Document;

use Mekras\Atom\Document\EntryDocument as BaseEntryDocument;
use Mekras\Atom\Extensions;

/**
* OData Service error response.
*
* @since 1.0
*/
class EntryDocument extends BaseEntryDocument
{
/**
* Create document.
*
* @param Extensions $extensions Extension registry.
* @param \DOMDocument|null $document Source document.
*
* @throws \InvalidArgumentException If $document root node has invalid name.
*
* @since 1.0
*/
public function __construct(Extensions $extensions, $document = null)
{
parent::__construct($extensions, $document);
if (null === $document) {
/* For new (empty) entry we should create all necessary nodes. */
$entry = $this->getEntry();
$entry->addAuthor('');
$entry->addContent('', 'text');
$entry->getProperties(); // Create properties node.
}
}

/**
* Return entry.
*
* @return \Mekras\OData\Client\Element\Entry
*
* @since 1.0
*/
public function getEntry()
{
// This method is a syntactic sugar.
return parent::getEntry();
}
}
3 changes: 0 additions & 3 deletions src/DocumentFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,6 @@ public function createEntityDocument($type)
}

$entry->setEntityType($type);
$entry->addAuthor('');
$entry->addContent('', 'text');
$entry->getProperties(); // Create properties node.

return $document;
}
Expand Down
33 changes: 25 additions & 8 deletions src/ODataExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use Mekras\Atom\Extension\NamespaceExtension;
use Mekras\Atom\Extensions;
use Mekras\Atom\Node;
use Mekras\OData\Client\Document\EntryDocument;
use Mekras\OData\Client\Document\ErrorDocument;
use Mekras\OData\Client\Element\Entry;
use Mekras\OData\Client\Element\Properties;
Expand All @@ -26,7 +27,7 @@
class ODataExtension implements DocumentExtension, ElementExtension, NamespaceExtension
{
/**
* Create Atom document from XML DOM document.
* Create OData document from XML DOM document.
*
* @param Extensions $extensions Extension registry.
* @param \DOMDocument $document Source document.
Expand All @@ -37,19 +38,29 @@ class ODataExtension implements DocumentExtension, ElementExtension, NamespaceEx
*/
public function parseDocument(Extensions $extensions, \DOMDocument $document)
{
if (OData::META === $document->documentElement->namespaceURI) {
switch ($document->documentElement->localName) {
case 'error':
// Node name already checked
return new ErrorDocument($extensions, $document);
}
switch ($document->documentElement->namespaceURI) {
case Atom::NS:
switch ($document->documentElement->localName) {
case 'entry':
// Node name already checked
return new EntryDocument($extensions, $document);
}
break;

case OData::META:
switch ($document->documentElement->localName) {
case 'error':
// Node name already checked
return new ErrorDocument($extensions, $document);
}
break;
}

return null;
}

/**
* Create new Atom document.
* Create new OData document.
*
* @param Extensions $extensions Extension registry.
* @param string $name Element name.
Expand All @@ -60,6 +71,12 @@ public function parseDocument(Extensions $extensions, \DOMDocument $document)
*/
public function createDocument(Extensions $extensions, $name)
{
switch ($name) {
case 'atom:entry':
// No document — no exception.
return new EntryDocument($extensions);
}

return null;
}

Expand Down
17 changes: 14 additions & 3 deletions tests/Document/EntryDocumentTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@
*/
namespace Mekras\OData\Client\Tests\Document;

use Mekras\Atom\Document\EntryDocument;
use Mekras\OData\Client\Document\EntryDocument;
use Mekras\OData\Client\DocumentFactory;
use Mekras\OData\Client\Element\Entry;
use Mekras\OData\Client\Element\Properties;
use Mekras\OData\Client\Tests\TestCase;

/**
Expand Down Expand Up @@ -62,12 +63,22 @@ public function testCreate()
'xmlns:app="http://www.w3.org/2007/app" ' .
'xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" ' .
'xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">' .
'<category term="FooModel" ' .
'scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>' .
'<author><name></name></author>' .
'<content type="application/xml"><m:properties/></content>' .
'<category term="FooModel" ' .
'scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>' .
'</entry>',
trim($document)
);
}

/**
* Empty entry should contains m:properties node.
*/
public function testEmptyEntryHasProperties()
{
$document = new EntryDocument($this->createExtensions());
$entry = $document->getEntry();
static::assertInstanceOf(Properties::class, $entry->getProperties());
}
}

0 comments on commit bf52547

Please sign in to comment.