1<?php
2require_once 'VersionControl/Git.php';
3
4require_once dirname(__FILE__) . '/checkFixtures.php';
5
6class VersionControl_Git_Object_CommitTest extends PHPUnit_Framework_TestCase
7{
8  public function testConstruct()
9  {
10    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
11    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
12
13    $this->assertTrue($instance instanceof VersionControl_Git_Object_Commit);
14  }
15
16  public function testCreateInstanceByArrayException()
17  {
18    $this->setExpectedException('VersionControl_Git_Exception');
19
20    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
21    VersionControl_Git_Object_Commit::createInstanceByArray($git, array());
22  }
23
24  public function testCreateInstanceByArray()
25  {
26    $this->assertTrue($this->getCreatedInstance() instanceof VersionControl_Git_Object_Commit);
27  }
28
29  public function testSetTree()
30  {
31    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
32    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
33
34    $this->assertFalse($instance->setTree('cca66138995a95b45a725e8727ee97a20a816d41'));
35    $this->assertNull($instance->setTree('tree cca66138995a95b45a725e8727ee97a20a816d41'));
36  }
37
38  public function testGetTree()
39  {
40    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
41    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
42
43    $this->assertNull($instance->getTree());
44
45    $instance->setTree('tree cca66138995a95b45a725e8727ee97a20a816d41');
46    $this->assertEquals($instance->getTree(), 'cca66138995a95b45a725e8727ee97a20a816d41');
47  }
48
49  public function testSetParents()
50  {
51    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
52    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
53
54    $this->assertFalse($instance->setParents('ddf8aa7e97a206847658c90a26fe740b2e17231a'));
55    $this->assertNull($instance->setParents('parent ddf8aa7e97a206847658c90a26fe740b2e17231a'));
56    $this->assertNull($instance->setParents(array('parent ddf8aa7e97a206847658c90a26fe740b2e17231a', 'parent ddf8aa7e97a206847658c90a26fe740b2e17231a')));
57  }
58
59  public function testHasParents()
60  {
61    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
62    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
63
64    $this->assertFalse($instance->hasParents());
65    $instance->setParents(array('parent ddf8aa7e97a206847658c90a26fe740b2e17231a', 'parent ddf8aa7e97a206847658c90a26fe740b2e17231a'));
66    $this->assertTrue($instance->hasParents());
67  }
68
69  public function testGetParents()
70  {
71    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
72    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
73
74    $this->assertFalse($instance->getParents());
75
76    $instance->setParents(array('parent ddf8aa7e97a206847658c90a26fe740b2e17231a', 'invalid'));
77    $this->assertFalse($instance->getParents());
78
79    $instance->setParents(array('parent ddf8aa7e97a206847658c90a26fe740b2e17231a', 'parent ddf8aa7e97a206847658c90a26fe740b2e17231a'));
80    $parents = $instance->getParents();
81    $this->assertEquals((string)$parents[0], 'ddf8aa7e97a206847658c90a26fe740b2e17231a');
82    $this->assertEquals((string)$parents[1], 'ddf8aa7e97a206847658c90a26fe740b2e17231a');
83    $this->assertEquals(count($parents), 2);
84  }
85
86  public function testSetAuthor()
87  {
88    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
89    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
90
91    $this->assertFalse($instance->setAuthor('Kousuke Ebihara <ebihara@tejimaya.com> 1264003801 +0900'));
92    $this->assertNull($instance->setAuthor('author Kousuke Ebihara <ebihara@tejimaya.com> 1264003801 +0900'));
93  }
94
95  public function testGetAuthor()
96  {
97    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
98    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
99    $instance->setAuthor('author Kousuke Ebihara <ebihara@tejimaya.com> 1264003801 +0900');
100
101    $this->assertEquals($instance->getAuthor(), 'Kousuke Ebihara <ebihara@tejimaya.com>');
102
103    $instance->setAuthor('author Kousuke Ebihara <ebihara@tejimaya.com>');
104    $this->assertNull($instance->getAuthor());
105  }
106
107  public function testGetCreatedAt()
108  {
109    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
110    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
111    $instance->setAuthor('author Kousuke Ebihara <ebihara@tejimaya.com> 1264003801 +0900');
112
113    $this->assertEquals(gmdate('Y-m-d H:i:s', $instance->getCreatedAt()), '2010-01-20 16:10:01');
114
115    $instance->setAuthor('author Kousuke Ebihara <ebihara@tejimaya.com>');
116    $this->assertNull($instance->getCreatedAt());
117  }
118
119  public function testSetCommitter()
120  {
121    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
122    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
123
124    $this->assertFalse($instance->setCommitter('Kousuke Ebihara <ebihara@tejimaya.com> 1264003801 +0900'));
125    $this->assertNull($instance->setCommitter('committer Kousuke Ebihara <ebihara@tejimaya.com> 1264003801 +0900'));
126  }
127
128  public function testGetCommitter()
129  {
130    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
131    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
132    $instance->setCommitter('committer Kousuke Ebihara <ebihara@tejimaya.com> 1264003801 +0900');
133
134    $this->assertEquals($instance->getCommitter(), 'Kousuke Ebihara <ebihara@tejimaya.com>');
135
136    $instance->setCommitter('committer Kousuke Ebihara <ebihara@tejimaya.com>');
137    $this->assertNull($instance->getCommitter());
138  }
139
140  public function testGetCommittedAt()
141  {
142    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
143    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
144    $instance->setCommitter('committer Kousuke Ebihara <ebihara@tejimaya.com> 1264003801 +0900');
145
146    $this->assertEquals(gmdate('Y-m-d H:i:s', $instance->getCommittedAt()), '2010-01-20 16:10:01');
147
148    $instance->setCommitter('committer Kousuke Ebihara <ebihara@tejimaya.com>');
149    $this->assertNull($instance->getCommittedAt());
150  }
151
152  public function testSetMessage()
153  {
154    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
155    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
156
157    $instance->setMessage('message');
158    $this->assertEquals($instance->getMessage(), 'message');
159  }
160
161  public function testFetchException()
162  {
163    $this->setExpectedException('VersionControl_Git_Exception');
164
165    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
166    $instance = new VersionControl_Git_Object_Commit($git, 'invalid');
167    $instance->fetch();
168  }
169
170  public function testFetch()
171  {
172    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
173    $instance = new VersionControl_Git_Object_Commit($git, '4ed54abb8efca38a0c794ca414b1f296279e0d85');
174    $instance->fetch();
175
176    $this->assertEquals($instance->getTree(), 'cca66138995a95b45a725e8727ee97a20a816d41');
177    $this->assertFalse($instance->hasParents());
178    $this->assertEquals($instance->getAuthor(), 'Kousuke Ebihara <ebihara@tejimaya.com>');
179    $this->assertEquals(gmdate('Y-m-d H:i:s', $instance->getCreatedAt()), '2010-01-20 16:10:01');
180    $this->assertEquals($instance->getCommitter(), 'Kousuke Ebihara <ebihara@tejimaya.com>');
181    $this->assertEquals(gmdate('Y-m-d H:i:s', $instance->getCommittedAt()), '2010-01-20 16:10:01');
182    $this->assertEquals($instance->getMessage(), 'added directories and files');
183  }
184
185  protected function getCreatedInstance()
186  {
187    $git = new VersionControl_Git(dirname(__FILE__) . '/fixtures/001_VersionControl_Git');
188    $instance = VersionControl_Git_Object_Commit::createInstanceByArray($git, array(
189      'commit'    => 'commit 4ed54abb8efca38a0c794ca414b1f296279e0d85',
190      'tree'      => 'tree cca66138995a95b45a725e8727ee97a20a816d41',
191      'parent'    => 'parent ddf8aa7e97a206847658c90a26fe740b2e17231a',
192      'author'    => 'author Kousuke Ebihara <ebihara@tejimaya.com> 1264003801 +0900',
193      'committer' => 'committer Kousuke Ebihara <ebihara@tejimaya.com> 1264003801 +0900',
194    ));
195
196    return $instance;
197  }
198}
199