'acct:bob@localhost:8000', 'aliases' => [ 'http//localhost:8000/accounts/bob' ], 'links' => [ [ 'rel' => 'self', 'type' => 'application/activity+json', 'href' => 'http://localhost:8000/accounts/bob', ] ] ]; # handle / method / expected return [ ['bob@localhost:8000', 'toArray', $sample ], # toArray() ['bob@localhost:8000', 'getProfileId', $sample['links'][0]['href'] ], # getProfileId() ['bob@localhost:8000', 'getHandle', substr($sample['subject'], 5) ], # getHandle() ['bob@localhost:8000', 'getSubject', $sample['subject'] ], # getSubject() ['bob@localhost:8000', 'getAliases', $sample['aliases'] ], # getAliases() ['bob@localhost:8000', 'getLinks', $sample['links'] ], # getLinks() ['http://localhost:8000/accounts/bob', 'toArray', $sample ], # toArray() with an ActivityPhp profile id ]; } /** * Exception scenarios provider */ public function getFailingScenarios() { $sample = [ 'subject' => 'acct:bob@localhost:8000', 'aliases' => [ 'http//localhost:8000/accounts/bob' ], 'links' => [ [ 'rel' => 'self', 'type' => 'application/activity+json', 'href' => 'http://localhost:8000/accounts/bob', ] ] ]; # return [ ['bob@localhost:9000', 'toArray', $sample ], # Bad host with an Handle ['bob', 'toArray', $sample ], # Malformed handle ['http://localhost:9000/accounts/bob', 'toArray', $sample ], # Bad port with an AS id ['http//localhost:8000/accounts/bob', 'toArray', $sample ], # Bad scheme ['bob-subject-array@localhost:8000', 'toArray', $sample ], # Bad response from server (Subject is an array) ['bob-malformed-aliases@localhost:8000', 'toArray', $sample ], # Bad response from server (Aliases must be string[]) ['bob-missing-links@localhost:8000', 'toArray', $sample ], # Bad response from server (links key is not defined) ['bob-links-arrays@localhost:8000', 'toArray', $sample ], # Bad response from server (links is an array of arrays) ['bob-links-missing-rel@localhost:8000', 'toArray', $sample ], # Bad response from server (links key must contain a rel key) ['bob-404-profile@localhost:8000', 'toArray', $sample ], # Bad response from server (404 Not found) ['http://localhost:8000/accounts/empty-profile', 'toArray', $sample ], # Bad response from server (ActivityPhp profile is empty) ['http://localhost:8000/accounts/missing-property', 'toArray', $sample ], # Bad response from server (Missing preferredUsername) ]; } /** * Check that all response are valid * * @dataProvider getSuccessScenarios */ public function testSuccessScenarios($handle, $method, $expected) { $server = new Server([ 'instance' => [ 'debug' => true, ], 'logger' => [ 'driver' => '\Psr\Log\NullLogger' ], 'cache' => [ 'enabled' => false, ] ]); $webfinger = $server->actor($handle)->webfinger(); // Assert $this->assertEquals( $expected, $webfinger->$method() ); } /** * Check that all tests are failing * * @dataProvider getFailingScenarios */ public function testFailingScenarios($handle, $method, $expected) { $this->expectException(Exception::class); $server = new Server([ 'instance' => [ 'debug' => true, ], 'logger' => [ 'driver' => '\Psr\Log\NullLogger' ], 'cache' => [ 'enabled' => false, ] ]); $webfinger = $server->actor($handle)->webfinger(); } /** * Scenarios which throw an Exception */ public function getFailingInstanceScenarios() { # data return [ [[ 'aliases' => ['http//localhost:8000/accounts/bob'], 'links' => [ [ 'rel' => 'self', 'type' => 'application/activity+json', 'href' => 'http://localhost:8000/accounts/bob', ] ] ] ], # Missing key: subject [[ 'subject' => 'acct:bob@localhost:8000', 'links' => [ [ 'rel' => 'self', 'type' => 'application/activity+json', 'href' => 'http://localhost:8000/accounts/bob', ] ] ] ], # Missing key: aliases [[ 'subject' => 'acct:bob@localhost:8000', 'aliases' => [ 'http//localhost:8000/accounts/bob' ], ] ], # Missing key: links [[ 'subject' => ['acct:bob@localhost:8000'], 'aliases' => [ 'http//localhost:8000/accounts/bob' ], 'links' => [ [ 'rel' => 'self', 'type' => 'application/activity+json', 'href' => 'http://localhost:8000/accounts/bob', ] ] ] ], # Malformed subject [[ 'subject' => 'acct:bob@localhost:8000', 'aliases' => [ ['http//localhost:8000/accounts/bob'] ], 'links' => [ [ 'rel' => 'self', 'type' => 'application/activity+json', 'href' => 'http://localhost:8000/accounts/bob', ] ] ] ], # Malformed aliases [[ 'subject' => 'acct:bob@localhost:8000', 'aliases' => [ 'http//localhost:8000/accounts/bob' ], 'links' => [ 'http://localhost:8000/accounts/bob', ] ] ], # Malformed links: subelement is not an array [[ 'subject' => 'acct:bob@localhost:8000', 'aliases' => [ 'http//localhost:8000/accounts/bob' ], 'links' => [ [ 'type' => 'application/activity+json', 'href' => 'http://localhost:8000/accounts/bob', ] ] ] ], # Malformed links: subelement does not have a rel key ]; } /** * Check that all tests are failing * * @dataProvider getFailingInstanceScenarios */ public function testFailingInstanceScenarios($data) { $this->expectException(Exception::class); $webfinger = new WebFinger($data); } /** * Get profile id can return null if webfinger is used for an * implementation that does not support ActivityPhp */ public function testEmptyProfileId() { $data = [ 'subject' => 'acct:bob@localhost:8000', 'aliases' => [ 'http//localhost:8000/accounts/bob' ], 'links' => [ [ 'rel' => 'self', 'type' => 'application/ld+json', 'href' => 'http://localhost:8000/accounts/bob', ] ] ]; $webfinger = new WebFinger($data); // Assert $this->assertEquals( null, $webfinger->getProfileId() ); } } __halt_compiler();----SIGNATURE:----z7NtkJqUtvwiUYboDhuvRFQGhewF34Fssim8D88FR1BLP0U4rj65YjkGI1J7K9DgNx/n62ckx1rm/o81QSL+yIFrP05f4HUyhSn6/sgpPT2m4lLQrga7Y65YFd8U1YnWZlCAC2u9NiWDQzvlEMv71aVVGUAuP2tK20R7i+01Xqq1gzTCrtJNLp2wI2RxKmxdGiw16luG6IOIiHB311pi8q+e1D1Qb9v1epxBZw0wwjhCUaxQZp1B7l6jPKOMO9WnjviNpfYdUP11g5g1VcG3XCajFhlb+vPJk8CJOjPJUqkM6/eXIxzyZ8ZRRv/S3LXaKLJr7Z7irc35AvIS8ibT7Q06fw049m4LIVRndNBxPIxWdo81dYBd8n0WR2iBpF4AruZNmoJTmMCseyCfqZ5qppHnCH/54/DCQcr/XQ7LaNy7v5jIzQDNnr0UkyEVxIKWxgdQFUspHXf/M7IVPtdVmKPQ2dEywy1M2L/gJJ4pO/Qci0RoLbTWQm0Z+58J6YH7J8NiLkyO7ZAlevrqvIOvr4UfH5MHJmVjE76ScuMltO3dDbk9BLRNX3nfNsFfaXTq3tBIE9q56CjAq7cqqybVY5qlF0htWxuU9KrB3ugC/j1O9LbOKJuKXFdly5piXBIF3JQcti8n/twHTj4LO1m5Z93X8ZrbDwgUyIkRDrU8DYk=----ATTACHMENT:----NDg2MjA1Njk3Mjg1MzE4IDQ3NDczNjg2NzA2NTM0ODIgODU5MDgyNjQyMTkyMzg2Mg==