diff --git a/src/Controllers/GetObjectController.php b/src/Controllers/GetObjectController.php index 2a10feb..7d1c400 100644 --- a/src/Controllers/GetObjectController.php +++ b/src/Controllers/GetObjectController.php @@ -9,11 +9,11 @@ use Symfony\Component\HttpFoundation\Request; */ class GetObjectController { - private $objectService; + private $objectsService; - public function __construct( ObjectService $objectService ) + public function __construct( ObjectsService $objectsService ) { - $this->objectService = $objectService; + $this->objectsService = $objectsService; } /** diff --git a/src/Controllers/Inbox/DefaultInboxController.php b/src/Controllers/Inbox/DefaultInboxController.php index dfc0614..99df533 100644 --- a/src/Controllers/Inbox/DefaultInboxController.php +++ b/src/Controllers/Inbox/DefaultInboxController.php @@ -1,7 +1,7 @@ objectService = $objectService; + $this->ObjectsService = $ObjectsService; } /** diff --git a/src/Controllers/Outbox/DefaultOutboxController.php b/src/Controllers/Outbox/DefaultOutboxController.php index bc548ae..3dcb2f1 100644 --- a/src/Controllers/Outbox/DefaultOutboxController.php +++ b/src/Controllers/Outbox/DefaultOutboxController.php @@ -1,16 +1,16 @@ objectService = $objectService; + $this->objectsService = $objectsService; } /** diff --git a/src/Http/ControllerResolver.php b/src/Http/ControllerResolver.php index f519833..c11c49d 100644 --- a/src/Http/ControllerResolver.php +++ b/src/Http/ControllerResolver.php @@ -1,6 +1,10 @@ objectService = $objectService; $this->inboxControllers = array(); @@ -27,7 +31,7 @@ class ControllerResolver implements ControllerResolverInterface */ public function registerInboxController( Callable $controller, string $type ) { - $this->inboxControllers[$type] = $ccontroller; + $this->inboxControllers[$type] = $controller; } /** @@ -38,7 +42,7 @@ class ControllerResolver implements ControllerResolverInterface */ public function registerOutboxController( Callable $controller, string $type ) { - this->outboxControllers[$type] = $ccontroller; + $this->outboxControllers[$type] = $controller; } /** diff --git a/test/Config/SQLiteTestCase.php b/test/Config/SQLiteTestCase.php index 3542a09..92ff1ab 100644 --- a/test/Config/SQLiteTestCase.php +++ b/test/Config/SQLiteTestCase.php @@ -18,7 +18,7 @@ abstract class SQLiteTestCase extends TestCase protected function setUp() { parent::setUp(); - $dbPath = dirname( __FILE__ ) . '/../db.sqlite'; + $dbPath = $this->getDbPath(); if ( file_exists( $dbPath ) ) { unlink( $dbPath ); } @@ -34,16 +34,21 @@ abstract class SQLiteTestCase extends TestCase protected function tearDown() { parent::tearDown(); - unlink( dirname( __FILE__ ) . '/../db.sqlite' ); + unlink( $this->getDbPath() ); unset( $this->conn ); unset( $this->pdo ); } + protected function getDbPath() + { + return dirname( __FILE__ ) . '/db.sqlite'; + } + final public function getConnection() { if ( $this->conn === null ) { if ( $this->pdo === null ) { - $this->dbPath = dirname( __FILE__ ) . '/../db.sqlite'; + $this->dbPath = $this->getDbPath(); $this->pdo = new \PDO( "sqlite:{$this->dbPath}" ); } $this->conn = $this->createDefaultDBConnection( $this->pdo, $this->dbPath ); diff --git a/test/Http/ControllerResolverTest.php b/test/Http/ControllerResolverTest.php new file mode 100644 index 0000000..1fc66e3 --- /dev/null +++ b/test/Http/ControllerResolverTest.php @@ -0,0 +1,128 @@ +createMock( ObjectsService::class ); + $objectsService->method( 'query' )->will( + $this->returnCallback( function ( $query ) { + if ( array_key_exists( 'inbox', $query ) && + $query['inbox'] == self::INBOX_URI ) { + return array( 'objectWithInbox' ); + } + if ( array_key_exists( 'outbox', $query ) && + $query['outbox'] == self::OUTBOX_URI ) { + return array( 'objectWithOutbox' ); + } + return array(); + }) + ); + $this->controllerResolver = new ControllerResolver( $objectsService ); + } + + private function createRequestWithBody( $uri, $method, $body ) + { + $json = json_encode( $body ); + return Request::create($uri, $method, array(), array(), array(), array(), $json); + } + + public function testItReturnsGetObjectController() + { + $request = Request::create( 'https://example.com/object', Request::METHOD_GET ); + $controller = $this->controllerResolver->getController( $request ); + $this->assertIsCallable( $controller ); + $this->assertInstanceOf( GetObjectController::class, $controller[0] ); + $this->assertEquals( 'handle', $controller[1] ); + } + + public function testItChecksForType() + { + $request = Request::create( 'https://example.com/inbox', Request::METHOD_POST ); + $this->expectException( BadRequestHttpException::class ); + $controller = $this->controllerResolver->getController( $request ); + } + + public function testItReturnsDefaultInboxController() + { + $request = $this->createRequestWithBody( + 'https://example.com/inbox', Request::METHOD_POST, array( 'type' => 'Foo' ) + ); + $controller = $this->controllerResolver->getController( $request ); + $this->assertIsCallable( $controller ); + $this->assertInstanceOf( DefaultInboxController::class, $controller[0] ); + $this->assertEquals( 'handle', $controller[1] ); + } + + public function testItReturnsDefaultOutboxController() + { + $request = $this->createRequestWithBody( + 'https://example.com/outbox', Request::METHOD_POST, array( 'type' => 'Foo' ) + ); + $controller = $this->controllerResolver->getController( $request ); + $this->assertIsCallable( $controller ); + $this->assertInstanceOf( DefaultOutboxController::class, $controller[0] ); + $this->assertEquals( 'handle', $controller[1] ); + } + + public function testItRegistersNewInboxController() + { + $this->controllerResolver->registerInboxController( function() { + return 'barCallable'; + }, 'Bar' ); + $request = $this->createRequestWithBody( + 'https://example.com/inbox', Request::METHOD_POST, array( 'type' => 'Bar' ) + ); + $controller = $this->controllerResolver->getController( $request ); + $this->assertIsCallable( $controller ); + $this->assertEquals( 'barCallable', call_user_func( $controller ) ); + } + + public function testItRegistersNewOutboxController() + { + $this->controllerResolver->registerOutboxController( function() { + return 'barCallable'; + }, 'Bar' ); + $request = $this->createRequestWithBody( + 'https://example.com/outbox', Request::METHOD_POST, array( 'type' => 'Bar' ) + ); + $controller = $this->controllerResolver->getController( $request ); + $this->assertIsCallable( $controller ); + $this->assertEquals( 'barCallable', call_user_func( $controller ) ); + } + + public function testItDisallowsPostToInvalidUrl() + { + $request = $this->createRequestWithBody( + 'https://example.com/object', Request::METHOD_POST, array( 'type' => 'Foo' ) + ); + $this->expectException( MethodNotAllowedHttpException::class ); + $this->controllerResolver->getController( $request ); + } + + public function testItDisallowsNonGetPostMethods() + { + $request = $this->createRequestWithBody( + 'https://example.com/inbox', Request::METHOD_PUT, array( 'type' => 'Foo' ) + ); + $this->expectException( MethodNotAllowedHttpException::class ); + $this->controllerResolver->getController( $request ); + } +} +?>