Completed
Push — master ( a9e1ce...416b3d )
by Sam
22s
created

FormFactoryTest::getExtraDataObjects()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 4
nc 2
nop 0
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\Forms\Tests;
4
5
use SilverStripe\Forms\Tests\FormFactoryTest\TestController;
6
use SilverStripe\Forms\Tests\FormFactoryTest\TestObject;
7
use SilverStripe\Dev\SapphireTest;
8
use SilverStripe\Forms\FormAction;
9
use SilverStripe\Forms\HiddenField;
10
use SilverStripe\Forms\LiteralField;
11
use SilverStripe\Forms\TextField;
12
use SilverStripe\Versioned\Versioned;
13
14
class FormFactoryTest extends SapphireTest
15
{
16
    protected $extraDataObjects = [
17
        TestObject::class,
18
    ];
19
20
    protected static $fixture_file = 'FormFactoryTest.yml';
21
22
    protected function getExtraDataObjects()
23
    {
24
        // Prevent setup breaking if versioned module absent
25
        if (class_exists(Versioned::class)) {
26
            return parent::getExtraDataObjects();
27
        }
28
        return [];
29
    }
30
31
    public function setUp()
32
    {
33
        parent::setUp();
34
35
        // Note: Soft support for versioned module optionality
36
        if (!class_exists(Versioned::class)) {
37
            $this->markTestSkipped('FormFactoryTest requires the Versioned extension');
38
        }
39
    }
40
41
    /**
42
     * Test versioned form
43
     */
44
    public function testVersionedForm()
45
    {
46
        $controller = new TestController();
47
        $form = $controller->Form();
48
49
        // Check formfields
50
        $this->assertInstanceOf(TextField::class, $form->Fields()->fieldByName('Title'));
51
        $this->assertInstanceOf(HiddenField::class, $form->Fields()->fieldByName('ID'));
52
        $this->assertInstanceOf(HiddenField::class, $form->Fields()->fieldByName('SecurityID'));
53
54
55
        // Check preview link
56
        /** @var LiteralField $previewLink */
57
        $previewLink = $form->Fields()->fieldByName('PreviewLink');
58
        $this->assertInstanceOf(LiteralField::class, $previewLink);
59
        $this->assertEquals(
60
            '<a href="FormFactoryTest_TestController/preview/" rel="external" target="_blank">Preview</a>',
61
            $previewLink->getContent()
62
        );
63
64
        // Check actions
65
        $this->assertInstanceOf(FormAction::class, $form->Actions()->fieldByName('action_save'));
66
        $this->assertInstanceOf(FormAction::class, $form->Actions()->fieldByName('action_publish'));
67
        $this->assertTrue($controller->hasAction('publish'));
68
    }
69
70
    /**
71
     * Removing versioning from an object should result in a simpler form
72
     */
73
    public function testBasicForm()
74
    {
75
        TestObject::remove_extension(Versioned::class);
76
        $controller = new TestController();
77
        $form = $controller->Form();
78
79
        // Check formfields
80
        $this->assertInstanceOf(TextField::class, $form->Fields()->fieldByName('Title'));
81
        $this->assertNull($form->Fields()->fieldByName('PreviewLink'));
82
83
        // Check actions
84
        $this->assertInstanceOf(FormAction::class, $form->Actions()->fieldByName('action_save'));
85
        $this->assertNull($form->Actions()->fieldByName('action_publish'));
86
    }
87
}
88