mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-09 19:13:26 +00:00
439 lines
20 KiB
PHP
439 lines
20 KiB
PHP
<?php
|
|
|
|
require_once __DIR__ . '/../../../../PhraseanetWebTestCaseAuthenticatedAbstract.class.inc';
|
|
require_once __DIR__ . '/../../../../Bridge/Bridge_datas.inc';
|
|
|
|
use Silex\WebTestCase;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
class BridgeApplication extends PhraseanetWebTestCaseAuthenticatedAbstract
|
|
{
|
|
|
|
public static $account = null;
|
|
public static $api = null;
|
|
protected $client;
|
|
protected static $need_records = 1;
|
|
|
|
public static function setUpBeforeClass()
|
|
{
|
|
parent::setUpBeforeClass();
|
|
}
|
|
|
|
public static function tearDownAfterClass()
|
|
{
|
|
parent::tearDownAfterClass();
|
|
}
|
|
|
|
public function setUp()
|
|
{
|
|
parent::setUp();
|
|
$this->client = $this->createClient();
|
|
try
|
|
{
|
|
self::$api = Bridge_Api::get_by_api_name(appbox::get_instance(\bootstrap::getCore()), 'apitest');
|
|
}
|
|
catch (Bridge_Exception_ApiNotFound $e)
|
|
{
|
|
self::$api = Bridge_Api::create(appbox::get_instance(\bootstrap::getCore()), 'apitest');
|
|
}
|
|
|
|
try
|
|
{
|
|
self::$account = Bridge_Account::load_account_from_distant_id(appbox::get_instance(\bootstrap::getCore()), self::$api, self::$user, 'kirikoo');
|
|
}
|
|
catch (Bridge_Exception_AccountNotFound $e)
|
|
{
|
|
self::$account = Bridge_Account::create(appbox::get_instance(\bootstrap::getCore()), self::$api, self::$user, 'kirikoo', 'coucou');
|
|
}
|
|
}
|
|
|
|
public function tearDown()
|
|
{
|
|
parent::tearDown();
|
|
if (self::$api instanceof Bridge_Api)
|
|
self::$api->delete();
|
|
if (self::$account instanceof Bridge_Account)
|
|
self::$account->delete();
|
|
}
|
|
|
|
public function createApplication()
|
|
{
|
|
return include realpath(__DIR__ . '/../../../../../Alchemy/Phrasea/Application/Prod.php');
|
|
}
|
|
|
|
/**
|
|
* @todo create a new basket dont take an existing one
|
|
*/
|
|
public function testManager()
|
|
{
|
|
$appbox = appbox::get_instance(\bootstrap::getCore());
|
|
$accounts = Bridge_Account::get_accounts_by_user($appbox, self::$user);
|
|
$usr_id = self::$user->get_id();
|
|
|
|
$basket = $this->insertOneBasket();
|
|
|
|
$crawler = $this->client->request('POST', '/bridge/manager/', array('ssel' => $basket->getId()));
|
|
$pageContent = $this->client->getResponse()->getContent();
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
}
|
|
|
|
public function testLogin()
|
|
{
|
|
$this->client->request('GET', '/bridge/login/Apitest/');
|
|
$test = new Bridge_Api_Apitest(registry::get_instance(), new Bridge_Api_Auth_None());
|
|
$this->assertTrue($this->client->getResponse()->getStatusCode() == 302);
|
|
$this->assertTrue($this->client->getResponse()->isRedirect($test->get_auth_url()));
|
|
}
|
|
|
|
public function testCallBackFailed()
|
|
{
|
|
$appbox = appbox::get_instance(\bootstrap::getCore());
|
|
$session = $appbox->get_session();
|
|
$crawler = $this->client->request('GET', '/bridge/callback/unknow_api/');
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
}
|
|
|
|
public function testCallBackAccountAlreadyDefined()
|
|
{
|
|
$appbox = appbox::get_instance(\bootstrap::getCore());
|
|
$crawler = $this->client->request('GET', '/bridge/callback/apitest/');
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
$pageContent = $this->client->getResponse()->getContent();
|
|
//check for errors in the crawler
|
|
$phpunit = $this;
|
|
$crawler
|
|
->filter('div')
|
|
->reduce(function ($node, $i) use ($phpunit)
|
|
{
|
|
if (!$node->getAttribute('class'))
|
|
{
|
|
return false;
|
|
}
|
|
elseif ($node->getAttribute('class') == 'error_auth')
|
|
{
|
|
$phpunit->fail("Erreur callback");
|
|
}
|
|
});
|
|
$settings = self::$account->get_settings();
|
|
$this->assertEquals("kikoo", $settings->get("auth_token"));
|
|
$this->assertEquals("kooki", $settings->get("refresh_token"));
|
|
$this->assertEquals("biloute", $settings->get("access_token"));
|
|
$settings->delete("auth_token");
|
|
$settings->delete("refresh_token");
|
|
$settings->delete("access_token");
|
|
}
|
|
|
|
public function testCallBackAccountNoDefined()
|
|
{
|
|
if (self::$account instanceof Bridge_Account)
|
|
self::$account->delete();
|
|
$crawler = $this->client->request('GET', '/bridge/callback/apitest/');
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
$phpunit = $this;
|
|
$crawler
|
|
->filter('div')
|
|
->reduce(function ($node, $i) use ($phpunit)
|
|
{
|
|
if (!$node->getAttribute('class'))
|
|
{
|
|
return false;
|
|
}
|
|
elseif ($node->getAttribute('class') == 'error_auth')
|
|
{
|
|
$phpunit->fail("Erreur callback");
|
|
}
|
|
});
|
|
try
|
|
{
|
|
self::$account = Bridge_Account::load_account_from_distant_id(appbox::get_instance(\bootstrap::getCore()), self::$api, self::$user, 'kirikoo');
|
|
$settings = self::$account->get_settings();
|
|
$this->assertEquals("kikoo", $settings->get("auth_token"));
|
|
$this->assertEquals("kooki", $settings->get("refresh_token"));
|
|
$this->assertEquals("biloute", $settings->get("access_token"));
|
|
$settings->delete("auth_token");
|
|
$settings->delete("refresh_token");
|
|
$settings->delete("access_token");
|
|
}
|
|
catch (Bridge_Exception_AccountNotFound $e)
|
|
{
|
|
$this->fail("No account created after callback");
|
|
}
|
|
|
|
if (!self::$account instanceof Bridge_Account)
|
|
self::$account = Bridge_Account::create(appbox::get_instance(\bootstrap::getCore()), self::$api, self::$user, 'kirikoo', 'coucou');
|
|
}
|
|
|
|
public function testLogout()
|
|
{
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull"); //connected
|
|
$url = sprintf('/bridge/adapter/%d/logout/', self::$account->get_id());
|
|
$this->client->request('GET', $url);
|
|
$redirect = sprintf("/prod/bridge/adapter/%s/load-elements/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$this->assertTrue($this->client->getResponse()->isRedirect($redirect));
|
|
$this->assertNull(self::$account->get_settings()->get("auth_token"));
|
|
}
|
|
|
|
public function testLoadElements()
|
|
{
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull"); //connected
|
|
$url = sprintf("/bridge/adapter/%s/load-elements/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$account = new Bridge_Account(appbox::get_instance(\bootstrap::getCore()), self::$api, self::$account->get_id());
|
|
$crawler = $this->client->request('GET', $url, array("page" => 1));
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
$this->assertNotContains(self::$account->get_api()->generate_login_url(registry::get_instance(), self::$account->get_api()->get_connector()->get_name()), $this->client->getResponse()->getContent());
|
|
}
|
|
|
|
public function testLoadRecords()
|
|
{
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull"); //connected
|
|
$url = sprintf("/bridge/adapter/%s/load-records/", self::$account->get_id());
|
|
$crawler = $this->client->request('GET', $url, array("page" => 1));
|
|
$elements = Bridge_Element::get_elements_by_account(appbox::get_instance(\bootstrap::getCore()), self::$account);
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
$this->assertEquals(sizeof($elements), $crawler->filterXPath("//table/tr")->count());
|
|
$this->assertNotContains(self::$account->get_api()->generate_login_url(registry::get_instance(), self::$account->get_api()->get_connector()->get_name()), $this->client->getResponse()->getContent());
|
|
}
|
|
|
|
public function testLoadRecordsDisconnected()
|
|
{
|
|
$this->client->followRedirects();
|
|
self::$account->get_settings()->set("auth_token", null); //deconnected
|
|
$url = sprintf("/bridge/adapter/%s/load-records/", self::$account->get_id());
|
|
$crawler = $this->client->request('GET', $url, array("page" => 1));
|
|
$pageContent = $this->client->getResponse()->getContent();
|
|
$this->assertContains($url, $pageContent);
|
|
$this->deconnected($crawler, $pageContent);
|
|
}
|
|
|
|
public function testLoadContainers()
|
|
{
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull"); //connected
|
|
$url = sprintf("/bridge/adapter/%s/load-containers/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_container_type());
|
|
$crawler = $this->client->request('GET', $url, array("page" => 1));
|
|
$elements = Bridge_Element::get_elements_by_account(appbox::get_instance(\bootstrap::getCore()), self::$account);
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
$this->assertNotContains(self::$account->get_api()->generate_login_url(registry::get_instance(), self::$account->get_api()->get_connector()->get_name()), $this->client->getResponse()->getContent());
|
|
}
|
|
|
|
public function testLoadContainersDisconnected()
|
|
{
|
|
$this->client->followRedirects();
|
|
self::$account->get_settings()->set("auth_token", null); //deconnected
|
|
$url = sprintf("/bridge/adapter/%s/load-containers/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_container_type());
|
|
$crawler = $this->client->request('GET', $url, array("page" => 1));
|
|
$pageContent = $this->client->getResponse()->getContent();
|
|
$this->assertContains($url, $pageContent);
|
|
$this->deconnected($crawler, $pageContent);
|
|
}
|
|
|
|
public function testLoadElementsDisconnected()
|
|
{
|
|
$this->client->followRedirects();
|
|
self::$account->get_settings()->set("auth_token", null); //deconnected
|
|
$url = sprintf("/bridge/adapter/%s/load-elements/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$crawler = $this->client->request('GET', $url, array("page" => 1));
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
$pageContent = $this->client->getResponse()->getContent();
|
|
$this->assertContains($url, $pageContent);
|
|
$this->deconnected($crawler, $pageContent);
|
|
}
|
|
|
|
public function testLogoutDeconnected()
|
|
{
|
|
$this->client->followRedirects();
|
|
self::$account->get_settings()->set("auth_token", null); //deconnected
|
|
$url = sprintf('/bridge/adapter/%d/logout/', self::$account->get_id());
|
|
$crawler = $this->client->request('GET', $url);
|
|
$pageContent = $this->client->getResponse()->getContent();
|
|
$this->assertContains("/adapter/" . self::$account->get_id() . "/logout/", $pageContent);
|
|
$this->deconnected($crawler, $pageContent);
|
|
}
|
|
|
|
public function testActionDeconnected()
|
|
{
|
|
$this->client->followRedirects();
|
|
self::$account->get_settings()->set("auth_token", null); //deconnected
|
|
$url = sprintf("/bridge/action/%s/une action/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$crawler = $this->client->request('GET', $url);
|
|
$pageContent = $this->client->getResponse()->getContent();
|
|
$this->assertContains($url, $pageContent);
|
|
$this->deconnected($crawler, $pageContent);
|
|
}
|
|
|
|
public function testActionUnknow()
|
|
{
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull"); //connected
|
|
$url = sprintf("/bridge/action/%s/ajjfhfjozqd/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
try
|
|
{
|
|
$crawler = $this->client->request('GET', $url, array("elements_list" => "1;2;3"));
|
|
$this->fail("expected Exception here");
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
|
|
}
|
|
|
|
try
|
|
{
|
|
$crawler = $this->client->request('POST', $url, array("elements_list" => "1;2;3"));
|
|
$this->fail("expected Exception here");
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
public function testActionModifyTooManyElements()
|
|
{
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull"); //connected
|
|
$url = sprintf("/bridge/action/%s/modify/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$crawler = $this->client->request('GET', $url, array("element_list" => "1_2;1_3;1_4"));
|
|
$redirect = sprintf("/prod/bridge/adapter/%s/load-elements/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$this->assertTrue($this->client->getResponse()->isRedirect());
|
|
$this->assertContains($redirect, $this->client->getResponse()->headers->get("location"));
|
|
$this->assertContains("error=", $this->client->getResponse()->headers->get("location"));
|
|
$this->assertNotContains(self::$account->get_api()->generate_login_url(registry::get_instance(), self::$account->get_api()->get_connector()->get_name()), $this->client->getResponse()->getContent());
|
|
|
|
$this->client->request('POST', $url, array("element_list" => "1_2;1_3;1_4"));
|
|
$this->assertTrue($this->client->getResponse()->isRedirect());
|
|
}
|
|
|
|
public function testActionModifyElement()
|
|
{
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull"); //connected
|
|
$url = sprintf("/bridge/action/%s/modify/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$crawler = $this->client->request('GET', $url, array("elements_list" => "element123qcs789"));
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
$this->assertNotContains(self::$account->get_api()->generate_login_url(registry::get_instance(), self::$account->get_api()->get_connector()->get_name()), $this->client->getResponse()->getContent());
|
|
|
|
$this->client->request('POST', $url, array("elements_list" => "element123qcs789"));
|
|
$this->assertTrue($this->client->getResponse()->isRedirect());
|
|
}
|
|
|
|
public function testActionModifyElementError()
|
|
{
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull");
|
|
Bridge_Api_Apitest::$hasError = true;
|
|
$url = sprintf("/bridge/action/%s/modify/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$this->client->request('POST', $url, array("elements_list" => "element123qcs789"));
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
}
|
|
|
|
public function testActionModifyElementException()
|
|
{
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull");
|
|
Bridge_Api_Apitest::$hasException = true;
|
|
$url = sprintf("/bridge/action/%s/modify/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$this->client->request('POST', $url, array("elements_list" => "element123qcs789"));
|
|
$this->assertTrue($this->client->getResponse()->isRedirect());
|
|
$this->assertRegexp('/error/', $this->client->getResponse()->headers->get('location'));
|
|
}
|
|
|
|
public function testActionDeleteElement()
|
|
{
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull");
|
|
$url = sprintf("/bridge/action/%s/deleteelement/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$this->client->request('GET', $url, array("elements_list" => "element123qcs789"));
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
|
|
Bridge_Api_Apitest::$hasException = true;
|
|
$url = sprintf("/bridge/action/%s/deleteelement/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$this->client->request('POST', $url, array("elements_list" => "element123qcs789"));
|
|
$this->assertTrue($this->client->getResponse()->isRedirect());
|
|
$this->assertRegexp('/error/', $this->client->getResponse()->headers->get('location'));
|
|
|
|
$url = sprintf("/bridge/action/%s/deleteelement/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$this->client->request('POST', $url, array("elements_list" => "element123qcs789"));
|
|
$this->assertTrue($this->client->getResponse()->isRedirect());
|
|
}
|
|
|
|
public function testActionCreateContainer()
|
|
{
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull"); //connected
|
|
|
|
$url = sprintf("/bridge/action/%s/createcontainer/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_container_type());
|
|
$this->client->request('GET', $url);
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
|
|
|
|
Bridge_Api_Apitest::$hasException = true;
|
|
$url = sprintf("/bridge/action/%s/createcontainer/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$this->client->request('POST', $url);
|
|
$this->assertTrue($this->client->getResponse()->isRedirect());
|
|
$this->assertRegexp('/error/', $this->client->getResponse()->headers->get('location'));
|
|
|
|
$url = sprintf("/bridge/action/%s/createcontainer/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_container_type());
|
|
$this->client->request('POST', $url, array('title' => 'test', 'description' => 'description'));
|
|
$this->assertTrue($this->client->getResponse()->isRedirect());
|
|
$this->assertRegexp('/success/', $this->client->getResponse()->headers->get('location'));
|
|
}
|
|
|
|
/**
|
|
* @todo no templates declared for modify a container in any apis
|
|
*/
|
|
public function testActionModifyContainer()
|
|
{
|
|
$this->markTestSkipped("No templates declared for modify a container in any apis");
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull"); //connected
|
|
$url = sprintf("/bridge/action/%s/modify/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_container_type());
|
|
$crawler = $this->client->request('GET', $url, array("elements_list" => "containerudt456shn"));
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
$pageContent = $this->client->getResponse()->getContent();
|
|
$this->assertNotContains(self::$account->get_api()->generate_login_url(registry::get_instance(), self::$account->get_api()->get_connector()->get_name()), $this->client->getResponse()->getContent());
|
|
|
|
$this->client->request('POST', $url, array("elements_list" => "containerudt456shn"));
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
}
|
|
|
|
public function testActionMoveInto()
|
|
{
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull"); //connected
|
|
$url = sprintf("/bridge/action/%s/moveinto/%s/", self::$account->get_id(), self::$account->get_api()->get_connector()->get_default_element_type());
|
|
$crawler = $this->client->request('GET', $url, array("elements_list" => "containerudt456shn", 'destination' => self::$account->get_api()->get_connector()->get_default_container_type()));
|
|
$this->assertNotContains("http://dev.phrasea.net/prod/bridge/login/youtube/", $this->client->getResponse()->getContent());
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
|
|
$this->client->request('POST', $url, array("elements_list" => "containerudt456shn", 'destination' => self::$account->get_api()->get_connector()->get_default_container_type()));
|
|
$this->assertRegexp('/success/', $this->client->getResponse()->headers->get('location'));
|
|
$this->assertTrue($this->client->getResponse()->isRedirect());
|
|
|
|
Bridge_Api_Apitest::$hasException = true;
|
|
$this->client->request('POST', $url, array("elements_list" => "containerudt456shn", 'destination' => self::$account->get_api()->get_connector()->get_default_container_type()));
|
|
$this->assertRegexp('/error/', $this->client->getResponse()->headers->get('location'));
|
|
$this->assertTrue($this->client->getResponse()->isRedirect());
|
|
}
|
|
|
|
public function deconnected($crawler, $pageContent)
|
|
{
|
|
$this->assertTrue($this->client->getResponse()->isOk());
|
|
$this->assertContains("prod/bridge/login/" . mb_strtolower(self::$account->get_api()->get_connector()->get_name()) . "/", $pageContent);
|
|
}
|
|
|
|
public function testUpload()
|
|
{
|
|
self::$account->get_settings()->set("auth_token", "somethingNotNull");
|
|
$url = "/bridge/upload/";
|
|
$this->client->request('GET', $url, array("account_id" => self::$account->get_id()));
|
|
|
|
$response = $this->client->getResponse();
|
|
$this->assertTrue($response->isOk());
|
|
|
|
$records = array(
|
|
self::$record_1->get_serialize_key()
|
|
);
|
|
|
|
Bridge_Api_Apitest::$hasError = true;
|
|
$lst = implode(';', $records);
|
|
$this->client->request('POST', $url, array("account_id" => self::$account->get_id(), 'lst' => $lst));
|
|
$response = $this->client->getResponse();
|
|
$this->assertTrue($response->isOk());
|
|
|
|
$this->client->request('POST', $url, array("account_id" => self::$account->get_id(), 'lst' => $lst));
|
|
$response = $this->client->getResponse();
|
|
$this->assertTrue($response->isRedirect());
|
|
}
|
|
|
|
}
|