|
2 | 2 |
|
3 | 3 | namespace SilverStripe\Forms\Tests; |
4 | 4 |
|
| 5 | +use PHPUnit\Framework\Attributes\DataProvider; |
5 | 6 | use SilverStripe\Forms\Tests\ListboxFieldTest\Article; |
6 | 7 | use SilverStripe\Forms\Tests\ListboxFieldTest\Tag; |
7 | 8 | use SilverStripe\Forms\Tests\ListboxFieldTest\TestObject; |
|
11 | 12 | use SilverStripe\Forms\ListboxField; |
12 | 13 | use SilverStripe\Forms\Validation\RequiredFieldsValidator; |
13 | 14 | use SilverStripe\Model\ArrayData; |
14 | | -use PHPUnit\Framework\Attributes\DataProvider; |
15 | 15 |
|
16 | 16 | class ListboxFieldTest extends SapphireTest |
17 | 17 | { |
@@ -119,6 +119,58 @@ public function testSaveIntoMultiple() |
119 | 119 | $this->assertEquals('["a","c"]', $obj2->Choices); |
120 | 120 | } |
121 | 121 |
|
| 122 | + public static function provideSaveIntoValueScenarios(): array |
| 123 | + { |
| 124 | + return [ |
| 125 | + 'mixed-values' => [ |
| 126 | + 'input' => [null, 0, false, '123', -123, '', '0', 'ABC123'], |
| 127 | + 'expected' => [null, 0, false, '123', -123, '', '0', 'ABC123'], |
| 128 | + ], |
| 129 | + 'string-values' => [ |
| 130 | + 'input' => ['123', '0', '-123', '', 'ABC123'], |
| 131 | + 'expected' => ['123', '0', '-123', '', 'ABC123'], |
| 132 | + ], |
| 133 | + 'integer-values' => [ |
| 134 | + 'input' => [0, 123, -123], |
| 135 | + 'expected' => [0, 123, -123], |
| 136 | + ], |
| 137 | + 'boolean-values' => [ |
| 138 | + 'input' => [false, true], |
| 139 | + 'expected' => [false, true], |
| 140 | + ], |
| 141 | + 'null-only' => [ |
| 142 | + 'input' => [null], |
| 143 | + 'expected' => [null], |
| 144 | + ], |
| 145 | + 'scalar-zero' => [ |
| 146 | + 'input' => 0, |
| 147 | + 'expected' => [0], |
| 148 | + ], |
| 149 | + 'scalar-string-zero' => [ |
| 150 | + 'input' => '0', |
| 151 | + 'expected' => ['0'], |
| 152 | + ], |
| 153 | + ]; |
| 154 | + } |
| 155 | + |
| 156 | + #[DataProvider('provideSaveIntoValueScenarios')] |
| 157 | + public function testSaveIntoPreservesValueTypes(mixed $input, array $expected): void |
| 158 | + { |
| 159 | + $choices = [ |
| 160 | + '' => 'Empty string', |
| 161 | + 0 => 'Zero', |
| 162 | + '123' => 'String integer', |
| 163 | + -123 => 'Negative integer', |
| 164 | + 'ABC123' => 'Alpha-numeric string', |
| 165 | + 'false' => 'False string', |
| 166 | + ]; |
| 167 | + $field = new ListboxField('Choices', 'Choices', $choices); |
| 168 | + $obj = new TestObject(); |
| 169 | + $field->setValue($input); |
| 170 | + $field->saveInto($obj); |
| 171 | + $this->assertSame($expected, json_decode($obj->Choices, true)); |
| 172 | + } |
| 173 | + |
122 | 174 | public function testSaveIntoManyManyRelation() |
123 | 175 | { |
124 | 176 | $article = $this->objFromFixture(Article::class, 'articlewithouttags'); |
|
0 commit comments