Completed
Push — master ( cb6000...0f63fa )
by Sam
02:23
created

FileFormBuilderTest::testCreateFileForm()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 27
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 27
rs 8.8571
c 0
b 0
f 0
cc 1
eloc 18
nc 1
nop 0
1
<?php
2
3
namespace SilverStripe\AssetAdmin\Tests;
4
5
use AssetStoreTest_SpyStore;
6
use SilverStripe\AssetAdmin\Controller\AssetAdmin;
7
use SilverStripe\AssetAdmin\Forms\FileFormFactory;
8
use SilverStripe\AssetAdmin\Forms\FolderFormFactory;
9
use SilverStripe\AssetAdmin\Forms\ImageFormFactory;
10
use SilverStripe\Assets\File;
11
use SilverStripe\Assets\Folder;
12
use SilverStripe\Assets\Image;
13
use SilverStripe\Dev\SapphireTest;
14
15
class FileFormBuilderTest extends SapphireTest
16
{
17
    protected static $fixture_file = 'FileFormBuilderTest.yml';
18
19
    public function setUp() {
20
		parent::setUp();
21
22
		// Set backend and base url
23
		AssetStoreTest_SpyStore::activate('FileFormBuilderTest');
24
25
        /** @var File $testfile */
26
        $testfile = $this->objFromFixture(File::class, 'file1');
27
        $testfile->setFromLocalFile(__DIR__ .'/fixtures/testfile.txt', 'files/testfile.txt');
28
        $testfile->write();
29
30
        /** @var Image $testimage */
31
        $testimage = $this->objFromFixture(Image::class, 'image1');
32
        $testimage->setFromLocalFile(__DIR__.'/fixtures/testimage.png', 'files/testimage.png');
33
	}
34
35
    public function testEditFileForm() {
36
        $this->logInWithPermission('ADMIN');
37
38
        $file = $this->objFromFixture(File::class, 'file1');
39
        $controller = new AssetAdmin();
40
        $builder = new FileFormFactory();
41
        $form = $builder->getForm($controller, 'EditForm', ['Record' => $file]);
42
43
        // Verify file form is scaffolded correctly
44
        $this->assertEquals('EditForm', $form->getName());
45
46
        // Test fields exist
47
        $fileSpecs = $form->Fields()->fieldByName('FileSpecs')->getContent();
48
        $this->assertEquals(
49
            '<div class="editor__specs">11 bytes <span class="editor__status-flag">Draft</span></div>',
50
            $fileSpecs
51
        );
52
        $fileURL = $form->Fields()->fieldByName('Editor.Details.ClickableURL')->Value();
53
        $this->assertEquals(
54
            '<i class="font-icon-link btn--icon-large form-control-static__icon"></i>'
55
            . '<a href="/assets/files/6adf67caca/testfile.txt" target="_blank">/assets/files/6adf67caca/testfile.txt</a>',
56
            $fileURL
57
        );
58
        $filePath = $form->Fields()->fieldByName('Editor.Details.Path')->Value();
59
        $this->assertEquals('files/', $filePath);
60
61
        $fileThumbnail = $form->Fields()->fieldByName('IconFull')->getContent();
62
        $this->assertEquals(
63
            '<img src="framework/client/dist/images/app_icons/generic_32.png" class="editor__thumbnail" />',
64
            $fileThumbnail
65
        );
66
67
        // Usage tab
68
        $uploaded = $form->Fields()->fieldByName('Editor.Usage.Created');
69
        $this->assertEquals(
70
            $file->Created,
71
            $uploaded->dataValue()
72
        );
73
74
        // Test actions exist
75
        $this->assertNotNull($form->Actions()->fieldByName('action_save'));
76
        $this->assertNotNull($form->Actions()->fieldByName('action_publish'));
77
        $this->assertNotNull($form->Actions()->fieldByName('actionaddtocampaignactiondelete.action_addtocampaign'));
78
        $this->assertNotNull($form->Actions()->fieldByName('actionaddtocampaignactiondelete.action_delete'));
79
        $this->assertNull($form->Actions()->fieldByName('actionaddtocampaignactiondelete.action_unpublish'));
80
    }
81
82
    public function testCreateFileForm() {
83
        $this->logInWithPermission('ADMIN');
84
85
        $file = $this->objFromFixture(File::class, 'file1');
86
        $controller = new AssetAdmin();
87
        $builder = new FileFormFactory();
88
        $form = $builder->getForm($controller, 'EditForm', ['Record' => $file]);
89
90
        // Test fields
91
        $this->assertEquals(
92
            '<div class="editor__specs">11 bytes <span class="editor__status-flag">Draft</span></div>',
93
            $form->Fields()->fieldByName('FileSpecs')->getContent()
94
        );
95
        $this->assertEquals(
96
            'files/',
97
            $form->Fields()->fieldByName('Editor.Details.Path')->dataValue()
98
        );
99
        $this->assertEquals(
100
            '<i class="font-icon-link btn--icon-large form-control-static__icon"></i>'
101
            . '<a href="/assets/files/6adf67caca/testfile.txt" target="_blank">'
102
            . '/assets/files/6adf67caca/testfile.txt</a>',
103
            $form->Fields()->fieldByName('Editor.Details.ClickableURL')->dataValue()
104
        );
105
106
        // Test actions
107
        $this->assertNotNull($form->Actions()->fieldByName('action_save'));
108
    }
109
110
    public function testEditImageForm() {
111
        $this->logInWithPermission('ADMIN');
112
113
        $image = $this->objFromFixture(Image::class, 'image1');
114
        $controller = new AssetAdmin();
115
        $builder = new ImageFormFactory();
116
        $form = $builder->getForm($controller, 'EditForm', ['Record' => $image]);
117
118
        // Check thumbnail
119
        // Note: force_resample is turned off for testing
120
        $fileThumbnail = $form->Fields()->fieldByName('IconFull')->getContent();
121
        $this->assertContains(
122
            '/FileFormBuilderTest/files/906835357d/testimage.png',
123
            $fileThumbnail
124
        );
125
    }
126
127
    public function testFolderForm() {
128
        $this->logInWithPermission('ADMIN');
129
130
        $folder = $this->objFromFixture(Folder::class, 'parent');
131
        $controller = new AssetAdmin();
132
        $builder = new FolderFormFactory($controller, $folder);
133
        $form = $builder->getForm($controller, 'EditForm', ['Record' => $folder]);
134
135
        // Check fields
136
        $this->assertNull($form->Fields()->fieldByName('FileSpecs'));
137
        $this->assertNull($form->Fields()->fieldByName('Editor.Details.ClickableURL'));
138
        $this->assertNull($form->Fields()->fieldByName('Editor.Usage'));
139
140
141
        $fileThumbnail = $form->Fields()->fieldByName('IconFull')->getContent();
142
        $this->assertEquals(
143
            '<img src="framework/client/dist/images/app_icons/folder_icon_large.png" class="editor__thumbnail" />',
144
            $fileThumbnail
145
        );
146
147
148
        // Check actions
149
        $this->assertNotNull($form->Actions()->fieldByName('action_save'));
150
        $this->assertNotNull($form->Actions()->fieldByName('action_delete')); // At top level, not in popup
151
        $this->assertNull($form->Actions()->fieldByName('action_publish'));
152
        $this->assertNull($form->Actions()->dataFieldByName('action_publish'));
153
        $this->assertNull($form->Actions()->dataFieldByName('action_unpublish'));
154
    }
155
156
    public function testScaffolderFactory() {
157
        $controller = new AssetAdmin();
158
        $this->assertInstanceOf(FileFormFactory::class, $controller->getFormFactory(File::singleton()));
159
        $this->assertInstanceOf(ImageFormFactory::class, $controller->getFormFactory(Image::singleton()));
160
        $this->assertInstanceOf(FolderFormFactory::class, $controller->getFormFactory(Folder::singleton()));
161
    }
162
163
164
}
165