‪TYPO3CMS  ‪main
AudioTagRendererTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
24 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
25 
29 final class ‪AudioTagRendererTest extends UnitTestCase
30 {
31  #[Test]
32  public function ‪getPriorityReturnsCorrectValue(): void
33  {
34  $audioTagRenderer = new ‪AudioTagRenderer();
35 
36  self::assertSame(1, $audioTagRenderer->getPriority());
37  }
38 
39  #[Test]
40  public function ‪canRenderReturnsTrueOnCorrectFile(): void
41  {
42  $audioTagRenderer = new ‪AudioTagRenderer();
43 
44  $fileResourceMock1 = $this->createMock(File::class);
45  $fileResourceMock1->method('getMimeType')->willReturn('audio/mpeg');
46  $fileResourceMock2 = $this->createMock(File::class);
47  $fileResourceMock2->method('getMimeType')->willReturn('audio/wav');
48  $fileResourceMock3 = $this->createMock(File::class);
49  $fileResourceMock3->method('getMimeType')->willReturn('audio/ogg');
50 
51  self::assertTrue($audioTagRenderer->canRender($fileResourceMock1));
52  self::assertTrue($audioTagRenderer->canRender($fileResourceMock2));
53  self::assertTrue($audioTagRenderer->canRender($fileResourceMock3));
54  }
55 
56  #[Test]
57  public function ‪canRenderReturnsFalseOnCorrectFile(): void
58  {
59  $audioTagRenderer = new ‪AudioTagRenderer();
60 
61  $fileResourceMock = $this->createMock(File::class);
62  $fileResourceMock->method('getMimeType')->willReturn('video/mp4');
63 
64  self::assertFalse($audioTagRenderer->canRender($fileResourceMock));
65  }
66 
70  public static function ‪renderArgumentsDataProvider(): array
71  {
72  return [
73  [
74  '//:path/myAudioFile?foo=bar&baz=true',
75  [],
76  '<audio controls><source src="//:path/myAudioFile?foo=bar&amp;baz=true" type="audio/mpeg"></audio>',
77  ],
78  [
79  '//:path/myAudioFile',
80  ['loop' => 1],
81  '<audio controls loop><source src="//:path/myAudioFile" type="audio/mpeg"></audio>',
82  ],
83  [
84  '//:path/myAudioFile',
85  ['autoplay' => 1],
86  '<audio controls autoplay><source src="//:path/myAudioFile" type="audio/mpeg"></audio>',
87  ],
88  [
89  '//:path/myAudioFile',
90  ['controls' => 0, 'autoplay' => 1],
91  '<audio autoplay><source src="//:path/myAudioFile" type="audio/mpeg"></audio>',
92  ],
93  [
94  '//:path/myAudioFile',
95  ['controls' => 1, 'controlsList' => 'nodownload'],
96  '<audio controls controlsList="nodownload"><source src="//:path/myAudioFile" type="audio/mpeg"></audio>',
97  ],
98  [
99  '//:path/myAudioFile',
100  ['additionalAttributes' => ['muted' => 'muted', 'foo' => 'bar']],
101  '<audio muted="muted" foo="bar" controls><source src="//:path/myAudioFile" type="audio/mpeg"></audio>',
102  ],
103  [
104  '//:path/myAudioFile',
105  ['data' => ['js-required' => 'yes', 'custom-id' => 'audio-123']],
106  '<audio data-js-required="yes" data-custom-id="audio-123" controls><source src="//:path/myAudioFile" type="audio/mpeg"></audio>',
107  ]
108  ,
109  [
110  '//:path/myAudioFile',
111  ['data' => ['js-required' => 'yes', 'custom-id' => 'audio-123'], 'additionalAttributes' => ['muted' => 'muted', 'foo' => 'bar']],
112  '<audio muted="muted" foo="bar" data-js-required="yes" data-custom-id="audio-123" controls><source src="//:path/myAudioFile" type="audio/mpeg"></audio>',
113  ],
114  ];
115  }
116 
117  #[DataProvider('renderArgumentsDataProvider')]
118  #[Test]
119  public function ‪renderOutputIsCorrect(string ‪$url, array $arguments, string $expected): void
120  {
121  $audioTagRenderer = new ‪AudioTagRenderer();
122 
123  $fileResourceMock = $this->createMock(File::class);
124  $fileResourceMock->method('getMimeType')->willReturn('audio/mpeg');
125  $fileResourceMock->method('getPublicUrl')->willReturn(‪$url);
126 
127  self::assertSame(
128  $expected,
129  $audioTagRenderer->render($fileResourceMock, '300m', '200', $arguments)
130  );
131  }
132 }
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\AudioTagRendererTest\getPriorityReturnsCorrectValue
‪getPriorityReturnsCorrectValue()
Definition: AudioTagRendererTest.php:32
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\AudioTagRendererTest\canRenderReturnsFalseOnCorrectFile
‪canRenderReturnsFalseOnCorrectFile()
Definition: AudioTagRendererTest.php:57
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\AudioTagRendererTest\canRenderReturnsTrueOnCorrectFile
‪canRenderReturnsTrueOnCorrectFile()
Definition: AudioTagRendererTest.php:40
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering
Definition: AudioTagRendererTest.php:18
‪TYPO3\CMS\Core\Resource\Rendering\AudioTagRenderer
Definition: AudioTagRenderer.php:26
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\AudioTagRendererTest\renderArgumentsDataProvider
‪static renderArgumentsDataProvider()
Definition: AudioTagRendererTest.php:70
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\AudioTagRendererTest\renderOutputIsCorrect
‪renderOutputIsCorrect(string $url, array $arguments, string $expected)
Definition: AudioTagRendererTest.php:119
‪TYPO3\CMS\Core\Resource\File
Definition: File.php:26
‪TYPO3\CMS\Webhooks\Message\$url
‪identifier readonly UriInterface $url
Definition: LoginErrorOccurredMessage.php:36
‪TYPO3\CMS\Core\Tests\Unit\Resource\Rendering\AudioTagRendererTest
Definition: AudioTagRendererTest.php:30