Interim commit.
[yaffs-website] / web / modules / contrib / video_embed_field / tests / src / Unit / ProviderManagerTest.php
1 <?php
2
3 namespace Drupal\Tests\video_embed_field\Unit;
4
5 use Drupal\Tests\UnitTestCase;
6
7 /**
8  * Tests the provider manager is working.
9  *
10  * @group video_embed_field
11  */
12 class ProviderManagerTest extends UnitTestCase {
13
14   /**
15    * Mock providers to use for the test.
16    *
17    * @var array
18    */
19   protected $mockProviders = [
20     'provider_a' => [
21       'id' => 'provider_a',
22       'title' => 'Provider A',
23     ],
24     'provider_b' => [
25       'id' => 'provider_b',
26       'title' => 'Provider B',
27     ],
28     'provider_c' => [
29       'id' => 'provider_c',
30       'title' => 'Provider C',
31     ],
32   ];
33
34   /**
35    * Test URL parsing works as expected.
36    */
37   public function testOptionsList() {
38     $options = $this->getManagerMock()->getProvidersOptionList();
39     $this->assertEquals($options, [
40       'provider_a' => 'Provider A',
41       'provider_b' => 'Provider B',
42       'provider_c' => 'Provider C',
43     ]);
44   }
45
46   /**
47    * Test filtering the definition list from user input via checkboxes.
48    *
49    * @dataProvider optionsWithExpectedProviders
50    */
51   public function testDefinitionListFromOptionsList($user_input, $expected_providers) {
52     $this->assertEquals($expected_providers, $this->getManagerMock()
53       ->loadDefinitionsFromOptionList($user_input));
54   }
55
56   /**
57    * A data provider for user input with expected filtered providers.
58    *
59    * @return array
60    *   An array of test cases.
61    */
62   public function optionsWithExpectedProviders() {
63     return [
64       'Empty input: all providers' => [
65         [],
66         $this->mockProviders,
67       ],
68       'Empty checkbox input: all providers' => [
69         [
70           'provider_a' => '0',
71           'provider_b' => '0',
72           'provider_c' => '0',
73         ],
74         $this->mockProviders,
75       ],
76       'Some providers' => [
77         [
78           'provider_a' => '0',
79           'provider_b' => 'provider_b',
80           'provider_c' => 'provider_c',
81         ],
82         [
83           'provider_b' => $this->mockProviders['provider_b'],
84           'provider_c' => $this->mockProviders['provider_c'],
85         ],
86       ],
87       'One provider' => [
88         [
89           'provider_a' => 'provider_a',
90           'provider_b' => '0',
91           'provider_c' => '0',
92         ],
93         [
94           'provider_a' => $this->mockProviders['provider_a'],
95         ],
96       ],
97     ];
98   }
99
100   /**
101    * Get a mock provider manager.
102    */
103   protected function getManagerMock() {
104     $definitions = $this->mockProviders;
105     $manager = $this->getMockBuilder('Drupal\video_embed_field\ProviderManager')
106       ->disableOriginalConstructor()
107       ->setMethods(['getDefinitions', 'getDefinition', 'createInstance'])
108       ->getMock();
109     $manager
110       ->method('getDefinitions')
111       ->willReturn($definitions);
112     $manager
113       ->method('getDefinition')
114       ->willReturnCallback(function ($value) use ($definitions) {
115         return $definitions[$value];
116       });
117     $manager
118       ->method('createInstance')
119       ->willReturnCallback(function ($name) {
120         return (object) ['id' => $name];
121       });
122     return $manager;
123   }
124
125 }