Completed
Pull Request — master (#300)
by
unknown
02:23
created

FileFormBuilderTest::testCreateFileForm()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 21
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 21
rs 9.3142
cc 1
eloc 13
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
        $filePath = $form->Fields()->fieldByName('Editor.Details.Path')->Value();
53
        $this->assertEquals('files/', $filePath);
54
55
        $fileThumbnail = $form->Fields()->fieldByName('IconFull')->getContent();
56
        $this->assertEquals(
57
            '<a class="editor__file-preview-link" href="/assets/files/6adf67caca/testfile.txt" target="_blank">'.
58
                '<img src="framework/client/dist/images/app_icons/generic_32.png" class="editor__thumbnail" />'.
59
            '</a>',
60
            $fileThumbnail
61
        );
62
63
        // Usage tab
64
        $uploaded = $form->Fields()->fieldByName('Editor.Usage.Created');
65
        $this->assertEquals(
66
            $file->Created,
67
            $uploaded->dataValue()
68
        );
69
70
        // Test actions exist
71
        $this->assertNotNull($form->Actions()->fieldByName('action_save'));
72
        $this->assertNotNull($form->Actions()->fieldByName('action_publish'));
73
        $this->assertNotNull($form->Actions()->fieldByName('actionaddtocampaignactiondelete.action_addtocampaign'));
74
        $this->assertNotNull($form->Actions()->fieldByName('actionaddtocampaignactiondelete.action_delete'));
75
        $this->assertNull($form->Actions()->fieldByName('actionaddtocampaignactiondelete.action_unpublish'));
76
    }
77
78
    public function testCreateFileForm() {
79
        $this->logInWithPermission('ADMIN');
80
81
        $file = $this->objFromFixture(File::class, 'file1');
82
        $controller = new AssetAdmin();
83
        $builder = new FileFormFactory();
84
        $form = $builder->getForm($controller, 'EditForm', ['Record' => $file]);
85
86
        // Test fields
87
        $this->assertEquals(
88
            '<div class="editor__specs">11 bytes <span class="editor__status-flag">Draft</span></div>',
89
            $form->Fields()->fieldByName('FileSpecs')->getContent()
90
        );
91
        $this->assertEquals(
92
            'files/',
93
            $form->Fields()->fieldByName('Editor.Details.Path')->dataValue()
94
        );
95
96
        // Test actions
97
        $this->assertNotNull($form->Actions()->fieldByName('action_save'));
98
    }
99
100
    public function testEditImageForm() {
101
        $this->logInWithPermission('ADMIN');
102
103
        $image = $this->objFromFixture(Image::class, 'image1');
104
        $controller = new AssetAdmin();
105
        $builder = new ImageFormFactory();
106
        $form = $builder->getForm($controller, 'EditForm', ['Record' => $image]);
107
108
        // Check thumbnail
109
        // Note: force_resample is turned off for testing
110
        $fileThumbnail = $form->Fields()->fieldByName('IconFull')->getContent();
111
        $this->assertContains(
112
            '/FileFormBuilderTest/files/906835357d/testimage.png',
113
            $fileThumbnail
114
        );
115
    }
116
117
    public function testFolderForm() {
118
        $this->logInWithPermission('ADMIN');
119
120
        $folder = $this->objFromFixture(Folder::class, 'parent');
121
        $controller = new AssetAdmin();
122
        $builder = new FolderFormFactory($controller, $folder);
123
        $form = $builder->getForm($controller, 'EditForm', ['Record' => $folder]);
124
125
        // Check fields
126
        $this->assertNull($form->Fields()->fieldByName('FileSpecs'));
127
        $this->assertNull($form->Fields()->fieldByName('Editor.Details.ClickableURL'));
128
        $this->assertNull($form->Fields()->fieldByName('Editor.Usage'));
129
130
131
        $fileThumbnail = $form->Fields()->fieldByName('IconFull')->getContent();
132
        $this->assertEquals(
133
            '<img src="framework/client/dist/images/app_icons/folder_icon_large.png" class="editor__thumbnail" />',
134
            $fileThumbnail
135
        );
136
137
138
        // Check actions
139
        $this->assertNotNull($form->Actions()->fieldByName('action_save'));
140
        $this->assertNotNull($form->Actions()->fieldByName('action_delete')); // At top level, not in popup
141
        $this->assertNull($form->Actions()->fieldByName('action_publish'));
142
        $this->assertNull($form->Actions()->dataFieldByName('action_publish'));
143
        $this->assertNull($form->Actions()->dataFieldByName('action_unpublish'));
144
    }
145
146
    public function testScaffolderFactory() {
147
        $controller = new AssetAdmin();
148
        $this->assertInstanceOf(FileFormFactory::class, $controller->getFormFactory(File::singleton()));
149
        $this->assertInstanceOf(ImageFormFactory::class, $controller->getFormFactory(Image::singleton()));
150
        $this->assertInstanceOf(FolderFormFactory::class, $controller->getFormFactory(Folder::singleton()));
151
    }
152
153
154
}
155