Passed
Push — fix-9163 ( 64dde5...3df94b )
by Sam
17:47 queued 10:54
created

GridFieldStateManagerTest::testStateKey()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 16
nc 1
nop 0
dl 0
loc 20
rs 9.7333
c 1
b 0
f 0
1
<?php
2
3
namespace SilverStripe\Forms\Tests\GridField;
4
5
use SilverStripe\Control\Controller;
6
use SilverStripe\Control\HTTPRequest;
7
use SilverStripe\Dev\SapphireTest;
8
use SilverStripe\Forms\FieldList;
9
use SilverStripe\Forms\GridField\GridField;
10
use SilverStripe\Forms\GridField\GridFieldDetailForm;
11
use SilverStripe\Forms\GridField\GridFieldDetailForm_ItemRequest;
12
use SilverStripe\Forms\GridField\GridFieldStateManager;
13
use SilverStripe\Forms\Form;
14
use SilverStripe\Forms\Tests\GridField\GridFieldPrintButtonTest\TestObject;
15
use SilverStripe\View\ArrayData;
16
17
class GridFieldStateManagerTest extends SapphireTest
18
{
19
    public function testStateKey()
20
    {
21
        $manager = new GridFieldStateManager();
22
        $controller = new Controller();
23
        $form1 = new Form($controller, 'form1', new FieldList(), new FieldList());
24
        $itemRequest = new GridFieldDetailForm_ItemRequest(
25
            new GridField('test'),
26
            new GridFieldDetailForm(),
27
            new TestObject(),
28
            $controller,
29
            'itemRequest'
30
        );
31
        $form2 = new Form($itemRequest, 'form1', new FieldList(), new FieldList());
32
33
        $grid1 = new GridField('A');
34
        $grid2 = new GridField('B');
35
        $grid1->setForm($form1);
36
        $grid2->setForm($form2);
37
        $this->assertEquals('gridState-A-0', $manager->getStateKey($grid1));
38
        $this->assertEquals('gridState-B-1', $manager->getStateKey($grid2));
39
    }
40
41
    public function testAddStateToURL()
42
    {
43
        $manager = new GridFieldStateManager();
44
        $grid = new GridField('TestGrid');
45
        $grid->getState()->testValue = 'foo';
0 ignored issues
show
Bug Best Practice introduced by
The property testValue does not exist on SilverStripe\Forms\GridField\GridState_Data. Since you implemented __set, consider adding a @property annotation.
Loading history...
46
        $link = '/link-to/something';
47
        $state = $grid->getState(false)->Value();
48
        $this->assertEquals(
49
            '/link-to/something?gridState-TestGrid-0=' . urlencode($state),
50
            $manager->addStateToURL($grid, $link)
51
        );
52
53
        $link = '/link-to/something-else?someParam=somevalue';
54
        $state = $grid->getState(false)->Value();
55
        $this->assertEquals(
56
            '/link-to/something-else?someParam=somevalue&gridState-TestGrid-0=' . urlencode($state),
57
            $manager->addStateToURL($grid, $link)
58
        );
59
    }
60
61
    public function testGetStateFromRequest()
62
    {
63
        $manager = new GridFieldStateManager();
64
        $controller = new Controller();
65
        $form = new Form($controller, 'form1', new FieldList(), new FieldList());
66
        $grid = new GridField('TestGrid');
67
        $grid->setForm($form);
68
69
        $grid->getState()->testValue = 'foo';
0 ignored issues
show
Bug Best Practice introduced by
The property testValue does not exist on SilverStripe\Forms\GridField\GridState_Data. Since you implemented __set, consider adding a @property annotation.
Loading history...
70
        $state = urlencode($grid->getState(false)->Value());
71
        $request = new HTTPRequest(
72
            'GET',
73
            '/link-to/something',
74
            [
75
                $manager->getStateKey($grid) => $state
76
            ]
77
        );
78
        $result = $manager->getStateFromRequest($grid, $request);
79
80
        $this->assertEquals($state, $result);
81
    }
82
}
83