function testFetch()
  {
    $entity = new DataSpace();
    $entity->set('_node_id', $id = 10);

    $result = new PagedArrayDataset(array());

    $decorated_dao = new MockSQLBasedDAO($this);
    $decorated_dao->expectOnce('addCriteria');
    $decorated_dao->expectOnce('fetch');

    $data = array(array('whatever1'),
                  array('whatever2'));

    $rs = new PagedArrayDataset($data);
    $decorated_dao->setReturnReference('fetch', $rs);

    $criteria = new MockTreeNodeSiblingsCriteria($this);
    $criteria->expectOnce('setParentNodeId', array($id));

    $node_dao = new MockRequestResolverResultDAO($this);
    $node_dao->expectOnce('fetchRecord');
    $node_dao->setReturnReference('fetchRecord', $entity);

    $dao = new NodeSiblingsDAOTestVersion($this);
    $dao->NodeSiblingsDAO($decorated_dao, $node_dao);
    $dao->setReturnReference('getTreeNodeSiblingsCriteria', $criteria);

    $this->assertNotNull($dao->fetch());

    $decorated_dao->tally();
    $node_dao->tally();

    $criteria->tally();
  }
  function testLoad()
  {
    $mapper1 = new MockMapper($this);
    $mapper1->setReturnValue('getIdentityKeyName', 'id');
    $mapper2 = new MockMapper($this);//will be used by default
    $mapper2->setReturnValue('getIdentityKeyName', 'id');

    $mapper = new EntityDataMapper();
    $mapper->registerPartMapper('Part1', $mapper1);

    $part1 = new EntityPartStub1();
    $part1->set('id', 10);
    $part2 = new EntityPartStub2();
    $part2->set('id', 12);

    $entity = new Entity();
    $entity->registerPart('Part1', $part1);
    $entity->registerPart('Part2', $part2);

    $object_mapper = new MockMapper($this);

    $this->toolkit->setReturnReference('createDataMapper', $object_mapper, array('ObjectMapper'));
    $this->toolkit->setReturnReference('createDataMapper', $mapper1, array('EntityPartStub1Mapper'));
    $this->toolkit->setReturnReference('createDataMapper', $mapper2, array('EntityPartStub2Mapper'));

    $record = new DataSpace();
    $record->set('oid', $oid = 1000);

    $object_mapper->expectOnce('load', array($record, $entity));
    $mapper1->expectOnce('load', array($record, $part1));
    $mapper2->expectOnce('load', array($record, $part2));

    $mapper->load($record, $entity);

    $this->assertEqual($part1->get('oid'), $oid);
    $this->assertEqual($part2->get('oid'), $oid);

    $object_mapper->tally();
    $mapper1->tally();
    $mapper2->tally();

    $uow =& $this->toolkit->getUOW();
    $this->assertTrue($uow->isExisting($part1));
    $this->assertTrue($uow->isExisting($part2));
  }