blob: 94f86906951df6cc1bbe8edba7459230a9d64e31 [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.
*
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @version //autogentag//
* @filesource
* @package PersistentObject
* @subpackage Tests
*/
require_once 'test_case.php';
/**
* Tests the load facilities of ezcPersistentSession.
*
* @package PersistentObject
* @subpackage Tests
*/
class ezcPersistentSessionLoadTest extends ezcPersistentSessionTest
{
public static function suite()
{
return new PHPUnit_Framework_TestSuite( __CLASS__ );
}
// loadIfExists
public function testLoadIfExistsValid()
{
$object = $this->session->loadIfExists( 'PersistentTestObject', 1 );
$this->assertEquals( 'PersistentTestObject', get_class( $object ) );
}
public function testLoadIfExistsInvalid()
{
$object = $this->session->loadIfExists( 'NoSuchClass', 1 );
$this->assertEquals( null, $object );
}
public function testLoadIfExistsNoSuchObject()
{
$object = $this->session->loadIfExists( 'PersistentTestObject', 999 );
$this->assertEquals( null, $object );
}
// load
public function testLoadValid()
{
$object = $this->session->load( 'PersistentTestObject', "1" );
$this->assertEquals( 'PersistentTestObject', get_class( $object ) );
}
public function testLoadInvalid()
{
try
{
$object = $this->session->load( 'NoSuchClass', 1 );
$this->fail( "load() called with invalid class. Did not get an exception" );
}
catch ( ezcPersistentDefinitionNotFoundException $e ) {}
}
public function testLoadNoSuchObject()
{
try
{
$object = $this->session->load( 'PersistentTestObject', 999 );
$this->fail( "load() called with invalid object id. Did not get an exception" );
}
catch ( ezcPersistentObjectNotFoundException $e )
{
$this->assertEquals(
"A query failed internally in Persistent Object: No object of class 'PersistentTestObject' with id '999'.",
$e->getMessage()
);
return;
}
}
public function testConversionOnLoad()
{
$q = $this->session->createFindQuery( 'PersistentTestObjectConverter' );
$q->where(
$q->expr->eq(
$this->session->database->quoteIdentifier( 'type_varchar' ),
$q->bindValue( 'Germany' )
)
);
$arr = $this->session->find( $q, 'PersistentTestObjectConverter' );
$this->assertEquals(
1,
count( $arr )
);
$this->assertNotNull(
$arr[4]
);
$this->assertType(
'DateTime',
$arr[4]->integer
);
$this->assertEquals(
'82443000',
$arr[4]->integer->format( 'U' )
);
}
public function testConversionNullOnLoad()
{
$q = $this->session->database->createInsertQuery();
$q->insertInto( $this->session->database->quoteIdentifier( 'PO_test' ) );
$q->set( $this->session->database->quoteIdentifier( 'type_varchar' ), $q->bindValue( 'foo' ) );
$q->set( $this->session->database->quoteIdentifier( 'type_integer' ), $q->bindValue( 23 ) );
// null!
// $q->set( $this->session->database->quoteIdentifier( 'type_decimal' ), $q->bindValue( 42.23 ) );
$q->set( $this->session->database->quoteIdentifier( 'type_text' ), $q->bindValue( 'foo bar' ) );
$stmt = $q->prepare();
$stmt->execute();
$q = $this->session->createFindQuery( 'PersistentTestObjectConverter' );
$q->where(
$q->expr->eq(
$this->session->database->quoteIdentifier( 'type_varchar' ),
$q->bindValue( 'foo' )
)
);
$arr = $this->session->find( $q, 'PersistentTestObjectConverter' );
$this->assertEquals(
1,
count( $arr )
);
$obj = current( $arr );
$this->assertEquals( 42.23, $obj->decimal );
}
// loadIntoObject
public function testLoadIntoObjectValid()
{
$object = new PersistentTestObject();
$object->varchar = 'Finland';
$object->integer = 42;
$object->decimal = 1.42;
$object->text = "Finland has Nokia!";
$this->session->save( $object );
$this->assertEquals( 5, $object->id );
$object2 = new PersistentTestObject();
$this->session->loadIntoObject( $object2, 5 );
$this->assertEquals( 'Finland', $object2->varchar );
$this->assertEquals( 42, (int)$object2->integer );
$this->assertEquals( 1.42, (float)$object2->decimal );
$this->assertEquals( 'Finland has Nokia!', $object2->text );
}
public function testLoadIntoObjectInvalid()
{
try
{
$object = $this->session->loadIntoObject( new Exception(), 1 );
$this->fail( "loadIntoObject() called with invalid class. Did not get an exception" );
}
catch ( ezcPersistentDefinitionNotFoundException $e )
{
return;
}
}
public function testLoadIntoObjectNoSuchObject()
{
try
{
$object = $this->session->loadIntoObject( new PersistentTestObject(), 999 );
$this->fail( "loadIntoObject() called with invalid class. Did not get an exception" );
}
catch ( ezcPersistentQueryException $e )
{
$this->assertEquals(
"A query failed internally in Persistent Object: No object of class 'PersistentTestObject' with id '999'.",
$e->getMessage()
);
}
}
// refresh
public function testRefreshValid()
{
$object = new PersistentTestObject();
$object->varchar = 'Finland';
$object->integer = 42;
$object->decimal = 1.42;
$object->text = "Finland has Nokia!";
$this->session->save( $object );
$object->integer = 101;
$this->session->refresh( $object );
$this->assertEquals( 42, (int)$object->integer );
}
public function testRefreshInvalid()
{
try
{
$this->session->refresh( new Exception() );
$this->fail( "refresh of non-persistent object did not throw exception" );
}
catch ( ezcPersistentDefinitionNotFoundException $e ) {}
}
public function testRefreshNotPersistent()
{
try
{
$this->session->refresh( new PersistentTestObject() );
$this->fail( "refresh of non-persistent object did not throw exception" );
}
catch ( ezcPersistentObjectNotPersistentException $e ) {}
}
// sub-select
public function testSubSelectDifferentClass()
{
RelationTestPerson::setupTables( $this->session->database );
RelationTestPerson::insertData( $this->session->database );
$q = $this->session->createFindQuery( 'RelationTestPerson' );
$subQ = $this->session->createSubQuery( $q, 'RelationTestBirthday' );
$subQ->select( 'person' );
$q->where(
$q->expr->in( 'id', $subQ )
);
$stmt = $q->prepare();
$this->assertTrue( $stmt->execute() );
$this->assertEquals( 2, count( $stmt->fetchAll() ) );
RelationTestPerson::cleanup( $this->session->database );
}
public function testSubSelectSameClass()
{
MultiRelationTestPerson::setupTables( $this->session->database );
MultiRelationTestPerson::insertData( $this->session->database );
$q = $this->session->createFindQuery( 'MultiRelationTestPerson' );
$subQ = $this->session->createSubQuery( $q, 'MultiRelationTestPerson' );
$subQ->select( 'mother' );
$q->where(
$q->expr->in( 'id', $subQ )
);
$stmt = $q->prepare();
$this->assertTrue( $stmt->execute() );
$this->assertEquals( 1, count( $stmt->fetchAll() ) );
MultiRelationTestPerson::cleanup( $this->session->database );
}
}
?>