*/ class ApiTest extends \PHPUnit_Framework_TestCase { /** * Define id to create object */ protected function setUp() { $this->application_key = 'app_key'; $this->application_secret = 'app_secret'; $this->consumer_key = 'consumer'; $this->endpoint = 'ovh-eu'; $this->client = new Client(); } /** * Get private and protected method to unit test it */ protected static function getPrivateMethod($name) { $class = new \ReflectionClass('Ovh\Api'); $method = $class->getMethod($name); $method->setAccessible(true); return $method; } protected static function getPrivateProperty($name) { $class = new \ReflectionClass('Ovh\Api'); $property = $class->getProperty($name); $property->setAccessible(true); return $property; } /** * Test the compute of time delta */ public function testTimeDeltaCompute() { $delay = 10; $mock = new Mock([ "HTTP/1.1 200 OK\r\n\r\n". (time()-$delay), ]); $this->client->getEmitter()->attach($mock); $invoker = self::getPrivateMethod('calculateTimeDelta'); $property = self::getPrivateProperty('time_delta'); $api = new Api($this->application_key, $this->application_secret, $this->endpoint, $this->consumer_key, $this->client); $invoker->invokeArgs($api, array()) ; $time_delta = $property->getValue($api); $this->assertNotNull($time_delta); $this->assertEquals($time_delta, $delay * -1 ); } /** * Test if consumer key is replaced */ public function testIfConsumerKeyIsReplace() { $delay = 10; $mock = new Mock([ "HTTP/1.1 200 OK\r\n\r\n". '{"validationUrl":"https://api.ovh.com/login/?credentialToken=token","consumerKey":"consumer_remote","state":"pendingValidation"}' ]); $this->client->getEmitter()->attach($mock); $property = self::getPrivateProperty('consumer_key'); $api = new Api($this->application_key, $this->application_secret, $this->endpoint, $this->consumer_key, $this->client); $accessRules = array( json_decode(' { "method": "GET", "path": "/*" } ') ); $credentials = $api->requestCredentials($accessRules); $consumer_key = $property->getValue($api); $this->assertEquals( $consumer_key , $credentials["consumerKey"]); $this->assertNotEquals( $consumer_key, $this->consumer_key ); } /** * Test invalid applicationKey */ public function testInvalidApplicationKey() { $this->setExpectedException( '\GuzzleHttp\Exception\ClientException' ); $delay = 10; $mock = new Mock([ "HTTP/1.1 401 Unauthorized\r\nContent-Type: application/json; charset=utf-8\r\nContent-Length: 37\r\n\r\n{\"message\":\"Invalid application key\"}" ]); $this->client->getEmitter()->attach($mock); $property = self::getPrivateProperty('consumer_key'); $api = new Api($this->application_key, $this->application_secret, $this->endpoint, $this->consumer_key, $this->client); $accessRules = array( json_decode(' { "method": "GET", "path": "/*" } ') ); $credentials = $api->requestCredentials($accessRules); $consumer_key = $property->getValue($api); $this->assertEquals( $consumer_key , $credentials["consumerKey"]); $this->assertNotEquals( $consumer_key, $this->consumer_key ); } /** * Test invalid rights */ public function testInvalidRight() { $this->setExpectedException( '\GuzzleHttp\Exception\ClientException' ); $delay = 10; $mock = new Mock([ "HTTP/1.1 403 Forbidden\r\nContent-Type: application/json; charset=utf-8\r\nContent-Length: 37\r\n\r\n{\"message\":\"Invalid credentials\"}" ]); $this->client->getEmitter()->attach($mock); $api = new Api($this->application_key, $this->application_secret, $this->endpoint, $this->consumer_key, $this->client); $invoker = self::getPrivateMethod('rawCall'); $invoker->invokeArgs($api, array('GET', '/me')) ; } }