blob: 7f3690a44f703bd55b6deb9b61eeb08470586331 [file] [log] [blame]
<?php
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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');
}
}