Make sure GridState always outputs a JSON Object string

This commit is contained in:
Maxime Rainville 2020-08-17 23:23:42 +12:00
parent 70ffb3297a
commit a43414dedb
2 changed files with 35 additions and 5 deletions

View File

@ -106,11 +106,8 @@ class GridState extends HiddenField
*/ */
public function Value() public function Value()
{ {
if (!$this->data) { $data = $this->data ? $this->data->getChangesArray() : [];
return json_encode([]); return json_encode($data, JSON_FORCE_OBJECT);
}
return json_encode($this->data->getChangesArray());
} }
/** /**

View File

@ -0,0 +1,33 @@
<?php
namespace SilverStripe\Forms\Tests\GridField;
use SilverStripe\Dev\SapphireTest;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridState;
class GridStateTest extends SapphireTest
{
public function testValue()
{
$gridfield = new GridField('Test');
$state = new GridState($gridfield);
$this->assertEquals('{}', $state->Value(), 'GridState without any data has empty JSON object for Value');
$data = $state->getData();
$data->initDefaults(['Foo' => 'Bar']);
$this->assertEquals('{}', $state->Value(), 'GridState without change has empty JSON object for Value');
$data->Foo = 'Barrr';
$this->assertEquals(
'{"Foo":"Barrr"}',
$state->Value(),
'GridState with changes returns has a JSON object string for Value.'
);
}
}