PHP Classes

File: vendor/gabordemooij/redbean/testing/RedUNIT/Base/Logging.php

Recommend this page to a friend!
  Classes of Adrian M   upMVC   vendor/gabordemooij/redbean/testing/RedUNIT/Base/Logging.php   Download  
File: vendor/gabordemooij/redbean/testing/RedUNIT/Base/Logging.php
Role: Class source
Content type: text/plain
Description: Class source
Class: upMVC
Pure PHP web development without other frameworks
Author: By
Last change:
Date: 25 days ago
Size: 9,280 bytes
 

Contents

Class file image Download
<?php

namespace RedUNIT\Base;

use
RedUNIT\Base as Base;
use
RedBeanPHP\Facade as R;
use
RedBeanPHP\Logger as Logger;
use
RedBeanPHP\Logger\RDefault as RDefault;
use
RedBeanPHP\Logger\RDefault\Debug as Debug;

/**
 * Logging
 *
 * Tests the Query Logging tools that are part of RedBeanPHP.
 *
 * @file RedUNIT/Base/Logging.php
 * @desc Tests Logging facilities.
 * @author Gabor de Mooij and the RedBeanPHP Community
 * @license New BSD/GPLv2
 *
 * (c) G.J.G.T. (Gabor) de Mooij and the RedBeanPHP Community.
 * This source file is subject to the New BSD/GPLv2 License that is bundled
 * with this source code in the file license.txt.
 */
class Logging extends Base
{
   
/**
     * Test basic logging functionality.
     *
     * @return void
     */
   
public function testBasicLogging()
    {
       
R::nuke();
       
R::startLogging();
       
R::store( R::dispense( 'book' ) );
       
$logs = R::getLogs();
       
$count = count( $logs );
       
asrt( ( count( $logs ) > 0 ), TRUE );
       
asrt( ( R::getLogger() instanceof Logger ), TRUE );
       
R::stopLogging();
       
R::store( R::dispense( 'book' ) );
       
$logs = R::getLogs();
       
asrt( ( count( $logs ) === 0 ), TRUE );
    }

   
/**
     * Test for Issue #751 (Update Logger to accept parameter typed bindings):
     * While debugging some of our queries, we noticed
     * the logger would often display
     * 'Array' as value for the bindings,
     * even when the SQL query seemed to work correctly.
     * Debugging this, it appeared the debug logger did
     * not support the new parameter type bindings added in 5.3.
     * This merge request adds support for
     * the PDO::PARAM_INT and PDO::PARAM_STR
     * to the Debug logger, as well as a visible support
     * for the RPDO flagUseStringOnlyBinding flag.
     *
     * @return void
     */
   
public function testIssue751()
    {
       
R::nuke();
       
$debugger = new Debug;
       
$database = R::getDatabaseAdapter()->getDatabase();
       
$database->setLogger( $debugger );
       
asrt( $database->getLogger(), $debugger );
       
$database->setEnableLogging( TRUE );
       
$debugger->setMode( RDefault::C_LOGGER_ARRAY );
       
/* debug logger with nostringonlybinding should have unquoted ints */
       
R::store( R::dispense( 'book' ) );
       
R::getAll( 'SELECT * FROM book WHERE id < ?', array( array( 999, \PDO::PARAM_INT ) ) );
       
asrt( count( $debugger->grep('999') ), 1 );
       
asrt( count( $debugger->grep('\'999\'') ), 0 );
       
asrt( count( $debugger->grep('rray') ), 0 );
       
$debugger->setUseStringOnlyBinding( FALSE );
       
$debugger->clear();
       
R::getAll( 'SELECT * FROM book WHERE id < ?', array( array( 999, \PDO::PARAM_STR ) ) );
       
/* ...but quoted strings */
       
asrt( count( $debugger->grep('\'999\'') ), 1 );
       
asrt( count( $debugger->grep('rray') ), 0 );
       
$debugger->setUseStringOnlyBinding( FALSE );
       
$debugger->clear();
       
/* even if PARAM INT if stringonlybinding then override */
       
$debugger->setUseStringOnlyBinding( TRUE );
       
R::getAll( 'SELECT * FROM book WHERE id < ?', array( array( 999, \PDO::PARAM_INT ) ) );
       
asrt( count( $debugger->grep('\'999\'') ), 1 );
       
asrt( count( $debugger->grep('rray') ), 0 );
       
/* if no type and stringonlybinding always quote */
       
$debugger->clear();
       
R::getAll( 'SELECT * FROM book WHERE id < ?', array( 999 ) );
       
asrt( count( $debugger->grep('\'999\'') ), 1 );
       
asrt( count( $debugger->grep('rray') ), 0 );
       
/* a more closer inspection */
        /* log implicit INT param without StringOnly */
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( FALSE );
       
$debugger->log(' Hello ? ', array( 123 ) );
       
asrt( count( $debugger->grep('123') ), 1 );
       
asrt( count( $debugger->grep('\'123\'') ), 0 );
       
/* log implicit STR param without StringOnly */
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( FALSE );
       
$debugger->log(' Hello ? ', array( 'abc' ) );
       
asrt( count( $debugger->grep('\'abc\'') ), 1 );
       
/* log NULL param without StringOnly */
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( FALSE );
       
$debugger->log(' Hello ? ', array( NULL ) );
       
asrt( count( $debugger->grep('NULL') ), 1 );
       
asrt( count( $debugger->grep('\'NULL\'') ), 0 );
       
/* log explicit INT param without StringOnly */
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( FALSE );
       
$debugger->log(' Hello ? ', array( 123, \PDO::PARAM_INT ) );
       
asrt( count( $debugger->grep('123') ), 1 );
       
asrt( count( $debugger->grep('\'123\'') ), 0 );
       
/* log explicit STR param without StringOnly */
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( FALSE );
       
$debugger->log(' Hello ? ', array( 'abc', \PDO::PARAM_STR ) );
       
asrt( count( $debugger->grep('\'abc\'') ), 1 );
       
/* log NULL with explicit param type without StringOnly */
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( FALSE );
       
$debugger->log(' Hello ? ', array( NULL, \PDO::PARAM_STR ) );
       
asrt( count( $debugger->grep('NULL') ), 1 );
       
asrt( count( $debugger->grep('\'NULL\'') ), 0 );
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( FALSE );
       
$debugger->log(' Hello ? ', array( NULL, \PDO::PARAM_INT ) );
       
asrt( count( $debugger->grep('NULL') ), 1 );
       
asrt( count( $debugger->grep('\'NULL\'') ), 0 );
       
/* log implicit INT param with StringOnly */
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( TRUE );
       
$debugger->log(' Hello ? ', array( 123 ) );
       
asrt( count( $debugger->grep('\'123\'') ), 1 );
       
/* log implicit STR param with StringOnly */
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( TRUE );
       
$debugger->log(' Hello ? ', array( 'abc' ) );
       
asrt( count( $debugger->grep('\'abc\'') ), 1 );
       
/* log NULL param with StringOnly */
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( TRUE );
       
$debugger->log(' Hello ? ', array( NULL ) );
       
asrt( count( $debugger->grep('\'NULL\'') ), 1 );
       
/* log explicit INT param with StringOnly */
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( TRUE );
       
$debugger->log(' Hello ? ', array( 123, \PDO::PARAM_INT ) );
       
asrt( count( $debugger->grep('\'123\'') ), 1 );
       
/* log explicit STR param with StringOnly */
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( TRUE );
       
$debugger->log(' Hello ? ', array( 'abc', \PDO::PARAM_STR ) );
       
asrt( count( $debugger->grep('\'abc\'') ), 1 );
       
/* log NULL with explicit param type with StringOnly - remains just NULL */
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( FALSE );
       
$debugger->log(' Hello ? ', array( NULL, \PDO::PARAM_STR ) );
       
asrt( count( $debugger->grep('NULL') ), 1 );
       
asrt( count( $debugger->grep('\'NULL\'') ), 0 );
       
$debugger->clear();
       
$debugger->setUseStringOnlyBinding( FALSE );
       
$debugger->log(' Hello ? ', array( NULL, \PDO::PARAM_INT ) );
       
asrt( count( $debugger->grep('NULL') ), 1 );
       
asrt( count( $debugger->grep('\'NULL\'') ), 0 );
       
$debugger->setUseStringOnlyBinding( FALSE );
       
/* Does stringonly mode switch along with Database mode ? */
       
$database->setUseStringOnlyBinding( TRUE );
       
$debugger->clear();
       
$debugger->log(' Hello ? ', array( 123, \PDO::PARAM_INT ) );
       
asrt( count( $debugger->grep('\'123\'') ), 1 );
       
$database->setUseStringOnlyBinding( FALSE );
       
$debugger->clear();
       
$debugger->log(' Hello ? ', array( 123, \PDO::PARAM_INT ) );
       
asrt( count( $debugger->grep('\'123\'') ), 0 );
       
asrt( count( $debugger->grep('123') ), 1 );
       
$database->setUseStringOnlyBinding( TRUE );
       
$debugger->clear();
       
$debugger->log(' Hello ? ', array( 123, \PDO::PARAM_INT ) );
       
asrt( count( $debugger->grep('\'123\'') ), 1 );
       
$database->setUseStringOnlyBinding( FALSE );
       
$debugger->setUseStringOnlyBinding( FALSE );
    }

   
/**
     * Can we manually set a logger and enable logging?
     *
     * @return void
     */
   
public function testCanSetLogger()
    {
       
R::nuke();
       
R::store( R::dispense( 'bean' ) );
       
$logger = new RDefault;
       
$logger->setMode( RDefault::C_LOGGER_ARRAY );
       
$database = R::getDatabaseAdapter()->getDatabase();
       
$database->setLogger( $logger );
       
asrt( $database->getLogger(), $logger );
       
$database->setEnableLogging( FALSE );
       
$logs = $logger->getLogs();
       
asrt( is_array( $logs ), TRUE );
       
asrt( count( $logs ), 0 );
       
$database->setEnableLogging( TRUE );
       
$logs = $logger->getLogs();
       
asrt( is_array( $logs ), TRUE );
       
asrt( count( $logs ), 0 );
       
R::findOne( 'bean' ); //writes 3 log entries
       
$logs = $logger->getLogs();
       
asrt( is_array( $logs ), TRUE );
       
asrt( count( $logs ), 3 );
    }

   
/**
     * Test query counter.
     *
     * @return void
     */
   
public function testQueryCount()
    {
       
R::nuke();
       
R::store( R::dispense( 'bean' ) );
       
R::resetQueryCount();
       
asrt( R::getQueryCount(), 0 );
       
R::findOne( 'bean' );
       
asrt( R::getQueryCount(), 1 );
       
R::resetQueryCount();
       
asrt( R::getQueryCount(), 0 );
       
R::findOne( 'bean' );
       
R::findOne( 'bean' );
       
R::findOne( 'bean' );
       
asrt( R::getQueryCount(), 0 );
       
R::store( R::dispense( 'bean2' ) );
       
R::resetQueryCount();
       
R::findOne( 'bean' );
       
R::findOne( 'bean2' );
       
asrt( R::getQueryCount(), 2 );
       
R::resetQueryCount();
       
R::findOne( 'bean', ' id < 100' );
       
R::findOne( 'bean', ' id < 101' );
       
R::findOne( 'bean', ' id < 102' );
       
R::findOne( 'bean', ' id < 103' );
       
asrt( R::getQueryCount(), 4 );
       
R::findOne( 'bean', ' id < 100' );
       
R::findOne( 'bean', ' id < 101' );
       
R::findOne( 'bean', ' id < 102' );
       
R::findOne( 'bean', ' id < 103' );
       
asrt( R::getQueryCount(), 4 );
       
R::findOne( 'bean', ' id < 104' );
       
asrt( R::getQueryCount(), 5 );
    }
}