]> git.immae.eu Git - github/shaarli/Shaarli.git/blame - tests/HistoryTest.php
Compatibility with PHPUnit 9
[github/shaarli/Shaarli.git] / tests / HistoryTest.php
CommitLineData
4306b184
A
1<?php
2
bdc5152d 3namespace Shaarli;
4306b184 4
bdc5152d 5use DateTime;
e26e2060 6use Shaarli\Bookmark\Bookmark;
4306b184 7
a5a9cf23 8class HistoryTest extends \Shaarli\TestCase
4306b184
A
9{
10 /**
11 * @var string History file path
12 */
13 protected static $historyFilePath = 'sandbox/history.php';
14
15 /**
16 * Delete history file.
17 */
8f60e120 18 protected function setUp(): void
4306b184 19 {
e26e2060
A
20 if (file_exists(self::$historyFilePath)) {
21 unlink(self::$historyFilePath);
22 }
4306b184
A
23 }
24
25 /**
26 * Test that the history file is created if it doesn't exist.
27 */
d16ca2e2 28 public function testConstructLazyLoading()
4306b184
A
29 {
30 new History(self::$historyFilePath);
d16ca2e2
A
31 $this->assertFileNotExists(self::$historyFilePath);
32 }
33
34 /**
35 * Test that the history file is created if it doesn't exist.
36 */
37 public function testAddEventCreateFile()
38 {
39 $history = new History(self::$historyFilePath);
40 $history->updateSettings();
4306b184
A
41 $this->assertFileExists(self::$historyFilePath);
42 }
43
44 /**
45 * Not writable history file: raise an exception.
4306b184
A
46 */
47 public function testConstructNotWritable()
48 {
b1baca99
A
49 $this->expectException(\Exception::class);
50 $this->expectExceptionMessage('History file isn\'t readable or writable');
51
4306b184
A
52 touch(self::$historyFilePath);
53 chmod(self::$historyFilePath, 0440);
d16ca2e2
A
54 $history = new History(self::$historyFilePath);
55 $history->updateSettings();
4306b184
A
56 }
57
58 /**
59 * Not parsable history file: raise an exception.
4306b184
A
60 */
61 public function testConstructNotParsable()
62 {
b1baca99
A
63 $this->expectException(\Exception::class);
64 $this->expectExceptionMessageRegExp('/Could not parse history file/');
65
4306b184 66 file_put_contents(self::$historyFilePath, 'not parsable');
d16ca2e2 67 $history = new History(self::$historyFilePath);
4306b184 68 // gzinflate generates a warning
d16ca2e2 69 @$history->updateSettings();
4306b184
A
70 }
71
72 /**
73 * Test add link event
74 */
75 public function testAddLink()
76 {
77 $history = new History(self::$historyFilePath);
e26e2060
A
78 $bookmark = (new Bookmark())->setId(0);
79 $history->addLink($bookmark);
4306b184
A
80 $actual = $history->getHistory()[0];
81 $this->assertEquals(History::CREATED, $actual['event']);
813849e5 82 $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
4306b184
A
83 $this->assertEquals(0, $actual['id']);
84
85 $history = new History(self::$historyFilePath);
e26e2060
A
86 $bookmark = (new Bookmark())->setId(1);
87 $history->addLink($bookmark);
4306b184
A
88 $actual = $history->getHistory()[0];
89 $this->assertEquals(History::CREATED, $actual['event']);
813849e5 90 $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
4306b184
A
91 $this->assertEquals(1, $actual['id']);
92
93 $history = new History(self::$historyFilePath);
e26e2060
A
94 $bookmark = (new Bookmark())->setId('str');
95 $history->addLink($bookmark);
4306b184
A
96 $actual = $history->getHistory()[0];
97 $this->assertEquals(History::CREATED, $actual['event']);
813849e5 98 $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
4306b184
A
99 $this->assertEquals('str', $actual['id']);
100 }
101
e26e2060
A
102// /**
103// * Test updated link event
104// */
105// public function testUpdateLink()
106// {
107// $history = new History(self::$historyFilePath);
108// $history->updateLink(['id' => 1]);
109// $actual = $history->getHistory()[0];
110// $this->assertEquals(History::UPDATED, $actual['event']);
111// $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
112// $this->assertEquals(1, $actual['id']);
113// }
114//
115// /**
116// * Test delete link event
117// */
118// public function testDeleteLink()
119// {
120// $history = new History(self::$historyFilePath);
121// $history->deleteLink(['id' => 1]);
122// $actual = $history->getHistory()[0];
123// $this->assertEquals(History::DELETED, $actual['event']);
124// $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
125// $this->assertEquals(1, $actual['id']);
126// }
127//
128// /**
129// * Test updated settings event
130// */
131// public function testUpdateSettings()
132// {
133// $history = new History(self::$historyFilePath);
134// $history->updateSettings();
135// $actual = $history->getHistory()[0];
136// $this->assertEquals(History::SETTINGS, $actual['event']);
137// $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
138// $this->assertEmpty($actual['id']);
139// }
140//
141// /**
142// * Make sure that new items are stored at the beginning
143// */
144// public function testHistoryOrder()
145// {
146// $history = new History(self::$historyFilePath);
147// $history->updateLink(['id' => 1]);
148// $actual = $history->getHistory()[0];
149// $this->assertEquals(History::UPDATED, $actual['event']);
150// $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
151// $this->assertEquals(1, $actual['id']);
152//
153// $history->addLink(['id' => 1]);
154// $actual = $history->getHistory()[0];
155// $this->assertEquals(History::CREATED, $actual['event']);
156// $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
157// $this->assertEquals(1, $actual['id']);
158// }
159//
160// /**
161// * Re-read history from file after writing an event
162// */
163// public function testHistoryRead()
164// {
165// $history = new History(self::$historyFilePath);
166// $history->updateLink(['id' => 1]);
167// $history = new History(self::$historyFilePath);
168// $actual = $history->getHistory()[0];
169// $this->assertEquals(History::UPDATED, $actual['event']);
170// $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
171// $this->assertEquals(1, $actual['id']);
172// }
173//
174// /**
175// * Re-read history from file after writing an event and make sure that the order is correct
176// */
177// public function testHistoryOrderRead()
178// {
179// $history = new History(self::$historyFilePath);
180// $history->updateLink(['id' => 1]);
181// $history->addLink(['id' => 1]);
182//
183// $history = new History(self::$historyFilePath);
184// $actual = $history->getHistory()[0];
185// $this->assertEquals(History::CREATED, $actual['event']);
186// $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
187// $this->assertEquals(1, $actual['id']);
188//
189// $actual = $history->getHistory()[1];
190// $this->assertEquals(History::UPDATED, $actual['event']);
191// $this->assertTrue(new DateTime('-2 seconds') < $actual['datetime']);
192// $this->assertEquals(1, $actual['id']);
193// }
194//
195// /**
196// * Test retention time: delete old entries.
197// */
198// public function testHistoryRententionTime()
199// {
200// $history = new History(self::$historyFilePath, 5);
201// $history->updateLink(['id' => 1]);
202// $this->assertEquals(1, count($history->getHistory()));
203// $arr = $history->getHistory();
204// $arr[0]['datetime'] = new DateTime('-1 hour');
205// FileUtils::writeFlatDB(self::$historyFilePath, $arr);
206//
207// $history = new History(self::$historyFilePath, 60);
208// $this->assertEquals(1, count($history->getHistory()));
209// $this->assertEquals(1, $history->getHistory()[0]['id']);
210// $history->updateLink(['id' => 2]);
211// $this->assertEquals(1, count($history->getHistory()));
212// $this->assertEquals(2, $history->getHistory()[0]['id']);
213// }
4306b184 214}