blob: fb2377b415d041e9b45b63edad013f88fca1a6cd [file] [log] [blame]
<?php
namespace predictionio\tests\Unit;
use predictionio\Exporter;
class TestExporter {
use Exporter {
jsonEncode as traitJsonEncode;
}
public $json;
public $data;
public function __construct() {
$this->json = [];
$this->data = [];
}
public function jsonEncode($data) {
$this->data[] = $data;
return $this->traitJsonEncode($data);
}
public function export($json) {
$this->json[] = $json;
}
}
class ExporterTest extends \PHPUnit_Framework_TestCase {
/** @var TestExporter $exporter */
private $exporter;
protected function setUp() {
$this->exporter = new TestExporter();
}
public function testTimeIsNow() {
$time = new \DateTime();
$this->exporter->createEvent('event', 'entity-type', 'entity-id');
$this->assertEquals(1, count($this->exporter->data));
$data = $this->exporter->data[0];
$this->assertEquals(4, count($data));
$this->assertEquals('event', $data['event']);
$this->assertEquals('entity-type', $data['entityType']);
$this->assertEquals('entity-id', $data['entityId']);
$this->assertEquals($time->format(\DateTime::ISO8601), $data['eventTime'], 'time is now', 1);
$this->assertEquals(1, count($this->exporter->json));
$json = $this->exporter->json[0];
$pattern = '/^{"event":"event","entityType":"entity-type","entityId":"entity-id","eventTime":"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}"}$/';
$this->assertTrue(preg_match($pattern, $json) === 1, 'json');
}
public function testTimeIsString() {
$time = new \DateTime('2015-04-01');
$this->exporter->createEvent('event', 'entity-type', 'entity-id', null, null, null, '2015-04-01');
$this->assertEquals(1, count($this->exporter->data));
$data = $this->exporter->data[0];
$this->assertEquals(4, count($data));
$this->assertEquals('event', $data['event']);
$this->assertEquals('entity-type', $data['entityType']);
$this->assertEquals('entity-id', $data['entityId']);
$this->assertEquals($time->format(\DateTime::ISO8601), $data['eventTime'], 'time is string', 1);
$this->assertEquals(1, count($this->exporter->json));
$json = $this->exporter->json[0];
$pattern = '/^{"event":"event","entityType":"entity-type","entityId":"entity-id","eventTime":"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}"}$/';
$this->assertTrue(preg_match($pattern, $json) === 1, 'json');
}
public function testTimeIsDateTime() {
$time = new \DateTime('2015-04-01');
$this->exporter->createEvent('event', 'entity-type', 'entity-id', null, null, null, $time);
$this->assertEquals(1, count($this->exporter->data));
$data = $this->exporter->data[0];
$this->assertEquals(4, count($data));
$this->assertEquals('event', $data['event']);
$this->assertEquals('entity-type', $data['entityType']);
$this->assertEquals('entity-id', $data['entityId']);
$this->assertEquals($time->format(\DateTime::ISO8601), $data['eventTime'], 'time is DateTime', 1);
$this->assertEquals(1, count($this->exporter->json));
$json = $this->exporter->json[0];
$pattern = '/^{"event":"event","entityType":"entity-type","entityId":"entity-id","eventTime":"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}"}$/';
$this->assertTrue(preg_match($pattern, $json) === 1, 'json');
}
public function testOptionalFields() {
$time = new \DateTime('2015-04-01');
$this->exporter->createEvent('event', 'entity-type', 'entity-id',
'target-entity-type', 'target-entity-id', ['property' => true], $time);
$this->assertEquals(1, count($this->exporter->data));
$data = $this->exporter->data[0];
$this->assertEquals(7, count($data));
$this->assertEquals('event', $data['event']);
$this->assertEquals('entity-type', $data['entityType']);
$this->assertEquals('entity-id', $data['entityId']);
$this->assertEquals($time->format(\DateTime::ISO8601), $data['eventTime'], 'time is DateTime', 1);
$this->assertEquals('target-entity-type', $data['targetEntityType']);
$this->assertEquals('target-entity-id', $data['targetEntityId']);
$this->assertEquals(['property'=>true], $data['properties']);
$this->assertEquals(1, count($this->exporter->json));
$json = $this->exporter->json[0];
$pattern = '/^{"event":"event","entityType":"entity-type","entityId":"entity-id","eventTime":"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}","targetEntityType":"target-entity-type","targetEntityId":"target-entity-id","properties":{"property":true}}$/';
$this->assertTrue(preg_match($pattern, $json) === 1, 'json');
}
}