blob: 7a463ff1ff90e41429787f27eaa2ef06d3a3697b [file] [log] [blame]
<?php
namespace predictionio\tests\Unit;
use GuzzleHttp\Client;
use GuzzleHttp\Handler\MockHandler;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Middleware;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;
use predictionio\EventClient;
class EventClientTest extends \PHPUnit_Framework_TestCase {
/** @var EventClient $eventClient */
protected $eventClient;
protected $container = [];
protected function setUp() {
$history=Middleware::History($this->container);
$mock=new MockHandler([new Response(200)]);
$handler=HandlerStack::create($mock);
$handler->push($history);
$this->eventClient=new EventClient(
"j4jIdbq59JsF2f4CXwwkIiVHNFnyNvWXqMqXxcIbQDqFRz5K0fe9e3QfqjKwvW3O");
$existingOptions = $this->eventClient->client->getConfig();
$existingOptions['handler'] = $handler;
$mockClient=new Client($existingOptions);
$this->eventClient->client = $mockClient;
}
public function testSetUser() {
$this->eventClient->setUser(1,array('age'=>20));
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('$set',$body['event']);
$this->assertEquals('user',$body['entityType']);
$this->assertEquals(1,$body['entityId']);
$this->assertEquals(20,$body['properties']['age']);
$this->assertNotNull($body['eventTime']);
$this->assertEquals('POST',$request->getMethod());
$this->assertEquals('http://localhost:7070/events.json?accessKey=j4jIdbq59JsF2f4CXwwkIiVHNFnyNvWXqMqXxcIbQDqFRz5K0fe9e3QfqjKwvW3O',$request->getUri());
}
public function testSetUserWithEventTime() {
$eventTime='1982-09-25T01:23:45+0800';
$this->eventClient->setUser(1,array('age'=>20), $eventTime);
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('$set',$body['event']);
$this->assertEquals($eventTime, $body['eventTime']);
}
public function testUnsetUser() {
$this->eventClient->unsetUser(1,array('age'=>20));
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('$unset',$body['event']);
$this->assertEquals('user',$body['entityType']);
$this->assertEquals(1,$body['entityId']);
$this->assertEquals(20,$body['properties']['age']);
$this->assertNotNull($body['eventTime']);
$this->assertEquals('POST',$request->getMethod());
$this->assertEquals('http://localhost:7070/events.json?accessKey=j4jIdbq59JsF2f4CXwwkIiVHNFnyNvWXqMqXxcIbQDqFRz5K0fe9e3QfqjKwvW3O',$request->getUri());
}
public function testUnsetUserWithEventTime() {
$eventTime='1982-09-25T01:23:45+0800';
$this->eventClient->unsetUser(1,array('age'=>20), $eventTime);
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('$unset',$body['event']);
$this->assertEquals($eventTime, $body['eventTime']);
}
/**
* @expectedException \predictionio\PredictionIOAPIError
*/
public function testUnsetUserWithoutProperties() {
$this->eventClient->unsetUser(1, array());
}
public function testDeleteUser() {
$this->eventClient->deleteUser(1);
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('$delete',$body['event']);
$this->assertEquals('user',$body['entityType']);
$this->assertEquals(1,$body['entityId']);
$this->assertNotNull($body['eventTime']);
$this->assertEquals('POST',$request->getMethod());
$this->assertEquals('http://localhost:7070/events.json?accessKey=j4jIdbq59JsF2f4CXwwkIiVHNFnyNvWXqMqXxcIbQDqFRz5K0fe9e3QfqjKwvW3O',$request->getUri());
}
public function testDeleteUserWithEventTime() {
$eventTime='1982-09-25T01:23:45+0800';
$this->eventClient->deleteUser(1, $eventTime);
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('$delete',$body['event']);
$this->assertEquals($eventTime, $body['eventTime']);
}
public function testSetItem() {
$this->eventClient->setItem(1,array('type'=>'book'));
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('$set',$body['event']);
$this->assertEquals('item',$body['entityType']);
$this->assertEquals(1,$body['entityId']);
$this->assertEquals('book',$body['properties']['type']);
$this->assertNotNull($body['eventTime']);
$this->assertEquals('POST',$request->getMethod());
$this->assertEquals('http://localhost:7070/events.json?accessKey=j4jIdbq59JsF2f4CXwwkIiVHNFnyNvWXqMqXxcIbQDqFRz5K0fe9e3QfqjKwvW3O',$request->getUri());
}
public function testSetItemWithEventTime() {
$eventTime='1982-09-25T01:23:45+0800';
$this->eventClient->setItem(1,array('type'=>'book'), $eventTime);
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('$set',$body['event']);
$this->assertEquals($eventTime, $body['eventTime']);
}
public function testUnsetItem() {
$this->eventClient->unsetItem(1,array('type'=>'book'));
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('$unset',$body['event']);
$this->assertEquals('item',$body['entityType']);
$this->assertEquals(1,$body['entityId']);
$this->assertEquals('book',$body['properties']['type']);
$this->assertNotNull($body['eventTime']);
$this->assertEquals('POST',$request->getMethod());
$this->assertEquals('http://localhost:7070/events.json?accessKey=j4jIdbq59JsF2f4CXwwkIiVHNFnyNvWXqMqXxcIbQDqFRz5K0fe9e3QfqjKwvW3O',$request->getUri());
}
public function testUnsetItemWithEventTime() {
$eventTime='1982-09-25T01:23:45+0800';
$this->eventClient->unsetItem(1,array('type'=>'book'), $eventTime);
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('$unset',$body['event']);
$this->assertEquals($eventTime, $body['eventTime']);
}
/**
* @expectedException \predictionio\PredictionIOAPIError
*/
public function testUnsetItemWithoutProperties() {
$this->eventClient->unsetItem(1, array());
}
public function testDeleteItem() {
$this->eventClient->deleteItem(1);
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('$delete',$body['event']);
$this->assertEquals('item',$body['entityType']);
$this->assertEquals(1,$body['entityId']);
$this->assertNotNull($body['eventTime']);
$this->assertEquals('POST',$request->getMethod());
$this->assertEquals('http://localhost:7070/events.json?accessKey=j4jIdbq59JsF2f4CXwwkIiVHNFnyNvWXqMqXxcIbQDqFRz5K0fe9e3QfqjKwvW3O',$request->getUri());
}
public function testDeleteItemWithEventTime() {
$eventTime='1982-09-25T01:23:45+0800';
$this->eventClient->deleteItem(1, $eventTime);
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('$delete',$body['event']);
$this->assertEquals($eventTime, $body['eventTime']);
}
public function testRecordAction() {
$this->eventClient->recordUserActionOnItem('view',1,888, array('count'=>2));
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('view',$body['event']);
$this->assertEquals('user',$body['entityType']);
$this->assertEquals(1,$body['entityId']);
$this->assertEquals('item',$body['targetEntityType']);
$this->assertEquals(888,$body['targetEntityId']);
$this->assertEquals(2,$body['properties']['count']);
$this->assertNotNull($body['eventTime']);
$this->assertEquals('POST',$request->getMethod());
$this->assertEquals('http://localhost:7070/events.json?accessKey=j4jIdbq59JsF2f4CXwwkIiVHNFnyNvWXqMqXxcIbQDqFRz5K0fe9e3QfqjKwvW3O',$request->getUri());
}
public function testRecordActionWithEventTime() {
$eventTime='1982-09-25T01:23:45+0800';
$this->eventClient->recordUserActionOnItem('view',1, 8, array(),$eventTime);
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('view',$body['event']);
$this->assertEquals($eventTime, $body['eventTime']);
}
public function testCreateEvent() {
$this->eventClient->createEvent(array(
'event' => 'my_event',
'entityType' => 'user',
'entityId' => 'uid',
'properties' => array('prop1'=>1,
'prop2'=>'value2',
'prop3'=>array(1,2,3),
'prop4'=>true,
'prop5'=>array('a','b','c'),
'prop6'=>4.56
),
'eventTime' => '2004-12-13T21:39:45.618-07:00'
));
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('my_event',$body['event']);
$this->assertEquals('user',$body['entityType']);
$this->assertEquals('uid',$body['entityId']);
$this->assertEquals(1,$body['properties']['prop1']);
$this->assertEquals('value2',$body['properties']['prop2']);
$this->assertEquals(array(1,2,3),$body['properties']['prop3']);
$this->assertEquals(true,$body['properties']['prop4']);
$this->assertEquals(array('a','b','c'),$body['properties']['prop5']);
$this->assertEquals(4.56,$body['properties']['prop6']);
$this->assertEquals('2004-12-13T21:39:45.618-07:00',$body['eventTime']);
$this->assertEquals('POST',$request->getMethod());
$this->assertEquals('http://localhost:7070/events.json?accessKey=j4jIdbq59JsF2f4CXwwkIiVHNFnyNvWXqMqXxcIbQDqFRz5K0fe9e3QfqjKwvW3O',$request->getUri());
}
public function testGetEvent() {
$this->eventClient->getEvent('event_id');
$result=array_shift($this->container);
/** @var Request $request */
$request=$result['request'];
$body=json_decode($request->getBody(), true);
$this->assertEquals('GET',$request->getMethod());
$this->assertEquals('http://localhost:7070/events/event_id.json?accessKey=j4jIdbq59JsF2f4CXwwkIiVHNFnyNvWXqMqXxcIbQDqFRz5K0fe9e3QfqjKwvW3O',
$request->getUri());
}
}
?>