CorsMiddlewareTest   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 86
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 45
c 1
b 0
f 0
dl 0
loc 86
rs 10
wmc 4

4 Methods

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