Blame view

tests/TestCase.php 2.37 KB
e77200db5   nologostudio.ru   Initial commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
  <?php
  
  namespace FootyRoom\Tests;
  
  use Illuminate\Events\Dispatcher;
  use PHPUnit\Framework\MockObject\MockObject;
  use FootyRoom\Providers\EventServiceProvider;
  use AlbertCht\Lumen\Testing\TestCase as AlbertChtTestCase;
  
  abstract class TestCase extends AlbertChtTestCase
  {
      /**
       * Creates the application.
       *
       * @return \Laravel\Lumen\Application
       */
      public function createApplication()
      {
          $app = require __DIR__.'/../bootstrap/app.php';
  
          $app->make('url')->forceRootUrl(
              'http://'.$app->make(\FootyRoom\Config::class)->get('domain')
          );
  
          return $app;
      }
  
      public function setUp()
      {
          parent::setUp();
  
          $uses = array_flip(class_uses_recursive(get_class($this)));
  
          if (isset($uses[SetsUpFixtures::class])) {
              $this->setUpFixtures();
          }
      }
  
      /**
       * Tests that a specified listener in app's EventServiceProvider is called.
       */
      protected function expectListenerCalled(string $listener): MockObject
      {
          [$class, $method] = explode('@', $listener);
          $method = $method ?: 'handle';
  
          $instance = $this->getMockBuilder($class)
              ->setMethods([$method])
              ->disableOriginalConstructor()
              ->getMock();
  
          $instance->expects($this->once())->method($method);
  
          $this->app->instance($class, $instance);
  
          // Create a new dispatcher that will register only one listener that we are interested in.
          $dispatcher = new class(app()) extends Dispatcher {
              public function listen($events, $listener)
              {
                  if ($listener === $this->expectedListener) {
                      parent::listen($events, $listener);
                  }
              }
          };
  
          $dispatcher->expectedListener = $listener;
  
          $this->app->instance('events', $dispatcher);
  
          // Register all listeners again, because we replaced dispatcher with new empty instance.
          (new EventServiceProvider($this->app))->boot();
  
          return $instance;
      }
  
      public function assertArrayHaveKeys(array $keys, $data)
      {
          foreach($keys as $key){
              $this->assertArrayHasKey($key, $data);
          }
      }
  
      public function assertObjectHaveAttributes(array $keys, $data)
      {
          foreach($keys as $key){
              $this->assertObjectHasAttribute($key, $data);
          }
      }
  }