Skip to content

Commit

Permalink
Add CategoryDocument, MemberUri. More tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
mekras committed Jul 5, 2016
1 parent 6a4eaf7 commit 2f9bdd6
Show file tree
Hide file tree
Showing 17 changed files with 440 additions and 21 deletions.
102 changes: 102 additions & 0 deletions src/Document/CategoryDocument.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
*/
namespace Mekras\AtomPub\Document;

use Mekras\Atom\Element\Meta\Categories;

/**
* Category Document.
*
Expand All @@ -16,6 +18,106 @@
*/
class CategoryDocument extends Document
{
use Categories;

/**
* Indicating whether the list of categories is a fixed or an open set.
*
* @return bool
*
* @since 1.0
*/
public function isFixed()
{
return $this->getCachedProperty(
'fixed',
function () {
return $this->getDomElement()->getAttribute('fixed') === 'yes';
}
);
}

/**
* Set whether the list of categories is a fixed or an open set.
*
* @param bool $state
*
* @since 1.0
*/
public function setFixed($state)
{
$this->getDomElement()->setAttribute('fixed', $state ? 'yes' : 'no');
$this->setCachedProperty('fixed', $state);
}

/**
* Return parent scheme.
*
* @return string|null
*
* @since 1.0
*/
public function getScheme()
{
return $this->getCachedProperty(
'scheme',
function () {
return $this->getDomElement()->getAttribute('scheme') ?: null;
}
);
}

/**
* Set parent scheme.
*
* @param string|null $iri Scheme IRI.
*
* @since 1.0
*/
public function setScheme($iri)
{
if (null === $iri) {
$this->getDomElement()->removeAttribute('scheme');
} else {
$this->getDomElement()->setAttribute('scheme', $iri);
}
$this->setCachedProperty('scheme', $iri);
}

/**
* Return reference identifying a Category Document.
*
* @return string|null
*
* @since 1.0
*/
public function getHref()
{
return $this->getCachedProperty(
'href',
function () {
return $this->getDomElement()->getAttribute('href') ?: null;
}
);
}

/**
* Set reference identifying a Category Document.
*
* @param string|null $iri IRI.
*
* @since 1.0
*/
public function setHref($iri)
{
if (null === $iri) {
$this->getDomElement()->removeAttribute('href');
} else {
$this->getDomElement()->setAttribute('href', $iri);
}
$this->setCachedProperty('href', $iri);
}

/**
* Return root node name here.
*
Expand Down
2 changes: 1 addition & 1 deletion src/Element/Meta/MemberUri.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ function () {
*/
public function setMemberUri($value)
{
$element = $this->query('atom:link[@rel="edit"]', Node::SINGLE | Node::REQUIRED);
$element = $this->query('atom:link[@rel="edit"]', Node::SINGLE);
if (null === $element) {
$element = $this->getDomElement()->ownerDocument->createElementNS(Atom::NS, 'link');
$this->getDomElement()->appendChild($element);
Expand Down
3 changes: 3 additions & 0 deletions src/Extension/AtomPubDocuments.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use Mekras\Atom\Document\Document;
use Mekras\Atom\Extension\DocumentType;
use Mekras\AtomPub\AtomPub;
use Mekras\AtomPub\Document\CategoryDocument;
use Mekras\AtomPub\Document\EntryDocument;
use Mekras\AtomPub\Document\FeedDocument;
use Mekras\AtomPub\Document\ServiceDocument;
Expand Down Expand Up @@ -39,6 +40,8 @@ public function createDocument(\DOMDocument $document)
switch ($document->documentElement->localName) {
case 'service':
return new ServiceDocument($document);
case 'categories':
return new CategoryDocument($document);
}
} elseif (Atom::NS === $document->documentElement->namespaceURI) {
switch ($document->documentElement->localName) {
Expand Down
30 changes: 26 additions & 4 deletions tests/AtomPubTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
*/
namespace Mekras\AtomPub\Tests;

use Mekras\Atom\Document\FeedDocument;
use Mekras\AtomPub\AtomPub;
use Mekras\AtomPub\Document\CategoryDocument;
use Mekras\AtomPub\Document\EntryDocument;
use Mekras\AtomPub\Document\FeedDocument;
use Mekras\AtomPub\Document\ServiceDocument;

/**
Expand All @@ -17,25 +19,45 @@
* @covers Mekras\AtomPub\AtomPub
* @covers Mekras\AtomPub\Extension\AtomPubDocuments
*/
class AtomPubTest extends \PHPUnit_Framework_TestCase
class AtomPubTest extends TestCase
{
/**
*
*/
public function testParseService()
{
$atompub = new AtomPub();
$doc = $atompub->parseXML(file_get_contents(__DIR__ . '/fixtures/ServiceDocument.txt'));
$doc = $atompub->parseDocument($this->loadFixture('ServiceDocument.xml'));
static::assertInstanceOf(ServiceDocument::class, $doc);
}

/**
*
*/
public function testParseCategory()
{
$atompub = new AtomPub();
$doc = $atompub->parseDocument($this->loadFixture('CategoryDocument.xml'));
static::assertInstanceOf(CategoryDocument::class, $doc);
}

/**
*
*/
public function testParseFeed()
{
$atompub = new AtomPub();
$doc = $atompub->parseXML(file_get_contents(__DIR__ . '/fixtures/FeedDocument.xml'));
$doc = $atompub->parseDocument($this->loadFixture('FeedDocument.xml'));
static::assertInstanceOf(FeedDocument::class, $doc);
}

/**
*
*/
public function testParseEntry()
{
$atompub = new AtomPub();
$doc = $atompub->parseDocument($this->loadFixture('EntryDocument.xml'));
static::assertInstanceOf(EntryDocument::class, $doc);
}
}
56 changes: 56 additions & 0 deletions tests/Document/CategoryDocumentTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php
/**
* Atom Publishing Protocol support
*
* @author Михаил Красильников <m.krasilnikov@yandex.ru>
* @license MIT
*/
namespace Mekras\AtomPub\Tests\Document;

use Mekras\AtomPub\Document\CategoryDocument;
use Mekras\AtomPub\Tests\TestCase;

/**
* Tests for Mekras\AtomPub\Document\CategoryDocument
*
* @covers Mekras\AtomPub\Document\CategoryDocument
* @covers Mekras\AtomPub\Document\Document
*/
class CategoryDocumentTest extends TestCase
{
/**
*
*/
public function testParse()
{
$document = new CategoryDocument($this->loadFixture('CategoryDocument.xml'));
$items = $document->getCategories();

static::assertTrue($document->isFixed());
static::assertEquals('http://example.com/cats/big3', $document->getScheme());
static::assertNull($document->getHref());
static::assertCount(3, $items);
static::assertEquals('vegetable', $items[1]->getTerm());
}

/**
*
*/
public function testCreate()
{
$document = new CategoryDocument();
$document->setFixed(false);
$document->setScheme('http://example.com/cats/big3');
$document->setHref(null);
$document->addCategory('animal');
$document->addCategory('vegetable');
$document->addCategory('mineral');

$doc = $document->getDomDocument();
$doc->formatOutput = true;
static::assertEquals(
file_get_contents($this->locateFixture('CategoryDocument.txt')),
$doc->saveXML()
);
}
}
31 changes: 31 additions & 0 deletions tests/Document/EntryDocumentTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php
/**
* Atom Publishing Protocol support
*
* @author Михаил Красильников <m.krasilnikov@yandex.ru>
* @license MIT
*/
namespace Mekras\AtomPub\Tests\Document;

use Mekras\AtomPub\Document\EntryDocument;
use Mekras\AtomPub\Element\Entry;
use Mekras\AtomPub\Tests\TestCase;

/**
* Tests for Mekras\AtomPub\Document\EntryDocument
*
* @covers Mekras\AtomPub\Document\EntryDocument
*/
class EntryDocumentTest extends TestCase
{
/**
* EntryDocument::getEntry should return AtomPub version of Entry class.
*/
public function testAtomPubEntry()
{
$document = new EntryDocument($this->loadFixture('EntryDocument.xml'));
$feed = $document->getEntry();

static::assertInstanceOf(Entry::class, $feed);
}
}
31 changes: 31 additions & 0 deletions tests/Document/FeedDocumentTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php
/**
* Atom Publishing Protocol support
*
* @author Михаил Красильников <m.krasilnikov@yandex.ru>
* @license MIT
*/
namespace Mekras\AtomPub\Tests\Document;

use Mekras\AtomPub\Document\FeedDocument;
use Mekras\AtomPub\Element\Feed;
use Mekras\AtomPub\Tests\TestCase;

/**
* Tests for Mekras\AtomPub\Document\FeedDocument
*
* @covers Mekras\AtomPub\Document\FeedDocument
*/
class FeedDocumentTest extends TestCase
{
/**
* FeedDocument::getFeed should return AtomPub version of Feed class.
*/
public function testAtomPubFeed()
{
$document = new FeedDocument($this->loadFixture('FeedDocument.xml'));
$feed = $document->getFeed();

static::assertInstanceOf(Feed::class, $feed);
}
}
10 changes: 4 additions & 6 deletions tests/Document/ServiceDocumentTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,22 @@
namespace Mekras\AtomPub\Tests\Document;

use Mekras\AtomPub\Document\ServiceDocument;
use Mekras\AtomPub\Tests\TestCase;

/**
* Tests for Mekras\AtomPub\Document\ServiceDocument
*
* @covers Mekras\AtomPub\Document\ServiceDocument
* @covers Mekras\AtomPub\Document\Document
*/
class ServiceDocumentTest extends \PHPUnit_Framework_TestCase
class ServiceDocumentTest extends TestCase
{
/**
*
*/
public function testParse()
{
$doc = new \DOMDocument('1.0', 'utf-8');
$doc->load(__DIR__ . '/../fixtures/ServiceDocument.xml');

$document = new ServiceDocument($doc);
$document = new ServiceDocument($this->loadFixture('ServiceDocument.xml'));
$items = $document->getWorkspaces();

static::assertCount(2, $items);
Expand Down Expand Up @@ -69,7 +67,7 @@ public function testCreate()
$doc = $document->getDomDocument();
$doc->formatOutput = true;
static::assertEquals(
file_get_contents(__DIR__ . '/../fixtures/ServiceDocument.txt'),
file_get_contents($this->locateFixture('ServiceDocument.txt')),
$doc->saveXML()
);
}
Expand Down
8 changes: 3 additions & 5 deletions tests/Element/CollectionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,22 @@
namespace Mekras\AtomPub\Tests\Element;

use Mekras\AtomPub\Element\Collection;
use Mekras\AtomPub\Tests\TestCase;

/**
* Tests for Mekras\AtomPub\Element\Collection
*
* @covers Mekras\AtomPub\Element\Collection
* @covers Mekras\AtomPub\Element\Element
*/
class CollectionTest extends \PHPUnit_Framework_TestCase
class CollectionTest extends TestCase
{
/**
*
*/
public function testParse()
{
$doc = new \DOMDocument('1.0', 'utf-8');
$doc->load(__DIR__ . '/../fixtures/Collection.xml');

$collection = new Collection($doc->documentElement);
$collection = new Collection($this->loadFixture('Collection.xml')->documentElement);

static::assertEquals('Pictures', $collection->getTitle());
static::assertEquals('http://example.org/blog/pic', $collection->getHref());
Expand Down
Loading

0 comments on commit 2f9bdd6

Please sign in to comment.