ResponseSignatureMiddlewareTest   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 83
Duplicated Lines 60.24 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 3
lcom 1
cbo 4
dl 50
loc 83
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 15 1
B itValidatesSignature() 25 25 1
B itThrowsAnExpectionWhenSignatureDoesNotMatch() 25 25 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace Bunq\Tests\Middleware;
4
5
use Bunq\Certificate\DefaultCertificate;
6
use Bunq\Middleware\ResponseSignatureMiddleware;
7
use GuzzleHttp\Psr7\Response;
8
use PHPUnit\Framework\TestCase;
9
10
final class ResponseSignatureMiddlewareTest extends TestCase
11
{
12
    /**
13
     * @var ResponseSignatureMiddleware()
14
     */
15
    private $middleware;
16
17
    public function setUp()
18
    {
19
        $publicKey = '-----BEGIN PUBLIC KEY-----
20
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsP0BRYxC0A9v0C9aJ2pf
21
fKyeCQ9ao7gvd0xkVlx0lFy5/UroMHUp2AmI4dS6s+wEu1Xzl5i4XpqngZKWXp0p
22
4FluQGq+rUtdxSVXwgrUUqGGvCAfk0N0izCa5R9/7RoQaFpJ+Qa9Z/LoE1UiiEld
23
IGi9dy/jFLV9KglT8Z08Fa/tss1i8QJsnQ51/Q1B4RjoZTAoPGtKJRzvNUdAeogd
24
HYorGLMxw9ixfQnQt8Anqyor6U7sgN/xfnj68KCP9I2eVA6pO0IZgpUzv8FcNKjx
25
kxtpEjh028OqCJOenun8lZf+iy1VmsICjG82fZnR9a3sK697doVza9Y1ZnibVQ5w
26
ywIDAQAB
27
-----END PUBLIC KEY-----';
28
29
        $certificate      = DefaultCertificate::fromString($publicKey);
30
        $this->middleware = new ResponseSignatureMiddleware($certificate);
31
    }
32
33
    /**
34
     * @test
35
     */
36 View Code Duplication
    public function itValidatesSignature()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
37
    {
38
        $headers = [
39
            'Date'                        => 'Sat, 20 May 2017 10:40:41 GMT',
40
            'Server'                      => 'Apache',
41
            'Access-Control-Allow-Origin' => '*',
42
            'Cache-Control'               => 'max-age=31536000',
43
            'X-Bunq-Client-Response-Id'   => 'd93e60ce-8de7-4c8c-b911-9614e63ef1db',
44
            'X-Bunq-Client-Request-Id'    => '7c54ccde-89ab-4546-ad91-c6af28ed535a',
45
            'X-Bunq-Server-Signature'     => 'YfMLJ/Rh1n46epfA/qY9dG5dwWk2sIY2W+ceSOR0yH17ifX9Ppx7KtSSgng3NNXdQksBN0LMa2N2BU/uN6fONP+p3K7YpAOV6nGJfF4DqIi4jcL6OpngLLSNG1EX5PJx3FsFHhr7fwp0Bn0pJcgiJqFW6sea9ChoZsMpCUaeCC4jU2MM4LooQM8yBOUYg70+LLlzHhj3C1GhiEzDnw1aEaLDpRGdMK2JeCi0XuAAwB+JvT7TaOwjSvdgT4dHJY8Vo55A3cTpi8niIqQlaUy37DxPmHbSFW9gbki9tUn0+zmT6xJhZutzCGa/W/bqnGSMtsOnybbBFsabiGHOOlBb8g==',
46
            'X-Frame-Options'             => 'SAMEORIGIN',
47
            'ETag'                        => '94930c03a34cd0b94ac1361bcc9f8a7163df238c599eb2ba9163afde1ef229f7',
48
            'Transfer-Encoding'           => 'chunked',
49
            'Content-Type'                => 'application/json',
50
            'Strict-Transport-Security'   => 'max-age=31536000;',
51
        ];
52
53
        $body = '{"Response":[{"Payment":{"id":17495,"created":"2017-04-17 11:01:15.347501","updated":"2017-04-17 11:01:15.347501","monetary_account_id":2030,"amount":{"currency":"EUR","value":"-11.05"},"description":"invoice 1629","type":"BUNQ","merchant_reference":null,"alias":{"iban":"NL37BUNQ9900020189","is_light":false,"display_name":"Linville Co\u00f6peratie","avatar":{"uuid":"465f0bb5-b103-4c0d-ba97-a91b37b7f405","image":[{"attachment_public_uuid":"26031605-c8e9-462a-8117-6edeb61f5d7c","height":1024,"width":1024,"content_type":"image\/png"}],"anchor_uuid":null},"label_user":{"uuid":"79963d66-1561-48a8-8233-a89e4a46a9d3","display_name":"Linville Co\u00f6peratie","country":"NL","avatar":{"uuid":"646d3802-881e-415c-96f9-35397ce7cc9a","image":[{"attachment_public_uuid":"0d10b1c4-b249-4c49-a442-5379bae0a030","height":640,"width":640,"content_type":"image\/png"}],"anchor_uuid":"79963d66-1561-48a8-8233-a89e4a46a9d3"},"public_nick_name":"Linville Co\u00f6peratie"},"country":"NL"},"counterparty_alias":{"iban":"NL37BUNQ9900000013","is_light":false,"display_name":"Catrice (nickname)","avatar":{"uuid":"0f56a33b-a451-48b4-8d4a-3d8a34c15fa1","image":[{"attachment_public_uuid":"5c598364-ab1b-42d7-9a79-91f872f333c1","height":1024,"width":1024,"content_type":"image\/png"}],"anchor_uuid":null},"label_user":{"uuid":"8de50b32-8b97-481f-85a7-aa4e751803f2","display_name":"Catrice (nickname)","country":"NL","avatar":{"uuid":"3552dc00-b8b8-4edc-9163-515647c75d4a","image":[{"attachment_public_uuid":"eca34771-55cc-42c3-b7b4-8f1a978b6624","height":480,"width":480,"content_type":"image\/jpeg"}],"anchor_uuid":"8de50b32-8b97-481f-85a7-aa4e751803f2"},"public_nick_name":"Catrice (nickname)"},"country":"NL"},"attachment":[],"geolocation":null,"batch_id":null,"allow_chat":true,"scheduled_id":null,"address_billing":null,"address_shipping":null}}]}';
54
55
        $response = new Response(200, $headers, $body);
56
57
        $result = $this->middleware->__invoke($response);
58
59
        $this->assertEquals($response, $result);
60
    }
61
62
    /**
63
     * @test
64
     * @expectedException \Exception
65
     * @expectedExceptionMessage Server signature does not match response
66
     */
67 View Code Duplication
    public function itThrowsAnExpectionWhenSignatureDoesNotMatch()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
68
    {
69
        $headers = [
70
            'Date'                        => 'Sat, 20 May 2017 10:40:41 GMT',
71
            'Server'                      => 'Apache',
72
            'Access-Control-Allow-Origin' => '*',
73
            'Cache-Control'               => 'max-age=31536000',
74
            'X-Bunq-Client-Response-Id'   => 'd93e60ce-8de7-4c8c-b911-9614e63ef1db',
75
            'X-Bunq-Client-Request-Id'    => '7c54ccde-89ab-4546-ad91-c6af28ed535a',
76
            'X-Bunq-Server-Signature'     => 'YfMLJ/Rh1n46epfA/qY9dG5dwWk2sIY2W+ceSOR0yH17ifX9Ppx7KtSSgng3NNXdQksBN0LMa2N2BU/uN6fONP+p3K7YpAOV6nGJfF4DqIi4jcL6OpngLLSNG1EX5PJx3FsFHhr7fwp0Bn0pJcgiJqFW6sea9ChoZsMpCUaeCC4jU2MM4LooQM8yBOUYg70+LLlzHhj3C1GhiEzDnw1aEaLDpRGdMK2JeCi0XuAAwB+JvT7TaOwjSvdgT4dHJY8Vo55A3cTpi8niIqQlaUy37DxPmHbSFW9gbki9tUn0+zmT6xJhZutzCGa/W/bqnGSMtsOnybbBFsabiGHOOlBb8g==',
77
            'X-Frame-Options'             => 'SAMEORIGIN',
78
            'ETag'                        => '94930c03a34cd0b94ac1361bcc9f8a7163df238c599eb2ba9163afde1ef229f7',
79
            'Transfer-Encoding'           => 'chunked',
80
            'Content-Type'                => 'application/json',
81
            'Strict-Transport-Security'   => 'max-age=31536000;',
82
        ];
83
84
        $body = '{"Response":[{"Payment":{"id":17495,"created":"2017-04-17 11:01:15.347501","updated":"2017-04-17 11:01:15.347501","monetary_account_id":2030,"amount":{"currency":"EUR","value":"-11.05"},"description":"invoice 1629","type":"BUNQ","merchant_reference":null,"alias":{"iban":"NL37BUNQ9900020189","is_light":false,"display_name":"Man in the middle attack!","avatar":{"uuid":"465f0bb5-b103-4c0d-ba97-a91b37b7f405","image":[{"attachment_public_uuid":"26031605-c8e9-462a-8117-6edeb61f5d7c","height":1024,"width":1024,"content_type":"image\/png"}],"anchor_uuid":null},"label_user":{"uuid":"79963d66-1561-48a8-8233-a89e4a46a9d3","display_name":"Linville Co\u00f6peratie","country":"NL","avatar":{"uuid":"646d3802-881e-415c-96f9-35397ce7cc9a","image":[{"attachment_public_uuid":"0d10b1c4-b249-4c49-a442-5379bae0a030","height":640,"width":640,"content_type":"image\/png"}],"anchor_uuid":"79963d66-1561-48a8-8233-a89e4a46a9d3"},"public_nick_name":"Linville Co\u00f6peratie"},"country":"NL"},"counterparty_alias":{"iban":"NL37BUNQ9900000013","is_light":false,"display_name":"Catrice (nickname)","avatar":{"uuid":"0f56a33b-a451-48b4-8d4a-3d8a34c15fa1","image":[{"attachment_public_uuid":"5c598364-ab1b-42d7-9a79-91f872f333c1","height":1024,"width":1024,"content_type":"image\/png"}],"anchor_uuid":null},"label_user":{"uuid":"8de50b32-8b97-481f-85a7-aa4e751803f2","display_name":"Catrice (nickname)","country":"NL","avatar":{"uuid":"3552dc00-b8b8-4edc-9163-515647c75d4a","image":[{"attachment_public_uuid":"eca34771-55cc-42c3-b7b4-8f1a978b6624","height":480,"width":480,"content_type":"image\/jpeg"}],"anchor_uuid":"8de50b32-8b97-481f-85a7-aa4e751803f2"},"public_nick_name":"Catrice (nickname)"},"country":"NL"},"attachment":[],"geolocation":null,"batch_id":null,"allow_chat":true,"scheduled_id":null,"address_billing":null,"address_shipping":null}}]}';
85
86
        $response = new Response(200, $headers, $body);
87
88
        $result = $this->middleware->__invoke($response);
89
90
        $this->assertEquals($response, $result);
91
    }
92
}
93
94