ElementFormControllerTest   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 36
c 2
b 0
f 0
dl 0
loc 65
rs 10
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testElementFormSubmission() 0 14 1
A testElementFormRendering() 0 14 1
A testUserFormControllerInitIsCalled() 0 14 1
1
<?php
2
3
namespace DNADesign\ElementalUserForms\Tests;
4
5
use DNADesign\Elemental\Extensions\ElementalPageExtension;
6
use DNADesign\Elemental\Models\BaseElement;
7
use DNADesign\ElementalUserForms\Control\ElementFormController;
8
use DNADesign\ElementalUserForms\Model\ElementForm;
9
use DNADesign\ElementalUserForms\Tests\Stub\TestElement;
10
use DNADesign\ElementalUserForms\Tests\Stub\TestPage;
11
use SilverStripe\Dev\FunctionalTest;
12
use SilverStripe\UserForms\Control\UserDefinedFormController;
13
14
class ElementFormControllerTest extends FunctionalTest
15
{
16
    protected static $fixture_file = 'ElementFormTest.yml';
17
18
    protected static $use_draft_site = true;
19
20
    protected static $required_extensions = [
21
        TestPage::class => [
22
            ElementalPageExtension::class,
23
        ],
24
    ];
25
26
    protected static $extra_dataobjects = [
27
        TestPage::class,
28
        TestElement::class,
29
    ];
30
31
    public function testElementFormRendering()
32
    {
33
        $this->logInWithPermission('ADMIN');
34
        $page = $this->objFromFixture(TestPage::class, 'page1');
35
36
        $element = $this->objFromFixture(ElementForm::class, 'formelement');
37
38
        $response = $this->get($page->URLSegment);
39
        $formAction = sprintf('%s/element/%d/Form', $page->URLSegment, $element->ID);
40
41
        $this->assertContains(
42
            $formAction,
43
            $response->getBody(),
44
            'Element forms are rendered through ElementalArea templates'
45
        );
46
    }
47
48
    public function testElementFormSubmission()
49
    {
50
        $this->logInWithPermission('ADMIN');
51
        $page = $this->objFromFixture(TestPage::class, 'page1');
52
53
        $element = $this->objFromFixture(TestElement::class, 'element1');
0 ignored issues
show
Unused Code introduced by
The assignment to $element is dead and can be removed.
Loading history...
54
55
        $response = $this->get($page->URLSegment);
0 ignored issues
show
Unused Code introduced by
The assignment to $response is dead and can be removed.
Loading history...
56
57
        $response = $this->submitForm('UserForm_Form_2', 'action_process', ['TestValue' => 'Updated']);
58
        $this->assertContains(
59
            'received your submission',
60
            $response->getBody(),
61
            'Form values are submitted to correct element form'
62
        );
63
    }
64
65
    public function testUserFormControllerInitIsCalled()
66
    {
67
        $userFormControllerMock = $this->getMockBuilder(UserDefinedFormController::class)
68
            ->setMethods(['doInit'])
69
            ->getMock();
70
71
        $userFormControllerMock->expects($this->once())->method('doInit');
72
73
        $controller = new ElementFormController(new BaseElement);
74
        $controller->getRequest()->setSession($this->session());
75
        $controller->setUserFormController($userFormControllerMock);
76
77
        $this->assertSame($userFormControllerMock, $controller->getUserFormController());
78
        $controller->doInit();
79
    }
80
}
81