You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

275 lines
11 KiB

  1. <?php
  2. /**
  3. * mock class to access the helper_plugin_move_plan::stepThroughDocuments function in tests
  4. */
  5. class helper_plugin_move_plan_mock extends helper_plugin_move_plan {
  6. public $moveLog = array();
  7. public function __construct() {
  8. parent::__construct();
  9. $this->MoveOperator = new helper_plugin_move_op_mock;
  10. }
  11. public function stepThroughDocumentsCall($type = parent::TYPE_PAGES, $skip = false) {
  12. return $this->stepThroughDocuments($type, $skip);
  13. }
  14. public function getMoveOperator() {
  15. return $this->MoveOperator;
  16. }
  17. public function setMoveOperator($newMoveOPerator) {
  18. $this->MoveOperator = $newMoveOPerator;
  19. }
  20. public function build_log_line($type, $from, $to, $success) {
  21. $logEntry = array($type,$from,$to,$success);
  22. array_push($this->moveLog,$logEntry);
  23. return parent::build_log_line($type, $from, $to, $success);
  24. }
  25. }
  26. class helper_plugin_move_op_mock extends helper_plugin_move_op {
  27. public $movedPages = array();
  28. public $fail = false;
  29. public function movePage($src, $dst) {
  30. if ($this->fail !== false && count($this->movedPages) == $this->fail) {
  31. $this->fail=false;
  32. // Store a msg as it is expected by the plugin
  33. msg("Intentional failure in test case.", -1);
  34. return false;
  35. }
  36. $moveOperation = array($src => $dst);
  37. array_push($this->movedPages,$moveOperation);
  38. return true;
  39. }
  40. }
  41. /**
  42. * Test cases for helper_plugin_move_plan::stepThroughDocuments function of the move plugin
  43. *
  44. * @group plugin_move
  45. * @group plugin_move_unittests
  46. * @group plugins
  47. * @group unittests
  48. */
  49. class plugin_move_stepThroughDocuments_test extends DokuWikiTest {
  50. public function setUp(): void {
  51. parent::setUp();
  52. $opts_file = dirname(DOKU_CONF) . '/data/meta/__move_opts';
  53. if(file_exists($opts_file)){
  54. unlink($opts_file);
  55. }
  56. $file = "oldns:page01\tnewns:page01\n"
  57. . "oldns:page02\tnewns:page02\n"
  58. . "oldns:page03\tnewns:page03\n"
  59. . "oldns:page04\tnewns:page04\n"
  60. . "oldns:page05\tnewns:page05\n"
  61. . "oldns:page06\tnewns:page06\n"
  62. . "oldns:page07\tnewns:page07\n"
  63. . "oldns:page08\tnewns:page08\n"
  64. . "oldns:page09\tnewns:page09\n"
  65. . "oldns:page10\tnewns:page10\n"
  66. . "oldns:page11\tnewns:page11\n"
  67. . "oldns:page12\tnewns:page12\n"
  68. . "oldns:page13\tnewns:page13\n"
  69. . "oldns:page14\tnewns:page14\n"
  70. . "oldns:page15\tnewns:page15\n"
  71. . "oldns:page16\tnewns:page16\n"
  72. . "oldns:page17\tnewns:page17\n"
  73. . "oldns:page18\tnewns:page18";
  74. $file_path = dirname(DOKU_CONF) . '/data/meta/__move_pagelist';
  75. io_saveFile($file_path,$file);
  76. }
  77. /**
  78. * @covers helper_plugin_move_plan::stepThroughDocuments
  79. */
  80. public function test_stepThroughPages() {
  81. $file_path = dirname(DOKU_CONF) . '/data/meta/__move_pagelist';
  82. $mock = new helper_plugin_move_plan_mock();
  83. $actual_return = $mock->stepThroughDocumentsCall();
  84. $actual_file = file_get_contents($file_path);
  85. $expected_file = "oldns:page01\tnewns:page01\n"
  86. . "oldns:page02\tnewns:page02\n"
  87. . "oldns:page03\tnewns:page03\n"
  88. . "oldns:page04\tnewns:page04\n"
  89. . "oldns:page05\tnewns:page05\n"
  90. . "oldns:page06\tnewns:page06\n"
  91. . "oldns:page07\tnewns:page07\n"
  92. . "oldns:page08\tnewns:page08";
  93. $expected_pages_run = -10;
  94. $this->assertSame($expected_pages_run,$actual_return,"return values differ");
  95. $this->assertSame($expected_file,$actual_file, "files differ");
  96. $actual_move_Operator = $mock->getMoveOperator();
  97. $this->assertSame(array('oldns:page18' => 'newns:page18',),$actual_move_Operator->movedPages[0]);
  98. $this->assertSame(array('oldns:page09' => 'newns:page09',),$actual_move_Operator->movedPages[9]);
  99. $this->assertTrue(!isset($actual_move_Operator->movedPages[10]));
  100. $expected_log = array('P','oldns:page18','newns:page18',true);
  101. $this->assertSame($expected_log,$mock->moveLog[0]);
  102. $expected_log = array('P','oldns:page09','newns:page09',true);
  103. $this->assertSame($expected_log,$mock->moveLog[9]);
  104. $this->assertTrue(!isset($mock->moveLog[10]));
  105. $opts_file = dirname(DOKU_CONF) . '/data/meta/__move_opts';
  106. $actual_options = unserialize(io_readFile($opts_file));
  107. $this->assertSame($expected_pages_run,$actual_options['pages_run'],'saved options are wrong');
  108. }
  109. /**
  110. * @covers helper_plugin_move_plan::stepThroughDocuments
  111. */
  112. public function test_stepThroughPages_skip() {
  113. $file_path = dirname(DOKU_CONF) . '/data/meta/__move_pagelist';
  114. $mock = new helper_plugin_move_plan_mock();
  115. $actual_return = $mock->stepThroughDocumentsCall(1,true);
  116. $actual_file = file_get_contents($file_path);
  117. $expected_file = "oldns:page01\tnewns:page01\n"
  118. . "oldns:page02\tnewns:page02\n"
  119. . "oldns:page03\tnewns:page03\n"
  120. . "oldns:page04\tnewns:page04\n"
  121. . "oldns:page05\tnewns:page05\n"
  122. . "oldns:page06\tnewns:page06\n"
  123. . "oldns:page07\tnewns:page07\n"
  124. . "oldns:page08\tnewns:page08";
  125. $expected_pages_run = -10;
  126. $this->assertSame($expected_pages_run,$actual_return,"return values differ");
  127. $this->assertSame($expected_file,$actual_file, "files differ");
  128. $actual_move_Operator = $mock->getMoveOperator();
  129. $this->assertSame(array('oldns:page17' => 'newns:page17',),$actual_move_Operator->movedPages[0]);
  130. $this->assertSame(array('oldns:page09' => 'newns:page09',),$actual_move_Operator->movedPages[8]);
  131. $this->assertTrue(!isset($actual_move_Operator->movedPages[9]));
  132. $expected_log = array('P','oldns:page17','newns:page17',true);
  133. $this->assertSame($expected_log,$mock->moveLog[0]);
  134. $expected_log = array('P','oldns:page09','newns:page09',true);
  135. $this->assertSame($expected_log,$mock->moveLog[8]);
  136. $this->assertTrue(!isset($mock->moveLog[9]));
  137. $opts_file = dirname(DOKU_CONF) . '/data/meta/__move_opts';
  138. $actual_options = unserialize(io_readFile($opts_file));
  139. $this->assertSame($expected_pages_run,$actual_options['pages_run'],'saved options are wrong');
  140. }
  141. /**
  142. * @covers helper_plugin_move_plan::stepThroughDocuments
  143. */
  144. public function test_stepThroughPages_fail() {
  145. $file_path = dirname(DOKU_CONF) . '/data/meta/__move_pagelist';
  146. $mock = new helper_plugin_move_plan_mock();
  147. $fail_at_item = 5;
  148. $actual_move_Operator = $mock->getMoveOperator();
  149. $actual_move_Operator->fail = $fail_at_item;
  150. $mock->setMoveOperator($actual_move_Operator);
  151. $actual_return = $mock->stepThroughDocumentsCall();
  152. $actual_file = file_get_contents($file_path);
  153. $expected_file = "oldns:page01\tnewns:page01\n"
  154. . "oldns:page02\tnewns:page02\n"
  155. . "oldns:page03\tnewns:page03\n"
  156. . "oldns:page04\tnewns:page04\n"
  157. . "oldns:page05\tnewns:page05\n"
  158. . "oldns:page06\tnewns:page06\n"
  159. . "oldns:page07\tnewns:page07\n"
  160. . "oldns:page08\tnewns:page08\n"
  161. . "oldns:page09\tnewns:page09\n"
  162. . "oldns:page10\tnewns:page10\n"
  163. . "oldns:page11\tnewns:page11\n"
  164. . "oldns:page12\tnewns:page12\n"
  165. . "oldns:page13\tnewns:page13";
  166. $expected_pages_run = false;
  167. $this->assertSame($expected_pages_run,$actual_return,"return values differ");
  168. $this->assertSame($expected_file,$actual_file, "files differ");
  169. $actual_move_Operator = $mock->getMoveOperator();
  170. $this->assertSame(array('oldns:page18' => 'newns:page18',),$actual_move_Operator->movedPages[0]);
  171. $lastIndex = 4;
  172. $this->assertSame(array('oldns:page14' => 'newns:page14',),$actual_move_Operator->movedPages[$lastIndex]);
  173. $this->assertTrue(!isset($actual_move_Operator->movedPages[$lastIndex + 1]));
  174. $expected_log = array('P','oldns:page13','newns:page13',false);
  175. $this->assertSame($expected_log,$mock->moveLog[5]);
  176. $this->assertTrue(!isset($mock->moveLog[6]));
  177. $opts_file = dirname(DOKU_CONF) . '/data/meta/__move_opts';
  178. $actual_options = unserialize(io_readFile($opts_file));
  179. $this->assertSame(-$fail_at_item,$actual_options['pages_run'],'saved options are wrong');
  180. }
  181. /**
  182. * @covers helper_plugin_move_plan::stepThroughDocuments
  183. */
  184. public function test_stepThroughPages_fail_autoskip() {
  185. global $conf;
  186. $conf['plugin']['move']['autoskip'] = '1';
  187. $file_path = dirname(DOKU_CONF) . '/data/meta/__move_pagelist';
  188. $mock = new helper_plugin_move_plan_mock();
  189. $actual_move_Operator = $mock->getMoveOperator();
  190. $actual_move_Operator->fail = 5;
  191. $mock->setMoveOperator($actual_move_Operator);
  192. $actual_return = $mock->stepThroughDocumentsCall();
  193. $expected_pages_run = -10;
  194. $this->assertSame($expected_pages_run,$actual_return,"return values differ");
  195. $actual_file = file_get_contents($file_path);
  196. $expected_file = "oldns:page01\tnewns:page01\n"
  197. . "oldns:page02\tnewns:page02\n"
  198. . "oldns:page03\tnewns:page03\n"
  199. . "oldns:page04\tnewns:page04\n"
  200. . "oldns:page05\tnewns:page05\n"
  201. . "oldns:page06\tnewns:page06\n"
  202. . "oldns:page07\tnewns:page07\n"
  203. . "oldns:page08\tnewns:page08";
  204. $this->assertSame($expected_file,$actual_file, "files differ");
  205. $actual_move_Operator = $mock->getMoveOperator();
  206. $this->assertSame(array('oldns:page18' => 'newns:page18',),$actual_move_Operator->movedPages[0]);
  207. $lastIndex = 8;
  208. $this->assertSame(array('oldns:page09' => 'newns:page09',),$actual_move_Operator->movedPages[$lastIndex]);
  209. $this->assertTrue(!isset($actual_move_Operator->movedPages[$lastIndex + 1]), "The number of moved pages is incorrect");
  210. $expected_log = array('P','oldns:page18','newns:page18',true);
  211. $this->assertSame($expected_log,$mock->moveLog[0]);
  212. $expected_log = array('P','oldns:page13','newns:page13',false);
  213. $this->assertSame($expected_log,$mock->moveLog[5]);
  214. $expected_log = array('P','oldns:page09','newns:page09',true);
  215. $this->assertSame($expected_log,$mock->moveLog[9]);
  216. $this->assertTrue(!isset($mock->moveLog[10]), "The number of logged items is incorrect");
  217. $opts_file = dirname(DOKU_CONF) . '/data/meta/__move_opts';
  218. $actual_options = unserialize(io_readFile($opts_file));
  219. $this->assertSame($expected_pages_run,$actual_options['pages_run'],'saved options are wrong');
  220. }
  221. }