Ejemplo n.º 1
0
/**
 * testFetchingNonUniqueFKJoinTableRecords()
 *
 * Tests if the results are properly returned in the case there are non-unique FK's
 * in the join table but another fields value is different. For example:
 * something_id | something_else_id | doomed = 1
 * something_id | something_else_id | doomed = 0
 * Should return both records and not just one.
 *
 * @return void
 */
	public function testFetchingNonUniqueFKJoinTableRecords() {
		$this->loadFixtures('Something', 'SomethingElse', 'JoinThing');
		$Something = new Something();

		$joinThingData = array(
			'JoinThing' => array(
				'something_id' => 1,
				'something_else_id' => 2,
				'doomed' => '0',
				'created' => '2007-03-18 10:39:23',
				'updated' => '2007-03-18 10:41:31'
			)
		);

		$Something->JoinThing->create($joinThingData);
		$Something->JoinThing->save();

		$result = $Something->JoinThing->find('all', array('conditions' => array('something_else_id' => 2)));

		$this->assertEquals(true, $result[0]['JoinThing']['doomed']);
		$this->assertEquals(false, $result[1]['JoinThing']['doomed']);

		$result = $Something->find('first');

		$this->assertEquals(2, count($result['SomethingElse']));

		$doomed = Hash::extract($result['SomethingElse'], '{n}.JoinThing.doomed');
		$this->assertTrue(in_array(true, $doomed));
		$this->assertTrue(in_array(false, $doomed));
	}
Ejemplo n.º 2
0
 /**
  * testFetchingNonUniqueFKJoinTableRecords()
  *
  * Tests if the results are properly returned in the case there are non-unique FK's
  * in the join table but another fields value is different. For example:
  * something_id | something_else_id | doomed = 1
  * something_id | something_else_id | doomed = 0
  * Should return both records and not just one.
  *
  * @access public
  * @return void
  */
 function testFetchingNonUniqueFKJoinTableRecords()
 {
     $this->loadFixtures('Something', 'SomethingElse', 'JoinThing');
     $Something = new Something();
     $joinThingData = array('JoinThing' => array('something_id' => 1, 'something_else_id' => 2, 'doomed' => '0', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31'));
     $Something->JoinThing->create($joinThingData);
     $Something->JoinThing->save();
     $result = $Something->JoinThing->find('all', array('conditions' => array('something_else_id' => 2)));
     $this->assertEqual($result[0]['JoinThing']['doomed'], 1);
     $this->assertEqual($result[1]['JoinThing']['doomed'], 0);
     $result = $Something->find('first');
     $this->assertEqual(count($result['SomethingElse']), 2);
     $this->assertEqual($result['SomethingElse'][0]['JoinThing']['doomed'], 1);
     $this->assertEqual($result['SomethingElse'][1]['JoinThing']['doomed'], 0);
 }
 /**
  * test after find callback on related model
  * 
  * @return void 
  */
 public function testRelatedAfterFindCallback()
 {
     $this->loadFixtures('Something', 'SomethingElse', 'JoinThing');
     $Something = new Something();
     $Something->bindModel(array('hasMany' => array('HasMany' => array('className' => 'JoinThing', 'foreignKey' => 'something_id')), 'hasOne' => array('HasOne' => array('className' => 'JoinThing', 'foreignKey' => 'something_id'))));
     $results = $Something->find('all');
     $expected = array(array('Something' => array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31'), 'HasOne' => array('id' => '1', 'something_id' => '1', 'something_else_id' => '2', 'doomed' => true, 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'afterFind' => 'Successfully added by AfterFind'), 'HasMany' => array(array('id' => '1', 'something_id' => '1', 'something_else_id' => '2', 'doomed' => true, 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'afterFind' => 'Successfully added by AfterFind')), 'SomethingElse' => array(array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'afterFind' => 'Successfully added by AfterFind', 'JoinThing' => array('doomed' => true, 'something_id' => '1', 'something_else_id' => '2', 'afterFind' => 'Successfully added by AfterFind')))), array('Something' => array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31'), 'HasOne' => array('id' => '2', 'something_id' => '2', 'something_else_id' => '3', 'doomed' => false, 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'afterFind' => 'Successfully added by AfterFind'), 'HasMany' => array(array('id' => '2', 'something_id' => '2', 'something_else_id' => '3', 'doomed' => false, 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'afterFind' => 'Successfully added by AfterFind')), 'SomethingElse' => array(array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'afterFind' => 'Successfully added by AfterFind', 'JoinThing' => array('doomed' => false, 'something_id' => '2', 'something_else_id' => '3', 'afterFind' => 'Successfully added by AfterFind')))), array('Something' => array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31'), 'HasOne' => array('id' => '3', 'something_id' => '3', 'something_else_id' => '1', 'doomed' => true, 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'afterFind' => 'Successfully added by AfterFind'), 'HasMany' => array(array('id' => '3', 'something_id' => '3', 'something_else_id' => '1', 'doomed' => true, 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'afterFind' => 'Successfully added by AfterFind')), 'SomethingElse' => array(array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'afterFind' => 'Successfully added by AfterFind', 'JoinThing' => array('doomed' => true, 'something_id' => '3', 'something_else_id' => '1', 'afterFind' => 'Successfully added by AfterFind')))));
     $this->assertEquals($expected, $results, 'Model related with has* afterFind callback fails');
     $JoinThing = new JoinThing();
     $JoinThing->unbindModel(array('belongsTo' => array('Something')));
     $results = $JoinThing->find('all');
     $expected = array(array('JoinThing' => array('id' => '1', 'something_id' => '1', 'something_else_id' => '2', 'doomed' => true, 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'afterFind' => 'Successfully added by AfterFind'), 'SomethingElse' => array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'afterFind' => 'Successfully added by AfterFind')), array('JoinThing' => array('id' => '2', 'something_id' => '2', 'something_else_id' => '3', 'doomed' => false, 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'afterFind' => 'Successfully added by AfterFind'), 'SomethingElse' => array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'afterFind' => 'Successfully added by AfterFind')), array('JoinThing' => array('id' => '3', 'something_id' => '3', 'something_else_id' => '1', 'doomed' => true, 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'afterFind' => 'Successfully added by AfterFind'), 'SomethingElse' => array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'afterFind' => 'Successfully added by AfterFind')));
     $this->assertEquals($expected, $results, 'Model related with belongsTo afterFind callback fails');
 }
Ejemplo n.º 4
0
 /**
  * testWithAssociation method
  *
  * @return void
  */
 public function testWithAssociation()
 {
     $this->loadFixtures('Something', 'SomethingElse', 'JoinThing');
     $TestModel = new Something();
     $result = $TestModel->SomethingElse->find('all');
     $expected = array(array('SomethingElse' => array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'afterFind' => 'Successfully added by AfterFind'), 'Something' => array(array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'JoinThing' => array('id' => '3', 'something_id' => '3', 'something_else_id' => '1', 'doomed' => true, 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'afterFind' => 'Successfully added by AfterFind')))), array('SomethingElse' => array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'afterFind' => 'Successfully added by AfterFind'), 'Something' => array(array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'JoinThing' => array('id' => '1', 'something_id' => '1', 'something_else_id' => '2', 'doomed' => true, 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'afterFind' => 'Successfully added by AfterFind')))), array('SomethingElse' => array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'afterFind' => 'Successfully added by AfterFind'), 'Something' => array(array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'JoinThing' => array('id' => '2', 'something_id' => '2', 'something_else_id' => '3', 'doomed' => false, 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'afterFind' => 'Successfully added by AfterFind')))));
     $this->assertEquals($expected, $result);
     $result = $TestModel->find('all');
     $expected = array(array('Something' => array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31'), 'SomethingElse' => array(array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'JoinThing' => array('doomed' => true, 'something_id' => '1', 'something_else_id' => '2', 'afterFind' => 'Successfully added by AfterFind'), 'afterFind' => 'Successfully added by AfterFind'))), array('Something' => array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31'), 'SomethingElse' => array(array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'JoinThing' => array('doomed' => false, 'something_id' => '2', 'something_else_id' => '3', 'afterFind' => 'Successfully added by AfterFind'), 'afterFind' => 'Successfully added by AfterFind'))), array('Something' => array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31'), 'SomethingElse' => array(array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'JoinThing' => array('doomed' => true, 'something_id' => '3', 'something_else_id' => '1', 'afterFind' => 'Successfully added by AfterFind'), 'afterFind' => 'Successfully added by AfterFind'))));
     $this->assertEquals($expected, $result);
     $result = $TestModel->findById(1);
     $expected = array('Something' => array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31'), 'SomethingElse' => array(array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'JoinThing' => array('doomed' => true, 'something_id' => '1', 'something_else_id' => '2', 'afterFind' => 'Successfully added by AfterFind'), 'afterFind' => 'Successfully added by AfterFind')));
     $this->assertEquals($expected, $result);
     $expected = $TestModel->findById(1);
     $TestModel->set($expected);
     $TestModel->save();
     $result = $TestModel->findById(1);
     $this->assertEquals($expected, $result);
     $TestModel->hasAndBelongsToMany['SomethingElse']['unique'] = false;
     $TestModel->create(array('Something' => array('id' => 1), 'SomethingElse' => array(3, array('something_else_id' => 1, 'doomed' => true))));
     $TestModel->save();
     $TestModel->hasAndBelongsToMany['SomethingElse']['order'] = 'SomethingElse.id ASC';
     $result = $TestModel->findById(1);
     $expected = array('Something' => array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23'), 'SomethingElse' => array(array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'JoinThing' => array('doomed' => true, 'something_id' => '1', 'something_else_id' => '1', 'afterFind' => 'Successfully added by AfterFind'), 'afterFind' => 'Successfully added by AfterFind'), array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'JoinThing' => array('doomed' => true, 'something_id' => '1', 'something_else_id' => '2', 'afterFind' => 'Successfully added by AfterFind'), 'afterFind' => 'Successfully added by AfterFind'), array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'JoinThing' => array('doomed' => false, 'something_id' => '1', 'something_else_id' => '3', 'afterFind' => 'Successfully added by AfterFind'), 'afterFind' => 'Successfully added by AfterFind')));
     $this->assertEquals(self::date(), $result['Something']['updated']);
     unset($result['Something']['updated']);
     $this->assertEquals($expected, $result);
 }
Ejemplo n.º 5
0
 /**
  * test that saveAll and with models with validation interact well
  *
  * @return void
  */
 public function testValidatesWithModelsAndSaveAll()
 {
     $this->loadFixtures('Something', 'SomethingElse', 'JoinThing');
     $data = array('Something' => array('id' => 5, 'title' => 'Extra Fields', 'body' => 'Extra Fields Body', 'published' => '1'), 'SomethingElse' => array(array('something_else_id' => 1, 'doomed' => '')));
     $Something = new Something();
     $JoinThing = $Something->JoinThing;
     $JoinThing->validate = array('doomed' => array('rule' => 'notEmpty'));
     $expectedError = array('doomed' => array('This field cannot be left blank'));
     $Something->create();
     $result = $Something->saveAll($data, array('validate' => 'only'));
     $this->assertFalse($result);
     $result = $Something->validateAssociated($data);
     $this->assertFalse($result);
     $this->assertEquals($expectedError, $JoinThing->validationErrors);
     $result = $Something->validator()->validateAssociated($data);
     $this->assertFalse($result);
     $Something->create();
     $result = $Something->saveAll($data, array('validate' => 'first'));
     $this->assertFalse($result);
     $this->assertEquals($expectedError, $JoinThing->validationErrors);
     $count = $Something->find('count', array('conditions' => array('Something.id' => $data['Something']['id'])));
     $this->assertSame(0, $count);
     $joinRecords = $JoinThing->find('count', array('conditions' => array('JoinThing.something_id' => $data['Something']['id'])));
     $this->assertEquals(0, $joinRecords, 'Records were saved on the join table. %s');
 }
 /**
  * testWithAssociation method
  *
  * @access public
  * @return void
  */
 function testWithAssociation()
 {
     $this->loadFixtures('Something', 'SomethingElse', 'JoinThing');
     $TestModel = new Something();
     $result = $TestModel->SomethingElse->find('all');
     $expected = array(array('SomethingElse' => array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31'), 'Something' => array(array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'JoinThing' => array('id' => '3', 'something_id' => '3', 'something_else_id' => '1', 'doomed' => '1', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31')))), array('SomethingElse' => array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31'), 'Something' => array(array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'JoinThing' => array('id' => '1', 'something_id' => '1', 'something_else_id' => '2', 'doomed' => '1', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31')))), array('SomethingElse' => array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31'), 'Something' => array(array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'JoinThing' => array('id' => '2', 'something_id' => '2', 'something_else_id' => '3', 'doomed' => '0', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31')))));
     $this->assertEqual($result, $expected);
     $result = $TestModel->find('all');
     $expected = array(array('Something' => array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31'), 'SomethingElse' => array(array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'JoinThing' => array('doomed' => '1', 'something_id' => '1', 'something_else_id' => '2')))), array('Something' => array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31'), 'SomethingElse' => array(array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'JoinThing' => array('doomed' => '0', 'something_id' => '2', 'something_else_id' => '3')))), array('Something' => array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31'), 'SomethingElse' => array(array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'JoinThing' => array('doomed' => '1', 'something_id' => '3', 'something_else_id' => '1')))));
     $this->assertEqual($result, $expected);
     $result = $TestModel->findById(1);
     $expected = array('Something' => array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31'), 'SomethingElse' => array(array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'JoinThing' => array('doomed' => '1', 'something_id' => '1', 'something_else_id' => '2'))));
     $this->assertEqual($result, $expected);
     $expected = $TestModel->findById(1);
     $TestModel->set($expected);
     $TestModel->save();
     $result = $TestModel->findById(1);
     $this->assertEqual($result, $expected);
     $TestModel->hasAndBelongsToMany['SomethingElse']['unique'] = false;
     $TestModel->create(array('Something' => array('id' => 1), 'SomethingElse' => array(3, array('something_else_id' => 1, 'doomed' => '1'))));
     $ts = date('Y-m-d H:i:s');
     $TestModel->save();
     $TestModel->hasAndBelongsToMany['SomethingElse']['order'] = 'SomethingElse.id ASC';
     $result = $TestModel->findById(1);
     $expected = array('Something' => array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => $ts), 'SomethingElse' => array(array('id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31', 'JoinThing' => array('doomed' => '1', 'something_id' => '1', 'something_else_id' => '1')), array('id' => '2', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31', 'JoinThing' => array('doomed' => '1', 'something_id' => '1', 'something_else_id' => '2')), array('id' => '3', 'title' => 'Third Post', 'body' => 'Third Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:43:23', 'updated' => '2007-03-18 10:45:31', 'JoinThing' => array('doomed' => '0', 'something_id' => '1', 'something_else_id' => '3'))));
     $this->assertEqual($result, $expected);
 }