Open Data Catalog v2.0.0
ImportTest.php
Go to the documentation of this file.
1 <?php
2 
3 use Drupal\Core\DependencyInjection\Container;
4 use Drupal\Core\Logger\LoggerChannel;
5 use Drupal\Core\Logger\LoggerChannelFactory;
6 use Drupal\Core\Queue\QueueFactory;
8 use MockChain\Chain;
9 use MockChain\Options;
10 use PHPUnit\Framework\TestCase;
12 use Procrastinator\Result;
13 use Drupal\Core\Queue\QueueInterface;
14 
18 class Import2Test extends TestCase {
19 
23  public function testHappyPath() {
24  $result = (new Chain($this))
25  ->add(Result::class, 'getStatus', Result::DONE)
26  ->getMock();
27 
28  $containerChain = $this->getContainerChain($result);
29  $containerChain
30  ->add(LoggerChannelFactory::class, 'get', LoggerChannel::class)
31  ->add(LoggerChannel::class, 'log', NULL, 'log');
32  $container = $containerChain->getMock();
33 
34  $data = [
35  'uuid' => '12345',
36  ];
37 
38  \Drupal::setContainer($container);
39 
40  $queueWorker = Import::create($container, [], '', '');
41  $queueWorker->processItem($data);
42 
43  $this->assertEquals("Import for 12345 completed.", $containerChain->getStoredInput('log')[1]);
44  }
45 
49  public function testErrorPath() {
50  $result = (new Chain($this))
51  ->add(Result::class, 'getStatus', Result::ERROR)
52  ->add(Result::class, 'getError', 'Oops')
53  ->getMock();
54 
55  $containerChain = $this->getContainerChain($result);
56  $containerChain
57  ->add(LoggerChannelFactory::class, 'get', LoggerChannel::class)
58  ->add(LoggerChannel::class, 'log', NULL, 'log');
59  $container = $containerChain->getMock();
60 
61  $data = [
62  'uuid' => '12345',
63  ];
64 
65  \Drupal::setContainer($container);
66 
67  $queueWorker = Import::create($container, [], '', '');
68  $queueWorker->processItem($data);
69 
70  $this->assertEquals("Import for 12345 returned an error: Oops", $containerChain->getStoredInput('log')[1]);
71  }
72 
76  public function testRequeue() {
77  $result = (new Chain($this))
78  ->add(Result::class, 'getStatus', Result::STOPPED)
79  ->getMock();
80 
81  $containerChain = $this->getContainerChain($result);
82  $container = $containerChain->getMock();
83 
84  $data = [
85  'uuid' => '12345',
86  ];
87 
88  \Drupal::setContainer($container);
89 
90  $queueWorker = Import::create($container, [], '', '');
91  $queueWorker->processItem($data);
92 
93  $this->assertEquals([$data], $containerChain->getStoredInput('create_item'));
94  }
95 
99  private function getContainerChain($result) {
100  $options = (new Options())
101  ->add("logger.factory", LoggerChannelFactory::class)
102  ->add("dkan_datastore.service", Service::class)
103  ->add('queue', QueueFactory::class)
104  ->index(0);
105 
106  $containerChain = (new Chain($this))
107  ->add(Container::class, 'get', $options)
108  ->add(Service::class, 'import', [$result])
109  ->add(QueueFactory::class, 'get', QueueInterface::class)
110  ->add(QueueInterface::class, 'createItem', NULL, 'create_item');
111 
112  return $containerChain;
113  }
114 
115 }
Import2Test
Definition: ImportTest.php:18
Drupal\dkan_datastore\Plugin\QueueWorker\Import
Definition: Import.php:20
Import2Test\testErrorPath
testErrorPath()
Definition: ImportTest.php:49
Import2Test\testRequeue
testRequeue()
Definition: ImportTest.php:76
Import2Test\testHappyPath
testHappyPath()
Definition: ImportTest.php:23
Drupal\dkan_datastore\Service