Open Data Catalog v2.0.0
NonPublicResourceProtectorTest.php
Go to the documentation of this file.
1 <?php
2 
4 
5 use Drupal\Core\Database\Connection;
6 use Drupal\Core\Database\Query\ConditionInterface;
7 use Drupal\Core\Database\Query\SelectInterface;
8 use Drupal\Core\Database\StatementInterface;
9 use Drupal\Core\DependencyInjection\Container;
10 use Drupal\Core\Routing\RouteMatchInterface;
13 use MockChain\Chain;
14 use MockChain\Options;
15 use PHPUnit\Framework\TestCase;
16 
20 class NonPublicResourceProtectorTest extends TestCase {
21 
25  public function requiresModificationProvider() {
26  return [
27  'public dataset object' => [
28  'dataset',
29  (object) ['accessLevel' => 'public'],
30  [],
31  FALSE,
32  ],
33  'resource object with non-public parent dataset' => [
34  'distribution',
35  (object) ['identifier' => '1', 'data' => ['foo' => 'bar']],
36  ['{"accessLevel":"non-public"}'],
37  TRUE,
38  ],
39  'resource json string with public parent dataset' => [
40  'distribution',
41  '{"identifier":"1","data":{"foo":"bar"}}',
42  ['{"accessLevel":"public"}'],
43  FALSE,
44  ],
45  'resource uuid with public parent dataset' => [
46  'distribution',
47  '6b1f0bb4-60cd-5b27-8e03-5fecff4c7e2a',
48  ['{"accessLevel":"non-public"}'],
49  TRUE,
50  ],
51  ];
52  }
53 
57  public function testRequiresModification(string $schema, $data, $datasets, $expected) {
58  $container = $this->getCommonMockChain()
59  ->add(StatementInterface::class, 'fetchCol', $datasets);
60 
62  $container->getMock(),
63  [],
64  'non_public_resource_protector',
65  []
66  );
67 
68  $this->assertEquals($expected, $plugin->requiresModification($schema, $data));
69  }
70 
74  public function modifyProvider() {
75  return [
76  'dataset json string without resources' => [
77  'dataset',
78  '{"foo":"bar"}',
79  '{"foo":"bar"}',
80  ],
81  'dataset object with empty distribution array' => [
82  'dataset',
83  (object) ["foo" => "bar", "distribution" => []],
84  (object) ["foo" => "bar", "distribution" => []],
85  ],
86  ];
87  }
88 
92  public function testModify($schema, $data, $expected) {
94  $this->getCommonMockChain()->getMock(),
95  [],
96  'non_public_resource_protector',
97  []
98  );
99 
100  $this->assertEquals($expected, $plugin->modify($schema, $data));
101  }
102 
106  public function getCommonMockChain() {
107  $pluginMessage = "Resource hidden since dataset access level is non-public.";
108 
109  $options = (new Options())
110  ->add('database', Connection::class)
111  ->add('current_route_match', RouteMatchInterface::class)
112  ->index(0);
113 
114  return (new Chain($this))
115  ->add(Container::class, 'get', $options)
116  ->add(Connection::class, 'select', SelectInterface::class)
117  ->add(SelectInterface::class, 'condition', ConditionInterface::class)
118  ->add(ConditionInterface::class, 'condition', ConditionInterface::class)
119  ->add(ConditionInterface::class, 'fields', SelectInterface::class)
120  ->add(SelectInterface::class, 'execute', StatementInterface::class)
121  ->add(StatementInterface::class, 'fetchCol', [])
122  ->add(DataModifierBase::class, 'message', $pluginMessage);
123  }
124 
125 }
Drupal\Tests\dkan_non_public\Unit\NonPublicResourceProtectorTest\modifyProvider
modifyProvider()
Definition: NonPublicResourceProtectorTest.php:74
Drupal\dkan_common\Plugin\DataModifierBase
Definition: DataModifierBase.php:10
Drupal\Tests\dkan_non_public\Unit\NonPublicResourceProtectorTest\testRequiresModification
testRequiresModification(string $schema, $data, $datasets, $expected)
Definition: NonPublicResourceProtectorTest.php:57
Drupal\Tests\dkan_non_public\Unit\NonPublicResourceProtectorTest\getCommonMockChain
getCommonMockChain()
Definition: NonPublicResourceProtectorTest.php:106
Drupal\Tests\dkan_non_public\Unit\NonPublicResourceProtectorTest
Definition: NonPublicResourceProtectorTest.php:20
Drupal\Tests\dkan_non_public\Unit\NonPublicResourceProtectorTest\requiresModificationProvider
requiresModificationProvider()
Definition: NonPublicResourceProtectorTest.php:25
Drupal\Tests\dkan_non_public\Unit\NonPublicResourceProtectorTest\testModify
testModify($schema, $data, $expected)
Definition: NonPublicResourceProtectorTest.php:92
Drupal\Tests\dkan_non_public\Unit
Definition: NonPublicResourceProtectorTest.php:3
Drupal\dkan_non_public\Plugin\DataModifier\NonPublicResourceProtector
Definition: NonPublicResourceProtector.php:21
Drupal\dkan_non_public\Plugin\DataModifier\NonPublicResourceProtector\create
static create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition)
Definition: NonPublicResourceProtector.php:73