Ejemplo n.º 1
0
 public function testbelongsToAndHasManyRelationships()
 {
     $a = PicoraActiveRecord::create('Album', array('name' => 'Dark Side of the Moon', 'artist' => 'Pink Floyd', 'time' => '43:23', 'track_count' => 0));
     $b = PicoraActiveRecord::create('Album', array('name' => 'Piper at the Gates of Dawn', 'artist' => 'Pink Floyd', 'time' => '42:10', 'track_count' => 0));
     $a->reload();
     $b->reload();
     $this->assertEqual(array(), $a->getTrackList());
     $this->assertEqual(array(), $b->getTrackList());
     $this->assertEqual(0, $a->getTrackCount());
     $this->assertEqual(0, $b->getTrackCount());
     $this->assertEqual(0, $a->track_count);
     $this->assertEqual(0, $b->track_count);
     $a1 = $a->buildTrack(array('name' => 'Track 01', 'time' => '4:12'));
     $this->assertEqual($a->id, $a1->album_id);
     $this->assertTrue($a1->save());
     $this->assertTrue($a->reload());
     $this->assertEqual(array($a1), $a->getTrackList());
     $this->assertEqual(array(), $b->getTrackList());
     $this->assertEqual(1, $a->getTrackCount());
     $this->assertEqual(0, $b->getTrackCount());
     $this->assertEqual(1, $a->track_count);
     $this->assertEqual(0, $b->track_count);
     $a2 = $a->createTrack(array('name' => 'Track 02', 'time' => '5:03'));
     $a3 = $a->createTrack(array('name' => 'Track 03', 'time' => '3:46'));
     $a->reload();
     $this->assertEqual(array($a1, $a2, $a3), $a->getTrackList());
     $this->assertEqual(array($a1, $a3), $a->getTrackList(array('where' => 'tracks.id IN (' . $a1->id . ',' . $a3->id . ')', 'order' => 'tracks.id ASC')));
     $this->assertEqual(array($a3, $a1), $a->getTrackList(array('where' => 'tracks.id IN (' . $a1->id . ',' . $a3->id . ')', 'order' => 'tracks.id DESC')));
     $this->assertEqual(3, $a->getTrackCount());
     $this->assertEqual(1, $a->getTrackCount(array('where' => 'tracks.id = ' . $a2->id)));
     $this->assertEqual(3, $a->track_count);
     $this->assertEqual(3, count(PicoraActiveRecord::findAll('Track')));
     $this->assertEqual(1, $a->deleteTrack($a3->id));
     $a->reload();
     $this->assertEqual(2, $a->getTrackCount());
     $this->assertEqual(2, $a->track_count);
     $a2->delete();
     $a->reload();
     $this->assertEqual(1, $a->getTrackCount());
     $this->assertEqual(1, $a->track_count);
     $a1->delete();
     $a->reload();
     $this->assertEqual(0, $a->getTrackCount());
     $this->assertEqual(0, $a->track_count);
     $a1 = $a->createTrack(array('name' => 'Track 01', 'time' => '4:12'));
     $a2 = $a->createTrack(array('name' => 'Track 02', 'time' => '5:03'));
     $a3 = $a->createTrack(array('name' => 'Track 03', 'time' => '3:46'));
     $a->reload();
     $this->assertEqual(3, $a->getTrackCount());
     $this->assertEqual(3, $a->track_count);
     $this->assertEqual(3, PicoraActiveRecord::count('Track'));
     $a->delete();
     $this->assertEqual(0, PicoraActiveRecord::count('Track'));
     $this->assertFalse(PicoraActiveRecord::find('Track', $a1->id));
     $this->assertFalse($a2->reload());
     //test belongsTo
     $b1 = $b->createTrack(array('name' => 'Track 01', 'time' => '6:32'));
     $b2 = $b->createTrack(array('name' => 'Track 02', 'time' => '6:42'));
     $b->reload();
     $this->assertEqual(2, $b->getTrackCount());
     $this->assertEqual(2, $b->track_count);
     $this->assertEqual($b, $b1->getAlbum());
     $c1 = PicoraActiveRecord::create('Track', array('name' => 'Track 01', 'time' => '5:11', 'album_id' => 0));
     $d1 = PicoraActiveRecord::create('Track', array('name' => 'Track 01', 'time' => '5:11', 'album_id' => 0));
     $this->assertFalse($c1->getAlbum());
     $this->assertEqual(0, $c1->album_id);
     $c = $c1->createAlbum(array('name' => '69 Love Songs', 'artist' => 'Magnetic Fields', 'time' => '43:32'));
     $this->assertEqual($c->id, $c1->album_id);
     $this->assertEqual(1, $c->getTrackCount());
     $this->assertEqual(1, $c->track_count);
     $c->createTrack(array('name' => 'Track 02', 'time' => '4:11'));
     $c->reload();
     $this->assertEqual(2, $c->getTrackCount());
     $this->assertEqual(2, $c->track_count);
 }