1<?php
2
3/*
4 * This file is part of the Monolog package.
5 *
6 * (c) Jordi Boggiano <j.boggiano@seld.be>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Monolog\Formatter;
13
14use Monolog\Logger;
15
16class ElasticaFormatterTest extends \PHPUnit_Framework_TestCase
17{
18    public function setUp()
19    {
20        if (!class_exists("Elastica\Document")) {
21            $this->markTestSkipped("ruflin/elastica not installed");
22        }
23    }
24
25    /**
26     * @covers Monolog\Formatter\ElasticaFormatter::__construct
27     * @covers Monolog\Formatter\ElasticaFormatter::format
28     * @covers Monolog\Formatter\ElasticaFormatter::getDocument
29     */
30    public function testFormat()
31    {
32        // test log message
33        $msg = array(
34            'level' => Logger::ERROR,
35            'level_name' => 'ERROR',
36            'channel' => 'meh',
37            'context' => array('foo' => 7, 'bar', 'class' => new \stdClass),
38            'datetime' => new \DateTime("@0"),
39            'extra' => array(),
40            'message' => 'log',
41        );
42
43        // expected values
44        $expected = $msg;
45        $expected['datetime'] = '1970-01-01T00:00:00.000000+00:00';
46        $expected['context'] = array(
47            'class' => '[object] (stdClass: {})',
48            'foo' => 7,
49            0 => 'bar',
50        );
51
52        // format log message
53        $formatter = new ElasticaFormatter('my_index', 'doc_type');
54        $doc = $formatter->format($msg);
55        $this->assertInstanceOf('Elastica\Document', $doc);
56
57        // Document parameters
58        $params = $doc->getParams();
59        $this->assertEquals('my_index', $params['_index']);
60        $this->assertEquals('doc_type', $params['_type']);
61
62        // Document data values
63        $data = $doc->getData();
64        foreach (array_keys($expected) as $key) {
65            $this->assertEquals($expected[$key], $data[$key]);
66        }
67    }
68
69    /**
70     * @covers Monolog\Formatter\ElasticaFormatter::getIndex
71     * @covers Monolog\Formatter\ElasticaFormatter::getType
72     */
73    public function testGetters()
74    {
75        $formatter = new ElasticaFormatter('my_index', 'doc_type');
76        $this->assertEquals('my_index', $formatter->getIndex());
77        $this->assertEquals('doc_type', $formatter->getType());
78    }
79}
80