miniflux-legacy/tests/functional/ApiTest.php
2016-12-29 15:45:09 -05:00

208 lines
6.5 KiB
PHP

<?php
use JsonRPC\Client;
require_once __DIR__.'/BaseApiTest.php';
class ApiTest extends BaseApiTest
{
public function testGetVersion()
{
$this->assertEquals('master', $this->getApiClient()->getVersion());
}
public function testCreateUser()
{
$this->assertFalse($this->getApiClient()->createUser('admin', 'test123'));
$this->assertNotFalse($this->getApiClient()->createUser(array(
'username' => 'api_test',
'password' => 'test123',
)));
}
public function testGetUser()
{
$this->assertNull($this->getApiClient()->getUserByUsername('notfound'));
$user = $this->getApiClient()->getUserByUsername('api_test');
$this->assertEquals('api_test', $user['username']);
$this->assertFalse((bool) $user['is_admin']);
$this->assertArrayHasKey('password', $user);
$this->assertArrayHasKey('api_token', $user);
}
public function testCreateUserAsNonAdmin()
{
$user = $this->getApiClient()->getUserByUsername('api_test');
$this->setExpectedException('JsonRPC\Exception\AccessDeniedException');
$this->getApiClient($user)->createUser('someone', 'secret');
}
public function testGetUserAsNonAdmin()
{
$user = $this->getApiClient()->getUserByUsername('api_test');
$this->setExpectedException('JsonRPC\Exception\AccessDeniedException');
$this->getApiClient($user)->getUserByUsername('admin');
}
public function testCreateFeed()
{
$this->assertNotFalse($this->getApiClient()->createFeed(array(
'url' => 'https://miniflux.net/feed',
'group_name' => 'open source software',
)));
}
public function testGetAllFeeds()
{
$feeds = $this->getApiClient()->getFeeds();
$this->assertCount(1, $feeds);
$this->assertEquals(1, $feeds[0]['id']);
$this->assertEquals('https://miniflux.net/feed', $feeds[0]['feed_url']);
$this->assertTrue((bool) $feeds[0]['enabled']);
$this->assertEquals('open source software', $feeds[0]['groups'][0]['title']);
}
public function testGetFeed()
{
$this->assertNull($this->getApiClient()->getFeed(999));
$feed = $this->getApiClient()->getFeed(1);
$this->assertEquals('https://miniflux.net/feed', $feed['feed_url']);
$this->assertTrue((bool) $feed['enabled']);
$this->assertEquals('open source software', $feed['groups'][0]['title']);
}
public function testRefreshFeed()
{
$this->assertTrue($this->getApiClient()->refreshFeed(1));
}
public function testGetItems()
{
$items = $this->getApiClient()->getItems();
$this->assertNotEmpty($items);
$this->assertEquals(1, $items[0]['id']);
$this->assertEquals(1, $items[0]['feed_id']);
$this->assertNotEmpty($items[0]['title']);
$this->assertNotEmpty($items[0]['author']);
$this->assertNotEmpty($items[0]['content']);
$this->assertNotEmpty($items[0]['url']);
}
public function testGetItemsSinceId()
{
$items = $this->getApiClient()->getItems(array('since_id' => 2));
$this->assertNotEmpty($items);
$this->assertEquals(3, $items[0]['id']);
}
public function testGetSpecificItems()
{
$items = $this->getApiClient()->getItems(array('item_ids' => array(2, 3)));
$this->assertNotEmpty($items);
$this->assertEquals(2, $items[0]['id']);
$this->assertEquals(3, $items[1]['id']);
}
public function testGetItem()
{
$this->assertNull($this->getApiClient()->getItem(999));
$item = $this->getApiClient()->getItem(1);
$this->assertNotEmpty($item);
$this->assertEquals(1, $item['id']);
$this->assertEquals(1, $item['feed_id']);
$this->assertEquals('unread', $item['status']);
$this->assertNotEmpty($item['title']);
$this->assertNotEmpty($item['author']);
$this->assertNotEmpty($item['content']);
$this->assertNotEmpty($item['url']);
}
public function testChangeItemsStatus()
{
$this->assertTrue($this->getApiClient()->changeItemsStatus(array(1), 'read'));
$item = $this->getApiClient()->getItem(1);
$this->assertEquals('read', $item['status']);
$item = $this->getApiClient()->getItem(2);
$this->assertEquals('unread', $item['status']);
}
public function testAddBookmark()
{
$this->assertTrue($this->getApiClient()->addBookmark(1));
$item = $this->getApiClient()->getItem(1);
$this->assertTrue((bool) $item['bookmark']);
}
public function testRemoveBookmark()
{
$this->assertTrue($this->getApiClient()->removeBookmark(1));
$item = $this->getApiClient()->getItem(1);
$this->assertFalse((bool) $item['bookmark']);
}
public function testGetGroups()
{
$groups = $this->getApiClient()->getGroups();
$this->assertCount(1, $groups);
$this->assertEquals(1, $groups[0]['id']);
$this->assertEquals(1, $groups[0]['user_id']);
$this->assertEquals('open source software', $groups[0]['title']);
}
public function testCreateGroup()
{
$this->assertEquals(2, $this->getApiClient()->createGroup('foobar'));
$this->assertEquals(2, $this->getApiClient()->createGroup('foobar'));
$groups = $this->getApiClient()->getGroups();
$this->assertCount(2, $groups);
}
public function testSetFeedGroups()
{
$this->assertTrue($this->getApiClient()->setFeedGroups(1, array(2)));
$feed = $this->getApiClient()->getFeed(1);
$this->assertCount(1, $feed['groups']);
$this->assertEquals('foobar', $feed['groups'][0]['title']);
}
public function testGetFavicons()
{
$favicons = $this->getApiClient()->getFavicons();
$this->assertCount(1, $favicons);
$this->assertEquals(1, $favicons[0]['feed_id']);
$this->assertNotEmpty($favicons[0]['hash']);
$this->assertNotEmpty($favicons[0]['type']);
$this->assertNotEmpty($favicons[0]['data_url']);
}
public function testDeleteFeed()
{
$this->assertTrue($this->getApiClient()->removeFeed(1));
}
protected function getApiClient(array $user = array())
{
if (empty($user)) {
$user = $this->adminUser;
}
$apiUserClient = new Client(API_URL);
$apiUserClient->authentication($user['username'], $user['api_token']);
return $apiUserClient;
}
}