3 namespace Drupal\Tests\Core\Batch;
5 use Drupal\Core\Batch\BatchBuilder;
6 use Drupal\Core\StringTranslation\TranslatableMarkup;
7 use Drupal\Tests\UnitTestCase;
10 * Tests for the batch builder class.
12 * @coversDefaultClass \Drupal\Core\Batch\BatchBuilder
16 class BatchBuilderTest extends UnitTestCase {
19 * Tests the default values.
23 public function testDefaultValues() {
24 $batch = (new BatchBuilder())->toArray();
26 $this->assertInternalType('array', $batch);
27 $this->assertArrayHasKey('operations', $batch);
28 $this->assertInternalType('array', $batch['operations']);
29 $this->assertEmpty($batch['operations'], 'Operations array is empty.');
30 $this->assertEquals(new TranslatableMarkup('Processing'), $batch['title']);
31 $this->assertEquals(new TranslatableMarkup('Initializing.'), $batch['init_message']);
32 $this->assertEquals(new TranslatableMarkup('Completed @current of @total.'), $batch['progress_message']);
33 $this->assertEquals(new TranslatableMarkup('An error has occurred.'), $batch['error_message']);
34 $this->assertNull($batch['finished']);
35 $this->assertNull($batch['file']);
36 $this->assertArrayHasKey('library', $batch);
37 $this->assertInternalType('array', $batch['library']);
38 $this->assertEmpty($batch['library']);
39 $this->assertArrayHasKey('url_options', $batch);
40 $this->assertInternalType('array', $batch['url_options']);
41 $this->assertEmpty($batch['url_options']);
42 $this->assertArrayHasKey('progressive', $batch);
43 $this->assertTrue($batch['progressive']);
44 $this->assertArrayNotHasKey('queue', $batch);
52 public function testSetTitle() {
53 $batch = (new BatchBuilder())
54 ->setTitle(new TranslatableMarkup('New Title'))
57 $this->assertEquals(new TranslatableMarkup('New Title'), $batch['title']);
61 * Tests setFinishCallback().
63 * @covers ::setFinishCallback
65 public function testSetFinishCallback() {
66 $batch = (new BatchBuilder())
67 ->setFinishCallback('\Drupal\Tests\Core\Batch\BatchBuilderTest::finishedCallback')
70 $this->assertEquals('\Drupal\Tests\Core\Batch\BatchBuilderTest::finishedCallback', $batch['finished']);
74 * Tests setInitMessage().
76 * @covers ::setInitMessage
78 public function testSetInitMessage() {
79 $batch = (new BatchBuilder())
80 ->setInitMessage(new TranslatableMarkup('New initialization message.'))
83 $this->assertEquals(new TranslatableMarkup('New initialization message.'), $batch['init_message']);
87 * Tests setProgressMessage().
89 * @covers ::setProgressMessage
91 public function testSetProgressMessage() {
92 $batch = (new BatchBuilder())
93 ->setProgressMessage(new TranslatableMarkup('Batch in progress...'))
96 $this->assertEquals(new TranslatableMarkup('Batch in progress...'), $batch['progress_message']);
100 * Tests setErrorMessage().
102 public function testSetErrorMessage() {
103 $batch = (new BatchBuilder())
104 ->setErrorMessage(new TranslatableMarkup('Oops. An error has occurred :('))
107 $this->assertEquals(new TranslatableMarkup('Oops. An error has occurred :('), $batch['error_message']);
115 public function testSetFile() {
116 $batch = (new BatchBuilder())
117 ->setFile('filename.php')
120 $this->assertEquals('filename.php', $batch['file']);
124 * Tests setting and adding libraries.
126 * @covers ::setLibraries
128 public function testAddingLibraries() {
129 $batch = (new BatchBuilder())
130 ->setLibraries(['only/library'])
133 $this->assertEquals(['only/library'], $batch['library']);
137 * Tests setProgressive().
139 * @covers ::setProgressive
141 public function testSetProgressive() {
142 $batch_builder = new BatchBuilder();
143 $batch = $batch_builder
144 ->setProgressive(FALSE)
147 $this->assertFalse($batch['progressive']);
149 $batch = $batch_builder
150 ->setProgressive(TRUE)
153 $this->assertTrue($batch['progressive']);
161 public function testSetQueue() {
162 $batch = (new BatchBuilder())
163 ->setQueue('BatchName', '\Drupal\Core\Queue\Batch')
166 $this->assertArrayEquals([
167 'name' => 'BatchName',
168 'class' => '\Drupal\Core\Queue\Batch',
169 ], $batch['queue'], 'Batch queue has been set.');
173 * Tests queue class exists.
177 public function testQueueExists() {
178 $batch_builder = (new BatchBuilder());
179 $this->setExpectedException(\InvalidArgumentException::class, 'Class \ThisIsNotAClass does not exist.');
180 $batch_builder->setQueue('BatchName', '\ThisIsNotAClass');
184 * Tests queue class implements \Drupal\Core\Queue\QueueInterface.
188 public function testQueueImplements() {
189 $batch_builder = (new BatchBuilder());
190 $this->setExpectedException(\InvalidArgumentException::class, 'Class Exception does not implement \Drupal\Core\Queue\QueueInterface.');
191 $batch_builder->setQueue('BatchName', \Exception::class);
195 * Tests setUrlOptions().
197 * @covers ::setUrlOptions
199 public function testSetUrlOptions() {
204 $batch = (new BatchBuilder())
205 ->setUrlOptions($options)
208 $this->assertEquals($options, $batch['url_options']);
212 * Tests addOperation().
214 * @covers ::addOperation
216 public function testAddOperation() {
217 $batch_builder = new BatchBuilder();
218 $batch = $batch_builder
219 ->addOperation('\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback')
222 $this->assertEquals([
223 ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', []],
224 ], $batch['operations']);
226 $batch = $batch_builder
227 ->addOperation('\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [2])
228 ->addOperation('\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [3])
231 $this->assertEquals([
232 ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', []],
233 ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [2]],
234 ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [3]],
235 ], $batch['operations']);
239 * Empty callback for the tests.
243 public static function finishedCallback() {
247 * Empty callback for the tests.
251 public static function operationCallback() {