<?php

namespace Doctrine\Tests\DBAL\Events;

use Doctrine\DBAL\Event\ConnectionEventArgs;
use Doctrine\DBAL\Event\Listeners\OracleSessionInit;
use Doctrine\DBAL\Events;
use Doctrine\Tests\DbalTestCase;

class OracleSessionInitTest extends DbalTestCase
{
    public function testPostConnect()
    {
        $connectionMock = $this->createMock('Doctrine\DBAL\Connection');
        $connectionMock->expects($this->once())
                       ->method('executeUpdate')
                       ->with($this->isType('string'));

        $eventArgs = new ConnectionEventArgs($connectionMock);


        $listener = new OracleSessionInit();
        $listener->postConnect($eventArgs);
    }

    /**
     * @group DBAL-1824
     *
     * @dataProvider getPostConnectWithSessionParameterValuesData
     */
    public function testPostConnectQuotesSessionParameterValues($name, $value)
    {
        $connectionMock = $this->getMockBuilder('Doctrine\DBAL\Connection')
            ->disableOriginalConstructor()
            ->getMock();
        $connectionMock->expects($this->once())
            ->method('executeUpdate')
            ->with($this->stringContains(sprintf('%s = %s', $name, $value)));

        $eventArgs = new ConnectionEventArgs($connectionMock);


        $listener = new OracleSessionInit(array($name => $value));
        $listener->postConnect($eventArgs);
    }

    public function getPostConnectWithSessionParameterValuesData()
    {
        return array(
            array('CURRENT_SCHEMA', 'foo'),
        );
    }

    public function testGetSubscribedEvents()
    {
        $listener = new OracleSessionInit();
        self::assertEquals(array(Events::postConnect), $listener->getSubscribedEvents());
    }
}