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