47ac481617aeb4849a1af7bb6c3d42757647b784
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Batch / BatchBuilderTest.php
1 <?php
2
3 namespace Drupal\Tests\Core\Batch;
4
5 use Drupal\Core\Batch\BatchBuilder;
6 use Drupal\Core\StringTranslation\TranslatableMarkup;
7 use Drupal\Tests\UnitTestCase;
8
9 /**
10  * Tests for the batch builder class.
11  *
12  * @coversDefaultClass \Drupal\Core\Batch\BatchBuilder
13  *
14  * @group system
15  */
16 class BatchBuilderTest extends UnitTestCase {
17
18   /**
19    * Tests the default values.
20    *
21    * @covers ::toArray
22    */
23   public function testDefaultValues() {
24     $batch = (new BatchBuilder())->toArray();
25
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);
45   }
46
47   /**
48    * Tests setTitle().
49    *
50    * @covers ::setTitle
51    */
52   public function testSetTitle() {
53     $batch = (new BatchBuilder())
54       ->setTitle(new TranslatableMarkup('New Title'))
55       ->toArray();
56
57     $this->assertEquals(new TranslatableMarkup('New Title'), $batch['title']);
58   }
59
60   /**
61    * Tests setFinishCallback().
62    *
63    * @covers ::setFinishCallback
64    */
65   public function testSetFinishCallback() {
66     $batch = (new BatchBuilder())
67       ->setFinishCallback('\Drupal\Tests\Core\Batch\BatchBuilderTest::finishedCallback')
68       ->toArray();
69
70     $this->assertEquals('\Drupal\Tests\Core\Batch\BatchBuilderTest::finishedCallback', $batch['finished']);
71   }
72
73   /**
74    * Tests setInitMessage().
75    *
76    * @covers ::setInitMessage
77    */
78   public function testSetInitMessage() {
79     $batch = (new BatchBuilder())
80       ->setInitMessage(new TranslatableMarkup('New initialization message.'))
81       ->toArray();
82
83     $this->assertEquals(new TranslatableMarkup('New initialization message.'), $batch['init_message']);
84   }
85
86   /**
87    * Tests setProgressMessage().
88    *
89    * @covers ::setProgressMessage
90    */
91   public function testSetProgressMessage() {
92     $batch = (new BatchBuilder())
93       ->setProgressMessage(new TranslatableMarkup('Batch in progress...'))
94       ->toArray();
95
96     $this->assertEquals(new TranslatableMarkup('Batch in progress...'), $batch['progress_message']);
97   }
98
99   /**
100    * Tests setErrorMessage().
101    */
102   public function testSetErrorMessage() {
103     $batch = (new BatchBuilder())
104       ->setErrorMessage(new TranslatableMarkup('Oops. An error has occurred :('))
105       ->toArray();
106
107     $this->assertEquals(new TranslatableMarkup('Oops. An error has occurred :('), $batch['error_message']);
108   }
109
110   /**
111    * Tests setFile().
112    *
113    * @covers ::setFile
114    */
115   public function testSetFile() {
116     $batch = (new BatchBuilder())
117       ->setFile('filename.php')
118       ->toArray();
119
120     $this->assertEquals('filename.php', $batch['file']);
121   }
122
123   /**
124    * Tests setting and adding libraries.
125    *
126    * @covers ::setLibraries
127    */
128   public function testAddingLibraries() {
129     $batch = (new BatchBuilder())
130       ->setLibraries(['only/library'])
131       ->toArray();
132
133     $this->assertEquals(['only/library'], $batch['library']);
134   }
135
136   /**
137    * Tests setProgressive().
138    *
139    * @covers ::setProgressive
140    */
141   public function testSetProgressive() {
142     $batch_builder = new BatchBuilder();
143     $batch = $batch_builder
144       ->setProgressive(FALSE)
145       ->toArray();
146
147     $this->assertFalse($batch['progressive']);
148
149     $batch = $batch_builder
150       ->setProgressive(TRUE)
151       ->toArray();
152
153     $this->assertTrue($batch['progressive']);
154   }
155
156   /**
157    * Tests setQueue().
158    *
159    * @covers ::setQueue
160    */
161   public function testSetQueue() {
162     $batch = (new BatchBuilder())
163       ->setQueue('BatchName', '\Drupal\Core\Queue\Batch')
164       ->toArray();
165
166     $this->assertArrayEquals([
167       'name' => 'BatchName',
168       'class' => '\Drupal\Core\Queue\Batch',
169     ], $batch['queue'], 'Batch queue has been set.');
170   }
171
172   /**
173    * Tests queue class exists.
174    *
175    * @covers ::setQueue
176    */
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');
181   }
182
183   /**
184    * Tests queue class implements \Drupal\Core\Queue\QueueInterface.
185    *
186    * @covers ::setQueue
187    */
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);
192   }
193
194   /**
195    * Tests setUrlOptions().
196    *
197    * @covers ::setUrlOptions
198    */
199   public function testSetUrlOptions() {
200     $options = [
201       'absolute' => TRUE,
202       'language' => 'de',
203     ];
204     $batch = (new BatchBuilder())
205       ->setUrlOptions($options)
206       ->toArray();
207
208     $this->assertEquals($options, $batch['url_options']);
209   }
210
211   /**
212    * Tests addOperation().
213    *
214    * @covers ::addOperation
215    */
216   public function testAddOperation() {
217     $batch_builder = new BatchBuilder();
218     $batch = $batch_builder
219       ->addOperation('\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback')
220       ->toArray();
221
222     $this->assertEquals([
223       ['\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', []],
224     ], $batch['operations']);
225
226     $batch = $batch_builder
227       ->addOperation('\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [2])
228       ->addOperation('\Drupal\Tests\Core\Batch\BatchBuilderTest::operationCallback', [3])
229       ->toArray();
230
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']);
236   }
237
238   /**
239    * Empty callback for the tests.
240    *
241    * @internal
242    */
243   public static function finishedCallback() {
244   }
245
246   /**
247    * Empty callback for the tests.
248    *
249    * @internal
250    */
251   public static function operationCallback() {
252   }
253
254 }