1<?php
2
3namespace dokuwiki\plugin\farmsync\test;
4
5/**
6 * @group plugin_farmsync
7 * @group plugins
8 * @author Michael Große <grosse@cosmocode.de>
9 *
10 */
11class addRemoteChangelogRevision_farmsync_test extends \DokuWikiTest {
12    protected $pluginsEnabled = array('farmsync');
13
14    public function setUp() {
15        parent::setUp();
16
17        $changelog_text = "1422353621	127.0.0.1	C	unittests	user0	created
181422353856	127.0.0.1	E	unittests	user1
191422353857	127.0.0.1	E	unittests	user2	[Links]
201426689052	127.0.0.1	C	de:unittests	user3	↷ Page moved from unittests to en:unittests
211426689152	127.0.0.1	C	unittests	user2	↷ Page moved from en:unittests to unittests
221427888702	127.0.0.1	E	unittests	user1	[Links] 	";
23        $fn = DOKU_TMP_DATA . 'meta/test.changes';
24        io_saveFile($fn, $changelog_text);
25    }
26
27    public function test_addRemoteChangelogRevision_appendLine() {
28        // arrange
29        /** @var \admin_plugin_farmsync $admin */
30        $farm_util = new \dokuwiki\plugin\farmsync\meta\FarmSyncUtil();
31        $fn = DOKU_TMP_DATA . 'meta/test.changes';
32
33        $original_file = io_readFile($fn);
34        $testline = '1461330568	127.0.0.1	E	unittests	admin	New';
35
36        // act
37        $result = $farm_util->addRemoteChangelogRevision($fn, $testline, false);
38        $actual_file = io_readFile($fn);
39
40        // assert
41        $this->assertEquals($original_file . "\n" . $testline . "\n", $actual_file);
42        $this->assertEquals(array(), $result);
43    }
44
45    public function test_addRemoteChangelogRevision_addNonexistingLine() {
46        // arrange
47        /** @var \admin_plugin_farmsync $admin */
48        $farm_util = new \dokuwiki\plugin\farmsync\meta\FarmSyncUtil();
49        $fn = DOKU_TMP_DATA . 'meta/test.changes';
50
51        $testline = '1422353850	127.0.0.1	E	unittests	admin	New';
52
53        // act
54        $result = $farm_util->addRemoteChangelogRevision($fn, $testline, false);
55        $actual_file = io_readFile($fn);
56
57        // assert
58        $expected_file = "1422353621	127.0.0.1	C	unittests	user0	created
59$testline
601422353856	127.0.0.1	E	unittests	user1
611422353857	127.0.0.1	E	unittests	user2	[Links]
621426689052	127.0.0.1	C	de:unittests	user3	↷ Page moved from unittests to en:unittests
631426689152	127.0.0.1	C	unittests	user2	↷ Page moved from en:unittests to unittests
641427888702	127.0.0.1	E	unittests	user1	[Links] 	\n";
65        $this->assertEquals($expected_file, $actual_file);
66        $this->assertEquals(array(), $result);
67    }
68
69    public function test_addRemoteChangelogRevision_addNonexistingLine_truncate() {
70        // arrange
71        /** @var \admin_plugin_farmsync $admin */
72        $farm_util = new \dokuwiki\plugin\farmsync\meta\FarmSyncUtil();
73        $fn = DOKU_TMP_DATA . 'meta/test.changes';
74
75        $testline = '1422353850	127.0.0.1	E	unittests	admin	New';
76
77        // act
78        $result = $farm_util->addRemoteChangelogRevision($fn, $testline, true);
79        $actual_file = io_readFile($fn);
80
81        // assert
82        $expected_file = "1422353621	127.0.0.1	C	unittests	user0	created
83$testline\n";
84        $this->assertEquals($expected_file, $actual_file);
85        $this->assertEquals(array(), $result);
86    }
87
88    public function test_addRemoteChangelogRevision_addExistingLine_move1rev() {
89        // arrange
90        /** @var \admin_plugin_farmsync $admin */
91        $farm_util = new \dokuwiki\plugin\farmsync\meta\FarmSyncUtil();
92        $fn = DOKU_TMP_DATA . 'meta/test.changes';
93
94        $testline = '1422353856	127.0.0.1	E	unittests	admin	New';
95
96        // act
97        $result = $farm_util->addRemoteChangelogRevision($fn, $testline, false);
98        $actual_file = io_readFile($fn);
99
100        // assert
101        $expected_file = "1422353621	127.0.0.1	C	unittests	user0	created
1021422353855	127.0.0.1	E	unittests	user1
103$testline
1041422353857	127.0.0.1	E	unittests	user2	[Links]
1051426689052	127.0.0.1	C	de:unittests	user3	↷ Page moved from unittests to en:unittests
1061426689152	127.0.0.1	C	unittests	user2	↷ Page moved from en:unittests to unittests
1071427888702	127.0.0.1	E	unittests	user1	[Links] 	\n";
108        $this->assertEquals($expected_file, $actual_file);
109        $this->assertEquals(array(1422353856), $result);
110    }
111
112    public function test_addRemoteChangelogRevision_addExistingLine_move2revs() {
113        // arrange
114        /** @var \admin_plugin_farmsync $admin */
115        $farm_util = new \dokuwiki\plugin\farmsync\meta\FarmSyncUtil();
116        $fn = DOKU_TMP_DATA . 'meta/test.changes';
117
118        $testline = '1422353857	127.0.0.1	E	unittests	admin	New';
119
120        // act
121        $result = $farm_util->addRemoteChangelogRevision($fn, $testline, false);
122        $actual_file = io_readFile($fn);
123
124        // assert
125        $expected_file = "1422353621	127.0.0.1	C	unittests	user0	created
1261422353855	127.0.0.1	E	unittests	user1
1271422353856	127.0.0.1	E	unittests	user2	[Links]
128$testline
1291426689052	127.0.0.1	C	de:unittests	user3	↷ Page moved from unittests to en:unittests
1301426689152	127.0.0.1	C	unittests	user2	↷ Page moved from en:unittests to unittests
1311427888702	127.0.0.1	E	unittests	user1	[Links] 	\n";
132        $this->assertEquals($expected_file, $actual_file);
133        $this->assertEquals(array(1422353856, 1422353857), $result);
134    }
135
136    /**
137     * @expectedException \Exception
138     * @expectedExceptionMessage 2nd Argument must start with timestamp!
139     */
140    public function test_addRemoteChangelogRevision_Exception() {
141        $farm_util = new \dokuwiki\plugin\farmsync\meta\FarmSyncUtil();
142        $fn = DOKU_TMP_DATA . 'meta/test.changes';
143
144        $testline = 'not starting with timestamp';
145
146        $farm_util->addRemoteChangelogRevision($fn, $testline);
147    }
148}
149