3 namespace Friendica\Test\src\Module\Api;
5 use Friendica\App\Arguments;
6 use Friendica\Core\L10n;
7 use Friendica\Test\MockedTest;
8 use Friendica\Test\Util\ApiResponseDouble;
9 use Psr\Log\NullLogger;
11 class ApiResponseTest extends MockedTest
13 protected function tearDown(): void
15 ApiResponseDouble::reset();
20 public function testErrorWithJson()
22 $l10n = \Mockery::mock(L10n::class);
23 $args = \Mockery::mock(Arguments::class);
24 $args->shouldReceive('getQueryString')->andReturn('');
25 $baseUrl = \Mockery::mock(Friendica\App\BaseURL::class);
26 $twitterUser = \Mockery::mock(Friendica\Factory\Api\Twitter\User::class);
28 $response = new ApiResponseDouble($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
29 $response->error(200, 'OK', 'error_message', 'json');
31 self::assertEquals('{"error":"error_message","code":"200 OK","request":""}', ApiResponseDouble::getOutput());
34 public function testErrorWithXml()
36 $l10n = \Mockery::mock(L10n::class);
37 $args = \Mockery::mock(Arguments::class);
38 $args->shouldReceive('getQueryString')->andReturn('');
39 $baseUrl = \Mockery::mock(Friendica\App\BaseURL::class);
40 $twitterUser = \Mockery::mock(Friendica\Factory\Api\Twitter\User::class);
42 $response = new ApiResponseDouble($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
43 $response->error(200, 'OK', 'error_message', 'xml');
45 self::assertEquals('<?xml version="1.0"?>' . "\n" .
46 '<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" ' .
47 'xmlns:friendica="http://friendi.ca/schema/api/1/" ' .
48 'xmlns:georss="http://www.georss.org/georss">' . "\n" .
49 ' <error>error_message</error>' . "\n" .
50 ' <code>200 OK</code>' . "\n" .
51 ' <request/>' . "\n" .
53 ApiResponseDouble::getOutput());
56 public function testErrorWithRss()
58 $l10n = \Mockery::mock(L10n::class);
59 $args = \Mockery::mock(Arguments::class);
60 $args->shouldReceive('getQueryString')->andReturn('');
61 $baseUrl = \Mockery::mock(Friendica\App\BaseURL::class);
62 $twitterUser = \Mockery::mock(Friendica\Factory\Api\Twitter\User::class);
64 $response = new ApiResponseDouble($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
65 $response->error(200, 'OK', 'error_message', 'rss');
68 '<?xml version="1.0"?>' . "\n" .
69 '<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" ' .
70 'xmlns:friendica="http://friendi.ca/schema/api/1/" ' .
71 'xmlns:georss="http://www.georss.org/georss">' . "\n" .
72 ' <error>error_message</error>' . "\n" .
73 ' <code>200 OK</code>' . "\n" .
74 ' <request/>' . "\n" .
76 ApiResponseDouble::getOutput());
79 public function testErrorWithAtom()
81 $l10n = \Mockery::mock(L10n::class);
82 $args = \Mockery::mock(Arguments::class);
83 $args->shouldReceive('getQueryString')->andReturn('');
84 $baseUrl = \Mockery::mock(Friendica\App\BaseURL::class);
85 $twitterUser = \Mockery::mock(Friendica\Factory\Api\Twitter\User::class);
87 $response = new ApiResponseDouble($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
88 $response->error(200, 'OK', 'error_message', 'atom');
91 '<?xml version="1.0"?>' . "\n" .
92 '<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" ' .
93 'xmlns:friendica="http://friendi.ca/schema/api/1/" ' .
94 'xmlns:georss="http://www.georss.org/georss">' . "\n" .
95 ' <error>error_message</error>' . "\n" .
96 ' <code>200 OK</code>' . "\n" .
97 ' <request/>' . "\n" .
99 ApiResponseDouble::getOutput());
102 public function testUnsupported()
104 $l10n = \Mockery::mock(L10n::class);
105 $l10n->shouldReceive('t')->andReturnUsing(function ($args) {
108 $args = \Mockery::mock(Arguments::class);
109 $args->shouldReceive('getQueryString')->andReturn('');
110 $baseUrl = \Mockery::mock(Friendica\App\BaseURL::class);
111 $twitterUser = \Mockery::mock(Friendica\Factory\Api\Twitter\User::class);
113 $response = new ApiResponseDouble($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
114 $response->unsupported();
116 self::assertEquals('{"error":"API endpoint %s %s is not implemented","error_description":"The API endpoint is currently not implemented but might be in the future."}', ApiResponseDouble::getOutput());