Open Data Catalog v2.0.0
ApiTest.php
Go to the documentation of this file.
1 <?php
2 
4 
5 use Dkan\Datastore\Resource;
6 use Drupal\Core\Config\Config;
7 use Drupal\Core\Config\ConfigFactory;
8 use Drupal\Core\Config\ImmutableConfig;
9 use Drupal\Core\Database\Connection;
10 use Drupal\Core\DependencyInjection\Container;
13 use MockChain\Chain;
14 use MockChain\Options;
19 use PHPUnit\Framework\TestCase;
20 use Symfony\Component\HttpFoundation\Request;
21 use Symfony\Component\HttpFoundation\RequestStack;
22 use Drupal\dkan_datastore\Service\Factory\Resource as ResourceServiceFactory;
23 use Drupal\dkan_datastore\Service\Resource as ResourceService;
24 
29 class ApiTest extends TestCase {
30 
34  public function test() {
35  $controller = Api::create($this->getCommonMockChain()->getMock());
36  $response = $controller->runQueryGet();
37  $this->assertEquals("[{\"column_1\":\"hello\",\"column_2\":\"goodbye\"}]", $response->getContent());
38  }
39 
43  public function test2() {
44  $controller = Api::create($this->getCommonMockChain()->getMock());
45  $response = $controller->runQueryPost();
46  $this->assertEquals("[{\"column_1\":\"hello\",\"column_2\":\"goodbye\"}]", $response->getContent());
47  }
48 
52  public function testWithDataModifierPlugin() {
53  $pluginMessage = "Resource hidden since dataset access level is non-public.";
54  $pluginCode = 401;
55 
56  $container = $this->getCommonMockChain()
57  ->add(DataModifierManager::class, 'getDefinitions', [['id' => 'foobar']])
58  ->add(DataModifierManager::class, 'createInstance', DataModifierBase::class)
59  ->add(DataModifierBase::class, 'requiresModification', TRUE)
60  ->add(DataModifierBase::class, 'message', $pluginMessage)
61  ->add(DataModifierBase::class, 'httpCode', $pluginCode);
62 
63  $controller = Api::create($container->getMock());
64  $response = $controller->runQueryGet();
65  $expected = '{"message":"Resource hidden since dataset access level is non-public."}';
66  $this->assertEquals($expected, $response->getContent());
67  }
68 
72  public function getCommonMockChain() {
73  $container = (new Chain($this))
74  ->add(Container::class, "get", ConfigFactory::class)
75  ->add(ConfigFactory::class, "get", ImmutableConfig::class)
76  ->add(ImmutableConfig::class, "get", "100")
77  ->getMock();
78 
79  $options = (new Options())
80  ->add('dkan_sql_endpoint.service', Service::create($container))
81  ->add("database", Connection::class)
82  ->add('dkan_datastore.service.factory.resource', ResourceServiceFactory::class)
83  ->add('request_stack', RequestStack::class)
84  ->add('dkan_datastore.database_table_factory', DatabaseTableFactory::class)
85  ->add('plugin.manager.dkan_common.data_modifier', DataModifierManager::class)
86  ->index(0);
87 
88  $query = '[SELECT * FROM abc][WHERE abc = "blah"][ORDER BY abc DESC][LIMIT 1 OFFSET 3];';
89  $body = json_encode(["query" => $query]);
90 
91  $row = (object) ['record_number' => 1, 'column_1' => "hello", 'column_2' => "goodbye"];
92 
93  return (new Chain($this))
94  ->add(Container::class, "get", $options)
95  ->add(RequestStack::class, 'getCurrentRequest', Request::class)
96  ->add(Request::class, 'get', $query)
97  ->add(Request::class, 'getContent', $body)
98  ->add(ConfigFactory::class, 'get', Config::class)
99  ->add(Config::class, 'get', 1000)
100  ->add(ResourceServiceFactory::class, 'getInstance', ResourceService::class)
101  ->add(ResourceService::class, 'get', Resource::class)
102  ->add(Resource::class, 'getId', "1")
103  ->add(DatabaseTableFactory::class, 'getInstance', DatabaseTable::class)
104  ->add(DatabaseTable::class, 'query', [$row])
105  ->add(DataModifierManager::class, 'getDefinitions', [])
106  ->add(DataModifierManager::class, 'createInstance', DataModifierBase::class)
107  ->add(DataModifierBase::class, 'requiresModification', FALSE);
108  }
109 
110 }
Drupal\dkan_datastore\Service\Factory\Resource
Definition: Resource.php:16
Drupal\dkan_datastore\Storage\DatabaseTable
Definition: DatabaseTable.php:16
Drupal\Tests\dkan_sql_endpoint\Unit\Controller
Definition: ApiTest.php:3
Drupal\dkan_datastore\Service\Resource
Definition: Resource.php:16
Drupal\Tests\dkan_sql_endpoint\Unit\Controller\ApiTest\test2
test2()
Definition: ApiTest.php:43
Drupal\dkan_common\Plugin\DataModifierBase
Definition: DataModifierBase.php:10
Drupal\dkan_sql_endpoint\Controller\Api\create
static create(ContainerInterface $container)
Definition: Api.php:37
Drupal\Tests\dkan_sql_endpoint\Unit\Controller\ApiTest\testWithDataModifierPlugin
testWithDataModifierPlugin()
Definition: ApiTest.php:52
Drupal\dkan_datastore\Storage\DatabaseTableFactory
Definition: DatabaseTableFactory.php:11
Drupal\dkan_common\Plugin\DataModifierManager
Definition: DataModifierManager.php:12
Drupal\Tests\dkan_sql_endpoint\Unit\Controller\ApiTest
Definition: ApiTest.php:29
Drupal\dkan_sql_endpoint\Service
Definition: Service.php:16
Drupal\dkan_sql_endpoint\Controller\Api
Definition: Api.php:20
Drupal\Tests\dkan_sql_endpoint\Unit\Controller\ApiTest\getCommonMockChain
getCommonMockChain()
Definition: ApiTest.php:72
Drupal\Tests\dkan_sql_endpoint\Unit\Controller\ApiTest\test
test()
Definition: ApiTest.php:34
Drupal\dkan_sql_endpoint\Service\create
static create(ContainerInterface $container)
Definition: Service.php:24