‪TYPO3CMS  ‪main
TaskSerializerTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
26 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
27 
28 final class ‪TaskSerializerTest extends UnitTestCase
29 {
30  public static function ‪dataIsDeserializedDataProvider(): array
31  {
32  $testTaskWithString = new ‪TestTask();
33  $testTaskWithString->any = [bin2hex(random_bytes(10))];
34 
35  $testTaskWithStdClass = new ‪TestTask();
36  $testTaskWithStdClass->any = [new \stdClass()];
37 
38  return [
39  'TestTask with string' => [
40  serialize($testTaskWithString),
41  $testTaskWithString,
42  ],
43  'TestTask with stdClass' => [
44  serialize($testTaskWithStdClass),
45  $testTaskWithStdClass,
46  ],
47  ];
48  }
49 
50  #[DataProvider('dataIsDeserializedDataProvider')]
51  #[Test]
52  public function ‪dataIsDeserialized(string $data, $expectation): void
53  {
54  $taskSerializer = new ‪TaskSerializer();
55  self::assertEquals($expectation, $taskSerializer->deserialize($data));
56  }
57 
58  public static function ‪deserializationThrowsExceptionDataProvider(): array
59  {
60  // as reported in https://forge.typo3.org/issues/92466 & https://forge.typo3.org/issues/91766
61  $testTaskWithNullWriter = new ‪TestTask();
62  $testTaskWithNullWriter->any = [new ‪NullWriter()];
63 
64  return [
65  'blank' => [
66  '',
67  1642956282,
68  ],
69  'invalid' => [
70  '{}',
71  1642956282,
72  ],
73  'invalid task' => [
74  'O:29:"TYPO3\CMS\Testing\InvalidTask":1:{s:5:"value";s:5:"value";}',
75  1642954501,
76  ],
77  'invalid root type' => [
78  'a:1:{i:0;O:29:"TYPO3\CMS\Testing\InvalidTask":1:{s:5:"value";s:5:"value";}}',
79  1642954501,
80  ],
81  'TestTask with NullWriter' => [
82  serialize($testTaskWithNullWriter),
83  1642938352,
84  ],
85  ];
86  }
87 
88  #[DataProvider('deserializationThrowsExceptionDataProvider')]
89  #[Test]
90  public function ‪deserializationThrowsException(string $data, int $exceptionCode): void
91  {
92  $this->expectException(InvalidTaskException::class);
93  $this->expectExceptionCode($exceptionCode);
94  $taskSerializer = new ‪TaskSerializer();
95  $taskSerializer->deserialize($data);
96  }
97 
98  public static function ‪classNameIsResolvedDataProvider(): array
99  {
100  $missingTaskData = 'O:29:"TYPO3\CMS\Testing\MissingTask":0:{}';
101  $missingTask = unserialize($missingTaskData, ['allowed_classes' => false]);
102 
103  return [
104  'stdClass' => [
105  new \stdClass(),
106  \stdClass::class,
107  ],
108  'MissingTask' => [
109  $missingTask,
110  'TYPO3\CMS\Testing\MissingTask',
111  ],
112  ];
113  }
114 
115  #[DataProvider('classNameIsResolvedDataProvider')]
116  #[Test]
117  public function ‪classNameIsResolved(?object $task, ?string $expectation): void
118  {
119  $taskSerializer = new ‪TaskSerializer();
120  self::assertSame($expectation, $taskSerializer->resolveClassName($task));
121  }
122 
123  public static function ‪classNameIsExtractedDataProvider(): array
124  {
125  return [
126  'from object serialization' => [
127  'O:29:"TYPO3\CMS\Testing\MissingTask":0:{}',
128  'TYPO3\CMS\Testing\MissingTask',
129  ],
130  'from (invalid) array serialization #1' => [
131  'a:1:{i:0;O:29:"TYPO3\CMS\Testing\MissingTask":0:{}}',
132  null,
133  ],
134  'from (invalid) array serialization #2' => [
135  'a:1:{s:4:"I-am";s:8:"an-array";}',
136  null,
137  ],
138  ];
139  }
140 
141  #[DataProvider('classNameIsExtractedDataProvider')]
142  #[Test]
143  public function ‪classNameIsExtracted(string $serializedTask, ?string $expectation): void
144  {
145  $taskSerializer = new ‪TaskSerializer();
146  self::assertSame($expectation, $taskSerializer->extractClassName($serializedTask));
147  }
148 }
‪TYPO3\CMS\Scheduler\Tests\Unit\Task\TaskSerializerTest\classNameIsResolvedDataProvider
‪static classNameIsResolvedDataProvider()
Definition: TaskSerializerTest.php:98
‪TYPO3\CMS\Scheduler\Task\TaskSerializer
Definition: TaskSerializer.php:28
‪TYPO3\CMS\Scheduler\Tests\Unit\Task\TaskSerializerTest\classNameIsExtracted
‪classNameIsExtracted(string $serializedTask, ?string $expectation)
Definition: TaskSerializerTest.php:143
‪TYPO3\CMS\Scheduler\Tests\Unit\Task\TaskSerializerTest\dataIsDeserialized
‪dataIsDeserialized(string $data, $expectation)
Definition: TaskSerializerTest.php:52
‪TYPO3\CMS\Scheduler\Tests\Unit\Task\TaskSerializerTest\deserializationThrowsException
‪deserializationThrowsException(string $data, int $exceptionCode)
Definition: TaskSerializerTest.php:90
‪TYPO3\CMS\Scheduler\Tests\Unit\Task\Fixtures\TestTask
Definition: TestTask.php:23
‪TYPO3\CMS\Scheduler\Tests\Unit\Task\TaskSerializerTest\deserializationThrowsExceptionDataProvider
‪static deserializationThrowsExceptionDataProvider()
Definition: TaskSerializerTest.php:58
‪TYPO3\CMS\Scheduler\Tests\Unit\Task\TaskSerializerTest\classNameIsResolved
‪classNameIsResolved(?object $task, ?string $expectation)
Definition: TaskSerializerTest.php:117
‪TYPO3\CMS\Scheduler\Tests\Unit\Task
Definition: CachingFrameworkGarbageCollectionTest.php:18
‪TYPO3\CMS\Core\Log\Writer\NullWriter
Definition: NullWriter.php:24
‪TYPO3\CMS\Scheduler\Tests\Unit\Task\TaskSerializerTest
Definition: TaskSerializerTest.php:29
‪TYPO3\CMS\Scheduler\Tests\Unit\Task\TaskSerializerTest\dataIsDeserializedDataProvider
‪static dataIsDeserializedDataProvider()
Definition: TaskSerializerTest.php:30
‪TYPO3\CMS\Scheduler\Tests\Unit\Task\TaskSerializerTest\classNameIsExtractedDataProvider
‪static classNameIsExtractedDataProvider()
Definition: TaskSerializerTest.php:123
‪TYPO3\CMS\Scheduler\Exception\InvalidTaskException
Definition: InvalidTaskException.php:26