miniflux-legacy/tests/functional/FeverApiTest.php
2016-12-29 18:04:56 -05:00

224 lines
7.8 KiB
PHP

<?php
require_once __DIR__.'/BaseApiTest.php';
class FeverApiTest extends BaseApiTest
{
public function testGetVersion()
{
$response = $this->executeFeverApiCall();
$this->assertEquals(3, $response['api_version']);
$this->assertEquals(1, $response['auth']);
$this->assertArrayHasKey('last_refreshed_on_time', $response);
}
public function testGetLinks()
{
$response = $this->executeFeverApiCall('links');
$this->assertEquals(3, $response['api_version']);
$this->assertEquals(1, $response['auth']);
$this->assertArrayHasKey('last_refreshed_on_time', $response);
$this->assertSame(array(), $response['links']);
}
public function testGetEmptyFeeds()
{
$response = $this->executeFeverApiCall('feeds');
$this->assertEquals(3, $response['api_version']);
$this->assertEquals(1, $response['auth']);
$this->assertArrayHasKey('last_refreshed_on_time', $response);
$this->assertSame(array(), $response['feeds']);
$this->assertSame(array(), $response['feeds_groups']);
}
public function testGetEmptyGroups()
{
$response = $this->executeFeverApiCall('groups');
$this->assertEquals(3, $response['api_version']);
$this->assertEquals(1, $response['auth']);
$this->assertArrayHasKey('last_refreshed_on_time', $response);
$this->assertSame(array(), $response['groups']);
$this->assertSame(array(), $response['feeds_groups']);
}
public function testGetFeedsAndGroups()
{
$this->createFeedAndGroups();
$response = $this->executeFeverApiCall('feeds');
$this->assertEquals(1, $response['feeds'][0]['id']);
$this->assertEquals(1, $response['feeds'][0]['favicon_id']);
$this->assertNotEmpty($response['feeds'][0]['title']);
$this->assertNotEmpty($response['feeds'][0]['url']);
$this->assertNotEmpty($response['feeds'][0]['site_url']);
$this->assertNotEmpty($response['feeds'][0]['last_updated_on_time']);
$this->assertEquals(0, $response['feeds'][0]['is_spark']);
$this->assertEquals(array(array('group_id' => 1, 'feed_ids' => '1')), $response['feeds_groups']);
$response = $this->executeFeverApiCall('groups');
$this->assertEquals(array(array('id' => 1, 'title' => 'open source software')), $response['groups']);
}
public function testGetFavicons()
{
$response = $this->executeFeverApiCall('favicons');
$this->assertEquals(1, $response['favicons'][0]['id']);
$this->assertNotEmpty($response['favicons'][0]['data']);
}
public function testGetItems()
{
$response = $this->executeFeverApiCall('items');
$this->assertGreaterThan(2, $response['total_items']);
$this->assertEquals(1, $response['items'][0]['id']);
$this->assertEquals(1, $response['items'][0]['feed_id']);
$this->assertNotEmpty($response['items'][0]['title']);
$this->assertNotEmpty($response['items'][0]['author']);
$this->assertNotEmpty($response['items'][0]['html']);
$this->assertNotEmpty($response['items'][0]['url']);
$this->assertEquals(0, $response['items'][0]['is_saved']);
$this->assertEquals(0, $response['items'][0]['is_read']);
$this->assertGreaterThan(0, $response['items'][0]['created_on_time']);
}
public function testGetItemsWithIds()
{
$response = $this->executeFeverApiCall('items&with_ids=2,3');
$this->assertGreaterThan(2, $response['total_items']);
$this->assertCount(2, $response['items']);
$this->assertEquals(2, $response['items'][0]['id']);
$this->assertEquals(3, $response['items'][1]['id']);
}
public function testGetItemsWithSinceId()
{
$response = $this->executeFeverApiCall('items&since_id=1');
$this->assertGreaterThan(2, $response['total_items']);
$this->assertEquals(2, $response['items'][0]['id']);
}
public function testGetUnreadItems()
{
$response = $this->executeFeverApiCall('unread_item_ids');
$this->assertStringStartsWith('1,2,', $response['unread_item_ids']);
}
public function testMarkItemAsRead()
{
$this->assertNotNull($this->executeFeverApiCall('', array(
'mark' => 'item',
'as' => 'read',
'id' => 1,
)));
$response = $this->executeFeverApiCall('items&with_ids=1');
$this->assertEquals(1, $response['items'][0]['id']);
$this->assertEquals(1, $response['items'][0]['is_read']);
}
public function testMarkItemAsSaved()
{
$this->assertNotNull($this->executeFeverApiCall('', array(
'mark' => 'item',
'as' => 'saved',
'id' => 2,
)));
$response = $this->executeFeverApiCall('items&with_ids=2');
$this->assertEquals(2, $response['items'][0]['id']);
$this->assertEquals(0, $response['items'][0]['is_read']);
$this->assertEquals(1, $response['items'][0]['is_saved']);
$response = $this->executeFeverApiCall('saved_item_ids');
$this->assertStringStartsWith('2', $response['saved_item_ids']);
}
public function testMarkItemAsUnSaved()
{
$this->assertNotNull($this->executeFeverApiCall('', array(
'mark' => 'item',
'as' => 'unsaved',
'id' => 2,
)));
$response = $this->executeFeverApiCall('items&with_ids=2');
$this->assertEquals(2, $response['items'][0]['id']);
$this->assertEquals(0, $response['items'][0]['is_read']);
$this->assertEquals(0, $response['items'][0]['is_saved']);
}
public function testMarkFeedAsRead()
{
$response = $this->executeFeverApiCall('items');
$items = $response['items'];
$nbItems = count($items);
$this->assertNotNull($this->executeFeverApiCall('', array(
'mark' => 'feed',
'as' => 'read',
'id' => 1,
'before' => $items[$nbItems - 1]['created_on_time'],
)));
$response = $this->executeFeverApiCall('items&with_ids=' . $items[$nbItems - 2]['id']);
$this->assertEquals(0, $response['items'][0]['is_read']);
$response = $this->executeFeverApiCall('items&with_ids=' . $items[$nbItems - 1]['id']);
$this->assertEquals(1, $response['items'][0]['is_read']);
}
public function testMarkGroupAsRead()
{
$this->assertNotNull($this->executeFeverApiCall('', array(
'mark' => 'group',
'as' => 'read',
'id' => 1,
'before' => time(),
)));
$response = $this->executeFeverApiCall('unread_item_ids');
$this->assertSame('', $response['unread_item_ids']);
}
protected function executeFeverApiCall($endpoint = '', array $data = array())
{
$url = FEVER_API_URL . '?api&' . $endpoint;
$headers = array(
'Content-type: application/x-www-form-urlencoded',
'Accept: application/json',
);
$payload = array(
'api_key' => $this->adminUser['fever_api_key'],
);
$context = stream_context_create(array(
'http' => array(
'method' => 'POST',
'protocol_version' => 1.1,
'timeout' => 2,
'header' => implode("\r\n", $headers),
'content' => http_build_query(array_merge($payload, $data)),
),
));
$stream = fopen($url, 'r', false, $context);
return json_decode(stream_get_contents($stream), true);
}
protected function createFeedAndGroups()
{
$this->assertNotFalse($this->getApiClient()->createFeed(array(
'url' => 'https://miniflux.net/feed',
'group_name' => 'open source software',
)));
}
}