Open Data Catalog v2.0.0
WebServiceApiDocsTest.php
Go to the documentation of this file.
1 <?php
2 
4 
5 use Drupal\Core\Database\Query\SelectInterface;
8 use PHPUnit\Framework\TestCase;
9 use Drupal\Core\Serialization\Yaml;
11 use MockChain\Chain;
12 use MockChain\Options;
15 use Symfony\Component\DependencyInjection\ContainerInterface;
16 
20 class WebServiceApiDocsTest extends TestCase {
21 
26  $dataset = json_encode([
27  'distribution' => [
28  [
29  'identifier' => 'dist-1234',
30  'data' => [
31  'title' => 'Title',
32  'description' => 'Description',
33  ],
34  ],
35  ],
36  ]);
37 
38  $mockChain = $this->getCommonMockChain()
39  ->add(Service::class, "get", $dataset)
40  ->add(DataModifierManager::class, 'getDefinitions', [])
41  ->add(SelectInterface::class, 'fetchCol', []);
42 
43  $controller = WebServiceApiDocs::create($mockChain->getMock());
44  $response = $controller->getDatasetSpecific(1);
45 
46  $spec = '{"openapi":"3.0.1","info":{"title":"API Documentation","version":"Alpha"},"tags":[],"paths":{"\/random\/prefix\/api\/1\/metastore\/schemas\/dataset\/items\/1":{"get":{"summary":"Get this dataset","tags":["Dataset"],"parameters":[{"name":"identifier","in":"path","description":"Dataset uuid","required":true,"schema":{"type":"string"},"example":"1"}],"responses":{"200":{"description":"Ok"}}}},"\/random\/prefix\/api\/1\/datastore\/sql?query=[SELECT * FROM dist-1234];":{"get":{"summary":"Query resources","tags":["SQL Query"],"parameters":[{"name":"query","in":"query","description":"SQL query","required":true,"schema":{"type":"string"},"example":"[SELECT * FROM dist-1234];"}],"responses":{"200":{"description":"Ok"}}}}},"components":{"parameters":{"query":{"name":"query","in":"query","description":"SQL query","required":true,"schema":{"type":"string"},"example":"[SELECT * FROM DATASTORE-UUID];"}}}}';
47  $this->assertEquals($spec, $response->getContent());
48  }
49 
54  $mockChain = $this->getCommonMockChain()
55  ->add(Service::class, "get", "{}")
56  ->add(DataModifierManager::class, 'getDefinitions', [['id' => 'foobar']])
57  ->add(DataModifierManager::class, 'createInstance', DataModifierBase::class)
58  ->add(DataModifierBase::class, 'requiresModification', TRUE);
59 
60  $controller = WebServiceApiDocs::create($mockChain->getMock());
61  $response = $controller->getDatasetSpecific(1);
62 
63  $spec = '{"openapi":"3.0.1","info":{"title":"API Documentation","version":"Alpha"},"tags":[],"paths":{"\/random\/prefix\/api\/1\/metastore\/schemas\/dataset\/items\/1":{"get":{"summary":"Get this dataset","tags":["Dataset"],"parameters":[{"name":"identifier","in":"path","description":"Dataset uuid","required":true,"schema":{"type":"string"},"example":"1"}],"responses":{"200":{"description":"Ok"}}}}},"components":{"parameters":{"query":{"name":"query","in":"query","description":"SQL query","required":true,"schema":{"type":"string"},"example":"[SELECT * FROM DATASTORE-UUID];"}}}}';
64  $this->assertEquals($spec, $response->getContent());
65  }
66 
70  private function getCommonMockChain() {
71  $serializer = new Yaml();
72  // Test against ./docs/dkan_api_openapi_spec.yml.
73  $yamlSpec = file_get_contents(__DIR__ . "/docs/dkan_api_openapi_spec.yml");
74 
75  $mockChain = new Chain($this);
76  $mockChain->add(ContainerInterface::class, 'get',
77  (new Options)->add('dkan_api.docs', Docs::class)
78  ->add('dkan_metastore.service', Service::class)
79  ->add('plugin.manager.dkan_common.data_modifier', DataModifierManager::class)
80  ->index(0)
81  )
82  ->add(Docs::class, "getJsonFromYmlFile", $serializer->decode($yamlSpec));
83 
84  return $mockChain;
85  }
86 
87 }
Drupal\Tests\dkan_metastore\Unit\WebServiceApiDocsTest
Definition: WebServiceApiDocsTest.php:20
Drupal\dkan_common\Plugin\DataModifierBase
Definition: DataModifierBase.php:10
Drupal\dkan_api\Controller\Docs
Definition: Docs.php:17
Drupal\Tests\dkan_metastore\Unit
Drupal\dkan_metastore\WebServiceApiDocs\create
static create(ContainerInterface $container)
Definition: WebServiceApiDocs.php:50
Drupal\Tests\dkan_metastore\Unit\WebServiceApiDocsTest\testDatasetSpecificDocsWithoutSqlModifier
testDatasetSpecificDocsWithoutSqlModifier()
Definition: WebServiceApiDocsTest.php:25
Drupal\dkan_common\Plugin\DataModifierManager
Definition: DataModifierManager.php:12
Drupal\dkan_metastore\Service
Definition: Service.php:20
Drupal\dkan_metastore\WebServiceApiDocs
Definition: WebServiceApiDocs.php:16
Drupal\Tests\dkan_metastore\Unit\WebServiceApiDocsTest\testDatasetSpecificDocsWithSqlModifier
testDatasetSpecificDocsWithSqlModifier()
Definition: WebServiceApiDocsTest.php:53