<?php require_once(dirname(__FILE__).'/BaseTest.php'); /** * @package System.DataAccess.SQLMap */ class ResultMapTest extends BaseTest { function __construct() { parent::__construct(); $this->initSqlMap(); new Order; new LineItemCollection; new Account; } function resetDatabase() { $this->initScript('account-init.sql'); $this->initScript('order-init.sql'); $this->initScript('line-item-init.sql'); // $this->initScript('enumeration-init.sql'); } function testColumnsByName() { $order = $this->sqlmap->QueryForObject('GetOrderLiteByColumnName', 1); $this->assertOrder1($order); } function testColumnsByIndex() { $order = $this->sqlmap->QueryForObject("GetOrderLiteByColumnIndex", 1); $this->assertOrder1($order); } function testExtendedResultMap() { $order = $this->sqlmap->queryForObject("GetOrderWithLineItemsNoLazyLoad", 1); $this->assertOrder1($order); $this->assertTrue($order->getLineItemsList() instanceof TList); $this->assertEquals(2, $order->getLineItemsList()->getCount()); } function testLazyLoad() { $order = $this->sqlmap->QueryForObject("GetOrderWithLineItems", 1); $this->assertOrder1($order); $this->assertNotNull($order->getLineItemsList()); $this->assertFalse($order->getLineItemsList() instanceof TList); $this->assertEquals(2, $order->getLineItemsList()->getCount()); // After a call to a method from a proxy object, // the proxy object is replaced by the real object. $this->assertTrue($order->getLineItemsList() instanceof TList); $this->assertEquals(2, $order->getLineItemsList()->getCount()); } function testLazyLoadWithOpenConnection() { $this->sqlmap->openConnection(); $this->testLazyLoad(); $this->sqlmap->closeConnection(); } function testLazyWithTypedCollectionMapping() { $order = $this->sqlmap->queryForObject("GetOrderWithLineItemCollection", 1); $this->assertOrder1($order); $this->assertNotNull($order->getLineItems()); $this->assertFalse($order->getLineItemsList() instanceof LineItemCollection); $this->assertEquals(2, $order->getLineItems()->getCount()); // After a call to a method from a proxy object, // the proxy object is replaced by the real object. $this->assertTrue($order->getLineItems() instanceof LineItemCollection); foreach($order->getLineItems() as $item) { $this->assertNotNull($item); $this->assertTrue($item instanceof LineItem); } } function testNullValueReplacementOnString() { $account = $this->sqlmap->queryForObject("GetAccountViaColumnName", 5); $this->assertEquals("no_email@provided.com", $account->getEmailAddress()); } function testTypeSpecified() { $order = $this->sqlmap->queryForObject("GetOrderWithTypes", 1); $this->assertOrder1($order); } function testComplexObjectMapping() { $order = $this->sqlmap->queryForObject("GetOrderWithAccount", 1); $this->assertOrder1($order); $this->assertAccount1($order->getAccount()); } function testCollectionMappingAndExtends() { $order = $this->sqlmap->queryForObject("GetOrderWithLineItemsCollection", 1); $this->assertOrder1($order); // Check strongly typed collection $this->assertNotNull($order->getLineItems()); $this->assertEquals(2, $order->getLineItems()->getCount()); } function testListMapping() { $order = $this->sqlmap->queryForObject("GetOrderWithLineItems", 1); $this->assertOrder1($order); // Check TList collection $this->assertNotNull($order->getLineItemsList()); $this->assertEquals(2, $order->getLineItemsList()->getCount()); } function testArrayMapping() { $order = $this->sqlmap->queryForObject("GetOrderWithLineItemArray", 1); $this->assertOrder1($order); $this->assertNotNull($order->getLineItemsArray()); $this->assertTrue(is_array($order->getLineItemsArray())); $this->assertEquals(2, count($order->getLineItemsArray())); } function testTypedCollectionMapping() { $order = $this->sqlmap->queryForObject("GetOrderWithLineItemCollectionNoLazy", 1); $this->assertOrder1($order); $this->assertNotNull($order->getLineItems()); $this->assertTrue($order->getLineItems() instanceof LineItemCollection); $this->assertEquals(2, $order->getLineItems()->getCount()); foreach($order->getLineItems() as $item) { $this->assertNotNull($item); $this->assertTrue($item instanceof LineItem); } } function testHashArrayMapping() { $order = $this->sqlmap->queryForObject("GetOrderAsHastable", 1); $this->assertOrder1AsHashArray($order); } function testNestedObjects() { $order = $this->sqlmap->queryForObject("GetOrderJoinedFavourite", 1); $this->assertOrder1($order); $this->assertNotNull($order->getFavouriteLineItem()); $this->assertEquals(2, (int)$order->getFavouriteLineItem()->getID()); $this->assertEquals("ESM-23", $order->getFavouriteLineItem()->getCode()); } function testNestedObjects2() { $order = $this->sqlmap->queryForObject("GetOrderJoinedFavourite2", 1); $this->assertOrder1($order); $this->assertNotNull($order->getFavouriteLineItem()); $this->assertEquals(2, (int)$order->getFavouriteLineItem()->getID()); $this->assertEquals("ESM-23", $order->getFavouriteLineItem()->getCode()); } function testImplicitResultMaps() { $order = $this->sqlmap->queryForObject("GetOrderJoinedFavourite3", 1); // *** force date to timestamp since data type can't be // *** explicity known without mapping $order->setDate(new TDateTime($order->getDate())); $this->assertOrder1($order); $this->assertNotNull($order->getFavouriteLineItem()); $this->assertEquals(2, $order->getFavouriteLineItem()->getID()); $this->assertEquals("ESM-23", $order->getFavouriteLineItem()->getCode()); } function testCompositeKeyMapping() { $this->resetDatabase(); $order1 = $this->sqlmap->queryForObject("GetOrderWithFavouriteLineItem", 1); $order2 = $this->sqlmap->queryForObject("GetOrderWithFavouriteLineItem", 2); $this->assertNotNull($order1); $this->assertNotNull($order1->getFavouriteLineItem()); $this->assertEquals(2, $order1->getFavouriteLineItem()->getID()); $this->assertNotNull($order2); $this->assertNotNull($order2->getFavouriteLineItem()); $this->assertEquals(1, $order2->getFavouriteLineItem()->getID()); } function testSimpleTypeMapping() { $this->resetDatabase(); $list = $this->sqlmap->QueryForList("GetAllCreditCardNumbersFromOrders", null); $this->assertEquals(5, count($list)); $this->assertEquals("555555555555", $list[0]); } function testDecimalTypeMapping() { $this->resetDatabase(); $param["LineItem_ID"] = 1; $param["Order_ID"] = 10; $price = $this->sqlmap->queryForObject("GetLineItemPrice", $param); $this->assertEquals(gettype($price), 'double'); $this->assertEquals(45.43, $price); } //todo /* function testNullValueReplacementOnEnum() { $enum['Id'] = 99; $enum['Day'] = 'Days.Thu'; $enum['Color'] = 'Colors.Blue'; $enum['Month'] = 'Months.All'; $this->sqlmap->insert("InsertEnumViaParameterMap", $enum); $enumClass = $this->sqlmap->queryForObject("GetEnumerationNullValue", 99); $this->assertEquals($enumClass['Day'], 'Days.Thu'); $this->asserEquals($enumClass['Color'], 'Colors.Blue'); $this->assertEquals($enumClass['Month'], 'Months.All'); } function testByteArrayMapping() { } function testNullValueReplacementOnDecimal() { } function testNullValueReplacementOnDateTime() { } */ //future work /* //requires dynamic SQL function testDynamiqueCompositeKeyMapping() { $order1 = $this->sqlmap->queryForObject("GetOrderWithDynFavouriteLineItem", 1); $this->assertNotNull($order1); $this->assertNotNull($order1->getFavouriteLineItem()); var_dump($order1); $this->assertEquals(2, $order1->getFavouriteLineItem()->getID()); } */ } ?>