3 namespace Friendica\Test\src\Module\Api;
5 use Friendica\App\Arguments;
6 use Friendica\App\BaseURL;
7 use Friendica\Core\L10n;
8 use Friendica\Factory\Api\Twitter\User;
9 use Friendica\Module\Api\ApiResponse;
10 use Friendica\Test\MockedTest;
11 use Psr\Log\NullLogger;
13 class ApiResponseTest extends MockedTest
15 public function testErrorWithJson()
17 $l10n = \Mockery::mock(L10n::class);
18 $args = \Mockery::mock(Arguments::class);
19 $args->shouldReceive('getQueryString')->andReturn('');
20 $baseUrl = \Mockery::mock(BaseURL::class);
21 $twitterUser = \Mockery::mock(User::class);
23 $response = new ApiResponse($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
24 $response->error(200, 'OK', 'error_message', 'json');
26 self::assertEquals('{"error":"error_message","code":"200 OK","request":""}', $response->getContent());
29 public function testErrorWithXml()
31 $l10n = \Mockery::mock(L10n::class);
32 $args = \Mockery::mock(Arguments::class);
33 $args->shouldReceive('getQueryString')->andReturn('');
34 $baseUrl = \Mockery::mock(BaseURL::class);
35 $twitterUser = \Mockery::mock(User::class);
37 $response = new ApiResponse($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
38 $response->error(200, 'OK', 'error_message', 'xml');
40 self::assertEquals(['Content-type' => 'text/xml', 'HTTP/1.1 200 OK'], $response->getHeaders());
41 self::assertEquals('<?xml version="1.0"?>' . "\n" .
42 '<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" ' .
43 'xmlns:friendica="http://friendi.ca/schema/api/1/" ' .
44 'xmlns:georss="http://www.georss.org/georss">' . "\n" .
45 ' <error>error_message</error>' . "\n" .
46 ' <code>200 OK</code>' . "\n" .
47 ' <request/>' . "\n" .
49 $response->getContent());
52 public function testErrorWithRss()
54 $l10n = \Mockery::mock(L10n::class);
55 $args = \Mockery::mock(Arguments::class);
56 $args->shouldReceive('getQueryString')->andReturn('');
57 $baseUrl = \Mockery::mock(BaseURL::class);
58 $twitterUser = \Mockery::mock(User::class);
60 $response = new ApiResponse($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
61 $response->error(200, 'OK', 'error_message', 'rss');
63 self::assertEquals(['Content-type' => 'application/rss+xml', 'HTTP/1.1 200 OK'], $response->getHeaders());
65 '<?xml version="1.0"?>' . "\n" .
66 '<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" ' .
67 'xmlns:friendica="http://friendi.ca/schema/api/1/" ' .
68 'xmlns:georss="http://www.georss.org/georss">' . "\n" .
69 ' <error>error_message</error>' . "\n" .
70 ' <code>200 OK</code>' . "\n" .
71 ' <request/>' . "\n" .
73 $response->getContent());
76 public function testErrorWithAtom()
78 $l10n = \Mockery::mock(L10n::class);
79 $args = \Mockery::mock(Arguments::class);
80 $args->shouldReceive('getQueryString')->andReturn('');
81 $baseUrl = \Mockery::mock(BaseURL::class);
82 $twitterUser = \Mockery::mock(User::class);
84 $response = new ApiResponse($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
85 $response->error(200, 'OK', 'error_message', 'atom');
87 self::assertEquals(['Content-type' => 'application/atom+xml', 'HTTP/1.1 200 OK'], $response->getHeaders());
89 '<?xml version="1.0"?>' . "\n" .
90 '<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" ' .
91 'xmlns:friendica="http://friendi.ca/schema/api/1/" ' .
92 'xmlns:georss="http://www.georss.org/georss">' . "\n" .
93 ' <error>error_message</error>' . "\n" .
94 ' <code>200 OK</code>' . "\n" .
95 ' <request/>' . "\n" .
97 $response->getContent());
100 public function testUnsupported()
102 $l10n = \Mockery::mock(L10n::class);
103 $l10n->shouldReceive('t')->andReturnUsing(function ($args) {
106 $args = \Mockery::mock(Arguments::class);
107 $args->shouldReceive('getQueryString')->andReturn('');
108 $baseUrl = \Mockery::mock(BaseURL::class);
109 $twitterUser = \Mockery::mock(User::class);
111 $response = new ApiResponse($l10n, $args, new NullLogger(), $baseUrl, $twitterUser);
112 $response->unsupported();
114 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."}', $response->getContent());