/**
  * test that saving habtm records respects conditions set in the 'conditions' key
  * for the association.
  *
  * @return void
  */
 public function testHabtmSaveWithConditionsInAssociation()
 {
     $this->loadFixtures('JoinThing', 'Something', 'SomethingElse');
     $Something = new Something();
     $Something->unbindModel(array('hasAndBelongsToMany' => array('SomethingElse')), false);
     $Something->bindModel(array('hasAndBelongsToMany' => array('DoomedSomethingElse' => array('className' => 'SomethingElse', 'joinTable' => 'join_things', 'conditions' => array('JoinThing.doomed' => true), 'unique' => true), 'NotDoomedSomethingElse' => array('className' => 'SomethingElse', 'joinTable' => 'join_things', 'conditions' => array('JoinThing.doomed' => 0), 'unique' => true))), false);
     $result = $Something->read(null, 1);
     $this->assertTrue(empty($result['NotDoomedSomethingElse']));
     $this->assertEquals(1, count($result['DoomedSomethingElse']));
     $data = array('Something' => array('id' => 1), 'NotDoomedSomethingElse' => array('NotDoomedSomethingElse' => array(array('something_else_id' => 2, 'doomed' => 0), array('something_else_id' => 3, 'doomed' => 0))));
     $Something->create($data);
     $result = $Something->save();
     $this->assertFalse(empty($result));
     $result = $Something->read(null, 1);
     $this->assertEquals(2, count($result['NotDoomedSomethingElse']));
     $this->assertEquals(1, count($result['DoomedSomethingElse']));
 }
Ejemplo n.º 2
0
 /**
  * test that validates() checks all the 'with' associations as well for validation
  * as this can cause partial/wrong data insertion.
  *
  * @return void
  */
 public function testValidatesWithAssociations()
 {
     $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->save($data);
     $this->assertFalse($result, 'Save occurred even when with models failed. %s');
     $this->assertEquals($expectedError, $JoinThing->validationErrors);
     $count = $Something->find('count', array('conditions' => array('Something.id' => $data['Something']['id'])));
     $this->assertSame(0, $count);
     $data = array('Something' => array('id' => 5, 'title' => 'Extra Fields', 'body' => 'Extra Fields Body', 'published' => '1'), 'SomethingElse' => array(array('something_else_id' => 1, 'doomed' => 1), array('something_else_id' => 1, 'doomed' => '')));
     $Something->create();
     $result = $Something->save($data);
     $this->assertFalse($result, 'Save occurred even when with models failed. %s');
     $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');
 }
Ejemplo n.º 3
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);
 }
 /**
  * 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);
 }