BatchBuilderTest.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <?php
  2. namespace Drupal\Tests\Core\Batch;
  3. use Drupal\Core\Batch\BatchBuilder;
  4. use Drupal\Core\StringTranslation\TranslatableMarkup;
  5. use Drupal\Tests\UnitTestCase;
  6. /**
  7. * Tests for the batch builder class.
  8. *
  9. * @coversDefaultClass \Drupal\Core\Batch\BatchBuilder
  10. *
  11. * @group system
  12. */
  13. class BatchBuilderTest extends UnitTestCase {
  14. /**
  15. * Tests the default values.
  16. *
  17. * @covers ::toArray
  18. */
  19. public function testDefaultValues() {
  20. $batch = (new BatchBuilder())->toArray();
  21. $this->assertIsArray($batch);
  22. $this->assertArrayHasKey('operations', $batch);
  23. $this->assertIsArray($batch['operations']);
  24. $this->assertEmpty($batch['operations'], 'Operations array is empty.');
  25. $this->assertEquals(new TranslatableMarkup('Processing'), $batch['title']);
  26. $this->assertEquals(new TranslatableMarkup('Initializing.'), $batch['init_message']);
  27. $this->assertEquals(new TranslatableMarkup('Completed @current of @total.'), $batch['progress_message']);
  28. $this->assertEquals(new TranslatableMarkup('An error has occurred.'), $batch['error_message']);
  29. $this->assertNull($batch['finished']);
  30. $this->assertNull($batch['file']);
  31. $this->assertArrayHasKey('library', $batch);
  32. $this->assertIsArray($batch['library']);
  33. $this->assertEmpty($batch['library']);
  34. $this->assertArrayHasKey('url_options', $batch);
  35. $this->assertIsArray($batch['url_options']);
  36. $this->assertEmpty($batch['url_options']);
  37. $this->assertArrayHasKey('progressive', $batch);
  38. $this->assertTrue($batch['progressive']);
  39. $this->assertArrayNotHasKey('queue', $batch);
  40. }
  41. /**
  42. * Tests setTitle().
  43. *
  44. * @covers ::setTitle
  45. */
  46. public function testSetTitle() {
  47. $batch = (new BatchBuilder())
  48. ->setTitle(new TranslatableMarkup('New Title'))
  49. ->toArray();
  50. $this->assertEquals(new TranslatableMarkup('New Title'), $batch['title']);
  51. }
  52. /**
  53. * Tests setFinishCallback().
  54. *
  55. * @covers ::setFinishCallback
  56. */
  57. public function testSetFinishCallback() {
  58. $batch = (new BatchBuilder())
  59. ->setFinishCallback('\Drupal\Tests\Core\Batch\BatchBuilderTest::finishedCallback')
  60. ->toArray();
  61. $this->assertEquals('\Drupal\Tests\Core\Batch\BatchBuilderTest::finishedCallback', $batch['finished']);
  62. }
  63. /**
  64. * Tests setInitMessage().
  65. *
  66. * @covers ::setInitMessage
  67. */
  68. public function testSetInitMessage() {
  69. $batch = (new BatchBuilder())
  70. ->setInitMessage(new TranslatableMarkup('New initialization message.'))
  71. ->toArray();
  72. $this->assertEquals(new TranslatableMarkup('New initialization message.'), $batch['init_message']);
  73. }
  74. /**
  75. * Tests setProgressMessage().
  76. *
  77. * @covers ::setProgressMessage
  78. */
  79. public function testSetProgressMessage() {
  80. $batch = (new BatchBuilder())
  81. ->setProgressMessage(new TranslatableMarkup('Batch in progress...'))
  82. ->toArray();
  83. $this->assertEquals(new TranslatableMarkup('Batch in progress...'), $batch['progress_message']);
  84. }
  85. /**
  86. * Tests setErrorMessage().
  87. */
  88. public function testSetErrorMessage() {
  89. $batch = (new BatchBuilder())
  90. ->setErrorMessage(new TranslatableMarkup('Oops. An error has occurred :('))
  91. ->toArray();
  92. $this->assertEquals(new TranslatableMarkup('Oops. An error has occurred :('), $batch['error_message']);
  93. }
  94. /**
  95. * Tests setFile().
  96. *
  97. * @covers ::setFile
  98. */
  99. public function testSetFile() {
  100. $filename = dirname(__DIR__, 6) . '/core/modules/system/tests/modules/batch_test/batch_test.callbacks.inc';
  101. $this->assertIsNotCallable('_batch_test_callback_1');
  102. $this->assertIsNotCallable('_batch_test_finished_1');
  103. $batch = (new BatchBuilder())
  104. ->setFile($filename)
  105. ->setFinishCallback('_batch_test_finished_1')
  106. ->addOperation('_batch_test_callback_1', [])
  107. ->toArray();
  108. $this->assertEquals($filename, $batch['file']);
  109. $this->assertEquals([['_batch_test_callback_1', []]], $batch['operations']);
  110. $this->assertEquals('_batch_test_finished_1', $batch['finished']);
  111. $this->assertIsCallable('_batch_test_callback_1');
  112. $this->assertIsCallable('_batch_test_finished_1');
  113. }
  114. /**
  115. * Tests setting and adding libraries.
  116. *
  117. * @covers ::setLibraries
  118. */
  119. public function testAddingLibraries() {
  120. $batch = (new BatchBuilder())
  121. ->setLibraries(['only/library'])
  122. ->toArray();
  123. $this->assertEquals(['only/library'], $batch['library']);
  124. }
  125. /**
  126. * Tests setProgressive().
  127. *
  128. * @covers ::setProgressive
  129. */
  130. public function testSetProgressive() {
  131. $batch_builder = new BatchBuilder();
  132. $batch = $batch_builder
  133. ->setProgressive(FALSE)
  134. ->toArray();
  135. $this->assertFalse($batch['progressive']);
  136. $batch = $batch_builder
  137. ->setProgressive(TRUE)
  138. ->toArray();
  139. $this->assertTrue($batch['progressive']);
  140. }
  141. /**
  142. * Tests setQueue().
  143. *
  144. * @covers ::setQueue
  145. */
  146. public function testSetQueue() {
  147. $batch = (new BatchBuilder())
  148. ->setQueue('BatchName', '\Drupal\Core\Queue\Batch')
  149. ->toArray();
  150. $this->assertArrayEquals([
  151. 'name' => 'BatchName',
  152. 'class' => '\Drupal\Core\Queue\Batch',
  153. ], $batch['queue'], 'Batch queue has been set.');
  154. }
  155. /**
  156. * Tests queue class exists.
  157. *
  158. * @covers ::setQueue
  159. */
  160. public function testQueueExists() {
  161. $batch_builder = (new BatchBuilder());
  162. $this->expectException(\InvalidArgumentException::class);
  163. $this->expectExceptionMessage('Class \ThisIsNotAClass does not exist.');
  164. $batch_builder->setQueue('BatchName', '\ThisIsNotAClass');
  165. }
  166. /**
  167. * Tests queue class implements \Drupal\Core\Queue\QueueInterface.
  168. *
  169. * @covers ::setQueue
  170. */
  171. public function testQueueImplements() {
  172. $batch_builder = (new BatchBuilder());
  173. $this->expectException(\InvalidArgumentException::class);
  174. $this->expectExceptionMessage('Class Exception does not implement \Drupal\Core\Queue\QueueInterface.');
  175. $batch_builder->setQueue('BatchName', \Exception::class);
  176. }
  177. /**
  178. * Tests setUrlOptions().
  179. *
  180. * @covers ::setUrlOptions
  181. */
  182. public function testSetUrlOptions() {
  183. $options = [
  184. 'absolute' => TRUE,
  185. 'language' => 'de',
  186. ];
  187. $batch = (new BatchBuilder())
  188. ->setUrlOptions($options)
  189. ->toArray();
  190. $this->assertEquals($options, $batch['url_options']);
  191. }
  192. /**
  193. * Tests addOperation().
  194. *
  195. * @covers ::addOperation
  196. */
  197. public function testAddOperation() {
  198. $batch_builder = new BatchBuilder();
  199. $batch = $batch_builder
  200. ->addOperation('\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback')
  201. ->toArray();
  202. $this->assertEquals([
  203. ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', []],
  204. ], $batch['operations']);
  205. $batch = $batch_builder
  206. ->addOperation('\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [2])
  207. ->addOperation('\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [3])
  208. ->toArray();
  209. $this->assertEquals([
  210. ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', []],
  211. ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [2]],
  212. ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [3]],
  213. ], $batch['operations']);
  214. }
  215. /**
  216. * Empty callback for the tests.
  217. *
  218. * @internal
  219. */
  220. public static function finishedCallback() {
  221. }
  222. /**
  223. * Empty callback for the tests.
  224. *
  225. * @internal
  226. */
  227. public static function operationCallback() {
  228. }
  229. }