/** * 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'])); }
/** * 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'); }