/**
  * Page::getCommitters()
  * このページのコミッター一覧を取得する。(コミット日付の昇順)
  * コミッターのメールアドレスが連想配列のキーになる
  *
  * @return Doctrine_Collection
  */
 public function getCommitters()
 {
     CommitTable::getInstance()->setAttribute(Doctrine_Core::ATTR_COLL_KEY, 'committer_email');
     $committers = Doctrine_Query::create()->from('Commit c')->where('c.page_id = ?', $this->getId())->orderBy('c.committed_at asc')->execute();
     CommitTable::getInstance()->setAttribute(Doctrine_Core::ATTR_COLL_KEY, 'id');
     return $committers;
 }
Doctrine_Core::loadData(dirname(__FILE__) . '/CommitFixture.yml');
$t = new lime_test(12);
// construct
$t->diag('__construct()');
$t->ok(new Commit() instanceof Commit, 'Commitインスタンス化');
$page = PageTable::getInstance()->findOneByPath('/foo/bar');
// create
$t->diag('create');
$commit = new Commit();
$commit->setCommittedAt('2010/05/19 01:02:03');
$commit->setAuthorHandle('author_handle');
$commit->setAuthorEmail('author_email');
$commit->setCommitterHandle('committer_handle');
$commit->setCommitterEmail('committer_email');
$commit->setCommitKey('commit_key');
$commit->setPage($page);
$commit->save();
$commit = CommitTable::getInstance()->findOneByCommitKey('commit_key');
$t->ok($commit instanceof Commit, 'レコードが正しく保存された');
$t->is($commit->getDateTimeObject('committed_at')->format('Y/m/d H:i:s'), '2010/05/19 01:02:03', 'コミット日時の保存');
$t->is($commit->getAuthorHandle(), 'author_handle', '作者ハンドルの保存');
$t->is($commit->getAuthorEmail(), 'author_email', '作者メールアドレスの保存');
$t->is($commit->getCommitterHandle(), 'committer_handle', 'コミッターハンドルの保存');
$t->is($commit->getCommitterEmail(), 'committer_email', 'コミッターメールアドレスの保存');
$t->is($commit->getCommitKey(), 'commit_key', 'コミットキー保存');
// getCommitterGravatarUrl
$t->diag('getCommitterGravatarUrl()');
$t->is($commit->getCommitterGravatarUrl(), 'http://www.gravatar.com/avatar/' . md5($commit->getCommitterEmail()) . '?s=24', 'gravatarの画像URL');
$t->is($commit->getCommitterGravatarUrl(32), 'http://www.gravatar.com/avatar/' . md5($commit->getCommitterEmail()) . '?s=32', 'gravatarの画像URL(サイズ指定)');
$t->is($commit->getCommitterGravatarUrl(512), 'http://www.gravatar.com/avatar/' . md5($commit->getCommitterEmail()) . '?s=512', 'gravatarの画像URL(サイズは512まで)');
$t->is($commit->getCommitterGravatarUrl(513), 'http://www.gravatar.com/avatar/' . md5($commit->getCommitterEmail()), 'gravatarの画像URL(サイズが512より大きい場合は無視)');
<?php

// test/unit/model/doctrine/CommitTableTest.php
require_once dirname(__FILE__) . '/../../../bootstrap/unit.php';
// test環境でDB初期化
$configuration = ProjectConfiguration::getApplicationConfiguration('taskapp', 'test', true);
new sfDatabaseManager($configuration);
Doctrine_Core::loadData(dirname(__FILE__) . '/CommitFixture.yml');
$t = new lime_test(12);
// getInstance
$t->diag('getInstance()');
$table = CommitTable::getInstance();
$t->ok($table instanceof CommitTable, 'テーブルインスタンス取得');
// レコード取得
$t->diag('findAll()');
$list = $table->findAll();
$t->is(count($list), 2, 'レコード全件取得');
// レコード取得
$t->diag('findOne***()');
$commit = $table->findOneByCommitKey('commit1');
$t->ok($commit instanceof Commit, 'レコードの取得成功');
$t->is($commit->getCommitterHandle(), 'hidenori', '取得したレコードのデータが正常');
// 最新のコミット
$t->diag('getLatestCommit()');
//  ページを取得しておく
$page = PageTable::getInstance()->findOneByPath('/foo/bar');
$commit = CommitTable::getLatestCommit($page->getId());
$t->ok($commit instanceof Commit, 'コミットレコード取得成功');
$t->is($commit->getCommitKey(), 'commit2', 'コミット日付が新しい方のレコード');
$commit = CommitTable::getLatestCommit(-1);
$t->is($commit, null, 'ページIDに対応するコミットレコードがない場合は、null');