Completed
Push — master ( cfe17f...b2cc83 )
by Sam
02:44
created

CorsMiddlewareTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 39
dl 0
loc 82
rs 10
c 0
b 0
f 0
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testAssertIsPreflightRequest() 0 15 1
A testAssertIsNotCorsRequest() 0 6 1
A setup() 0 6 1
A testAssertIsCorsRequest() 0 27 1
1
<?php
2
3
namespace Nord\Lumen\Cors\Tests;
4
5
use Helper\Unit;
6
use Illuminate\Http\JsonResponse;
7
use Illuminate\Http\Request;
8
use Nord\Lumen\Cors\CorsService;
9
use Nord\Lumen\Cors\CorsServiceProvider;
10
use Nord\Lumen\Cors\CorsMiddleware;
11
12
class CorsMiddlewareTest extends \Codeception\Test\Unit
13
{
14
    use \Codeception\Specify;
15
    /**
16
     * @var CorsMiddleware
17
     */
18
    private $middleware;
19
20
    /**
21
     * @inheritdoc
22
     */
23
    protected function setup()
24
    {
25
        $app = new MockApplication();
26
        $app->register(CorsServiceProvider::class);
27
28
        $this->middleware = new CorsMiddleware($app->make(CorsService::class));
29
    }
30
31
    /**
32
     *
33
     */
34
    public function testAssertIsNotCorsRequest()
35
    {
36
        $this->specify('verify middleware is not cors request', function () {
37
            verify($this->middleware->handle(new Request(), function () {
38
                return true;
39
            }))->equals(true);
40
        });
41
    }
42
43
    /**
44
     *
45
     */
46
    public function testAssertIsCorsRequest()
47
    {
48
        $this->specify('verify middleware is cors request', function () {
49
            $req = new Request();
50
            $req->headers->set('Origin', 'http://example.com');
51
            $res = $this->middleware->handle($req, function () {
52
                return new JsonResponse();
53
            });
54
55
            verify($res)->hasAttribute('headers');
56
            verify($res->headers->get('Access-Control-Allow-Origin'))->equals('http://example.com');
57
        });
58
59
        $service = new CorsService([
60
            'allow_origins' => ['http://foo.com'],
61
        ]);
62
        $this->middleware = new CorsMiddleware($service);
63
        $this->specify('Closure is called even if origin is not allowed', function () {
64
            $req = new Request();
65
            $req->headers->set('Origin', 'http://bar.com');
66
            $res = $this->middleware->handle($req, function () {
67
                $res = new JsonResponse();
68
                $res->headers->set('X-Closure-Called', 1);
69
                return $res;
70
            });
71
            verify($res)->hasAttribute('headers');
72
            verify($res->headers->get('X-Closure-Called'))->equals(1);
73
        });
74
    }
75
76
    /**
77
     *
78
     */
79
    public function testAssertIsPreflightRequest()
80
    {
81
        $this->specify('verify middleware is preflight request', function () {
82
            $req = new Request();
83
            $req->setMethod('OPTIONS');
84
            $req->headers->set('Origin', 'http://example.com');
85
            $req->headers->set('Access-Control-Request-Method', 'GET');
86
87
            $res = $this->middleware->handle($req, function () {
88
                return new JsonResponse();
89
            });
90
91
            verify($res)->hasAttribute('headers');
92
            verify($res->headers->get('Access-Control-Allow-Origin'))->equals('http://example.com');
93
            verify($res->headers->get('Access-Control-Allow-Methods'))->equals('GET');
94
        });
95
    }
96
}
97