Passed
Push — master ( 4b2c1a...a53d55 )
by Maximilian
02:53
created

IntentRequestTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 20
c 0
b 0
f 0
dl 0
loc 39
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A testMissingRequestData() 0 4 1
A testMissingRequestHeaders() 0 5 1
A testIntentRequestWithNumericTimestamp() 0 8 1
A testIntentRequest() 0 6 1
A testIntentRequestShouldGetApplicationId() 0 6 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace MaxBeckers\AmazonAlexa\Test\Request;
6
7
use MaxBeckers\AmazonAlexa\Exception\MissingRequestDataException;
8
use MaxBeckers\AmazonAlexa\Exception\MissingRequiredHeaderException;
9
use MaxBeckers\AmazonAlexa\Request\Request;
10
use MaxBeckers\AmazonAlexa\Request\Request\Standard\IntentRequest;
11
use PHPUnit\Framework\TestCase;
12
13
class IntentRequestTest extends TestCase
14
{
15
    public function testMissingRequestData(): void
16
    {
17
        $this->expectException(MissingRequestDataException::class);
18
        Request::fromAmazonRequest('', '', '');
19
    }
20
21
    public function testMissingRequestHeaders(): void
22
    {
23
        $this->expectException(MissingRequiredHeaderException::class);
24
        $requestBody = file_get_contents(__DIR__ . '/RequestData/intent.json');
25
        Request::fromAmazonRequest($requestBody, '', '');
26
    }
27
28
    public function testIntentRequest(): void
29
    {
30
        $requestBody = file_get_contents(__DIR__ . '/RequestData/intent.json');
31
        $request = Request::fromAmazonRequest($requestBody, 'https://s3.amazonaws.com/echo.api/echo-api-cert.pem', 'signature');
32
        $this->assertInstanceOf(IntentRequest::class, $request->request);
33
        $this->assertSame('my-application-id', $request->context->system->application->applicationId);
34
    }
35
36
    public function testIntentRequestShouldGetApplicationId(): void
37
    {
38
        $requestBody = file_get_contents(__DIR__ . '/RequestData/intent.json');
39
        $request = Request::fromAmazonRequest($requestBody, 'https://s3.amazonaws.com/echo.api/echo-api-cert.pem', 'signature');
40
        $this->assertInstanceOf(IntentRequest::class, $request->request);
41
        $this->assertSame('applicationId', $request->getApplicationId());
42
    }
43
44
    public function testIntentRequestWithNumericTimestamp(): void
45
    {
46
        $requestBody = json_decode(file_get_contents(__DIR__ . '/RequestData/intent.json'), true);
47
        $requestBody['request']['timestamp'] = 65545900;
48
        $requestBody = json_encode($requestBody);
49
        $request = Request::fromAmazonRequest($requestBody, 'https://s3.amazonaws.com/echo.api/echo-api-cert.pem', 'signature');
50
        $this->assertInstanceOf(IntentRequest::class, $request->request);
51
        $this->assertSame('my-application-id', $request->context->system->application->applicationId);
52
    }
53
}
54