diff --git a/tests/Phabricator/ProjectsMapTest.php b/tests/Phabricator/ProjectsMapTest.php new file mode 100644 --- /dev/null +++ b/tests/Phabricator/ProjectsMapTest.php @@ -0,0 +1,137 @@ +<?php + +namespace Nasqueron\Notifications\Tests\Phabricator; + +use Nasqueron\Notifications\Phabricator\ProjectsMap; +use Nasqueron\Notifications\Tests\TestCase; + +class ProjectsMapTest extends TestCase { + + /** + * @var Nasqueron\Notifications\Phabricator\ProjectsMap + */ + private $map; + + public function setUp () { + parent::setUp(); + + // + // We mock the API, so an imaginary instance of Phabricator + // will return 3 results: Accounts, Agora & architecture. + // + // Agora has the key 'PHID-PROJ-cztcgpvqr6smnnekotq7'. + // + + $this->mockPhabricatorAPIForProjectsMap(); + $this->map = ProjectsMap::fetch("http://phabricator.acme.tld"); + } + + public function testIteratorIsTraversable () { + $this->assertInstanceOf( + "Traversable", + $this->map->getIterator() + ); + } + + /// + /// Tests for ArrayAccess + /// + + public function testOffsetExistsWhenItDoes () { + $this->assertTrue( + $this->map->offsetExists('PHID-PROJ-cztcgpvqr6smnnekotq7') + ); + } + + public function testOffsetExistsWhenItDoesNot () { + $this->assertFalse( + $this->map->offsetExists('non-existing-key') + ); + } + + public function testOffsetGetWhenItDoesExist () { + $this->assertSame( + "Agora", + $this->map->offsetGet('PHID-PROJ-cztcgpvqr6smnnekotq7') + ); + } + + /** + * @expectedException ErrorException + */ + public function testOffsetGetWhenItDoesNotExist () { + $this->map->offsetGet('non-existing-key'); + } + + /** + * @covers Nasqueron\Notifications\Phabricator\ProjectsMap::offsetSet + */ + public function testOffsetSet () { + $this->map->offsetSet('newkey', 'quux'); + $this->assertSame('quux', $this->map->offsetGet('newkey')); + } + + /** + * @covers Nasqueron\Notifications\Phabricator\ProjectsMap::offsetUnset + */ + public function testOffsetUnset () { + unset($this->map['PHID-PROJ-cztcgpvqr6smnnekotq7']); + $this->assertFalse( + $this->map->offsetExists('PHID-PROJ-cztcgpvqr6smnnekotq7') + ); + } + + /// + /// Tests for cache + /// + + /// + /// Tests for helper methods + /// + + public function testGetProjectName () { + $this->assertSame( + "Agora", + $this->map->getProjectName('PHID-PROJ-cztcgpvqr6smnnekotq7') + ); + } + + public function testGetProjectNameForNewInstance () { + $map = new ProjectsMap("http://phabricator.acme.tld"); + $this->assertSame( + "Agora", + $map->getProjectName('PHID-PROJ-cztcgpvqr6smnnekotq7') + ); + } + + public function testGetProjectNameWhenItDoesNotExist () { + $this->assertSame( + "", + $this->map->getProjectName('non-existing-key') + ); + } + + public function testToArrayProducesArray () { + $array = $this->map->toArray(); + $this->assertTrue( + is_array($array), + "Test if toArray return an array" + ); + } + + public function testThatArrayCount () { + $array = $this->map->toArray(); + $this->assertSame(3, count($array)); + } + + public function testThatArrayContainsExpectedData () { + $this->assertSame( + [ + ["PHID-PROJ-6dg6ogx5pjmk24ur4tp4", "Accounts"], + ["PHID-PROJ-cztcgpvqr6smnnekotq7", "Agora"], + ["PHID-PROJ-3iew3cqf3htpazfyzb5a", "architecture"] + ], + $this->map->toArray() + ); + } +}