Completed
Pull Request — master (#16)
by Simon
06:16
created

PartialFormSubmissionTest::testGetPartialLink()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 20
rs 9.6
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Firesphere\PartialUserforms\Tests;
4
5
use Firesphere\PartialUserforms\Models\PartialFormSubmission;
6
use SilverStripe\Control\Controller;
7
use SilverStripe\Control\Director;
8
use SilverStripe\Core\Injector\Injector;
9
use SilverStripe\Dev\SapphireTest;
10
use SilverStripe\Forms\GridField\GridField;
11
use SilverStripe\UserForms\Model\UserDefinedForm;
12
13
class PartialFormSubmissionTest extends SapphireTest
14
{
15
    /**
16
     * @var bool
17
     */
18
    protected $usesDatabase = true;
19
20
    /**
21
     * @var PartialFormSubmission
22
     */
23
    protected $submission;
24
25
    public function testGetCMSFields()
26
    {
27
        $fields = $this->submission->getCMSFields();
28
29
        $this->assertNull($fields->dataFieldByName('Values'));
30
        $this->assertNull($fields->dataFieldByName('IsSend'));
31
        $this->assertNull($fields->dataFieldByName('TokenSalt'));
32
        $this->assertNull($fields->dataFieldByName('Token'));
33
        $this->assertNull($fields->dataFieldByName('UserDefinedFormID'));
34
        $this->assertInstanceOf(GridField::class, $fields->dataFieldByName('PartialFields'));
35
    }
36
37
    public function testCanCreate()
38
    {
39
        $this->assertFalse($this->submission->canCreate());
40
41
        $this->submission->ParentID = $this->submission->UserDefinedFormID;
42
        $this->submission->UserDefinedFormID = 0;
43
44
        $this->assertFalse($this->submission->canCreate());
45
    }
46
47
    public function testCanView()
48
    {
49
        $this->assertTrue($this->submission->canView());
50
51
        $this->submission->ParentID = $this->submission->UserDefinedFormID;
52
        $this->submission->UserDefinedFormID = 0;
53
54
        $this->assertTrue($this->submission->canView());
55
    }
56
57
    public function testCanEdit()
58
    {
59
        $this->assertTrue($this->submission->canEdit());
60
61
        $this->submission->ParentID = $this->submission->UserDefinedFormID;
62
        $this->submission->UserDefinedFormID = 0;
63
64
        $this->assertTrue($this->submission->canEdit());
65
    }
66
67
    public function testCanDelete()
68
    {
69
        $this->assertTrue($this->submission->canDelete());
70
71
        $this->submission->ParentID = $this->submission->UserDefinedFormID;
72
        $this->submission->UserDefinedFormID = 0;
73
74
        $this->assertTrue($this->submission->canDelete());
75
    }
76
77
    public function testGetParent()
78
    {
79
        $parent = $this->submission->getParent();
80
81
        $this->assertInstanceOf(UserDefinedForm::class, $parent);
82
    }
83
84
    public function testGetPartialLink()
85
    {
86
        $partial = PartialFormSubmission::create();
87
        $this->assertEquals('(none)', $partial->getPartialLink());
88
89
        $partial->write();
90
        $this->assertNotEquals('(none)', $partial->getPartialLink());
91
92
        $partial->Token = 'test-token';
93
        $partial->TokenSalt = 'test-salt';
94
        $partial->write();
95
96
        $link = Controller::join_links(
97
            Director::absoluteBaseURL(),
98
            'partial',
99
            $partial->generateKey('test-token'),
100
            'test-token'
101
        );
102
        $this->assertEquals($link, $partial->getPartialLink());
103
    }
104
105
    public function testGetPartialToken()
106
    {
107
        $partial = PartialFormSubmission::create();
108
        $partial->TokenSalt = 'test-salt';
109
        $this->assertNull(TestHelper::invokeMethod($partial, 'getPartialToken'));
110
111
        $partial->TokenSalt = null;
112
        $partial->write();
113
        $this->assertNotNull(TestHelper::invokeMethod($partial, 'getPartialToken'));
114
115
        $partial->Token = 'test-token';
116
        $partial->TokenSalt = 'test-salt';
117
        $partial->write();
118
119
        $this->assertEquals('test-token', TestHelper::invokeMethod($partial, 'getPartialToken'));
120
    }
121
122
    public function testGenerateToken()
123
    {
124
        $partial = singleton(PartialFormSubmission::class);
125
        $token = TestHelper::invokeMethod($partial, 'generateToken');
126
        $this->assertNotNull($token);
127
        $this->assertEquals(16, strlen($token));
128
    }
129
130
    public function testGenerateKey()
131
    {
132
        $partial = PartialFormSubmission::create();
133
        $token = 'test-token';
134
        $this->assertEquals('b041b97441e59b3a', $partial->generateKey($token));
135
136
        $partial->TokenSalt = 'test-salt';
137
        $key = $partial->generateKey($token);
138
        $this->assertEquals('30505a53806d5de9', $key);
139
        $this->assertEquals(16, strlen($key));
140
    }
141
142
    protected function setUp()
143
    {
144
        parent::setUp();
145
146
        $this->submission = Injector::inst()->get(PartialFormSubmission::class);
147
        $form = UserDefinedForm::create(['Title' => 'Test']);
148
        $formID = $form->write();
149
        $this->submission->UserDefinedFormID = $formID;
150
        $this->submission->UserDefinedFormClass = UserDefinedForm::class;
151
        $this->submission->write();
152
    }
153
}
154