Issues (51)

test/Test/Request/APLRequestsTest.php (1 issue)

Labels
Severity
1
<?php
2
3
declare(strict_types=1);
4
5
namespace MaxBeckers\AmazonAlexa\Test\Request;
6
7
use MaxBeckers\AmazonAlexa\Request\Request;
8
use MaxBeckers\AmazonAlexa\Request\Request\APL\LoadIndexListDataRequest;
9
use MaxBeckers\AmazonAlexa\Request\Request\APL\LoadTokenListDataRequest;
10
use MaxBeckers\AmazonAlexa\Request\Request\APL\RuntimeError;
11
use MaxBeckers\AmazonAlexa\Request\Request\APL\RuntimeErrorRequest;
12
use MaxBeckers\AmazonAlexa\Request\Request\APL\RuntimeErrorType;
13
use MaxBeckers\AmazonAlexa\Request\Request\APL\UserEventRequest;
14
use PHPUnit\Framework\TestCase;
15
16
class APLRequestsTest extends TestCase
17
{
18
    public function testLoadIndexListDataRequest(): void
19
    {
20
        $requestBody = file_get_contents(__DIR__ . '/RequestData/aplLoadIndexListData.json');
21
        $request = Request::fromAmazonRequest($requestBody, 'https://s3.amazonaws.com/echo.api/echo-api-cert.pem', 'signature');
22
23
        $this->assertInstanceOf(LoadIndexListDataRequest::class, $request->request);
24
        $this->assertEquals('Alexa.Presentation.APL.LoadIndexListData', $request->request->type);
25
        $this->assertEquals('developer-provided-token', $request->request->token);
26
        $this->assertEquals('101', $request->request->correlationToken);
27
        $this->assertEquals('my-list-id', $request->request->listId);
28
        $this->assertEquals('10', $request->request->startIndex);
29
        $this->assertEquals(5, $request->request->count);
30
    }
31
32
    public function testLoadTokenListDataRequest(): void
33
    {
34
        $requestBody = file_get_contents(__DIR__ . '/RequestData/aplLoadTokenListData.json');
35
        $request = Request::fromAmazonRequest($requestBody, 'https://s3.amazonaws.com/echo.api/echo-api-cert.pem', 'signature');
36
37
        $this->assertInstanceOf(LoadTokenListDataRequest::class, $request->request);
38
        $this->assertEquals('Alexa.Presentation.APL.LoadTokenListData', $request->request->type);
39
        $this->assertEquals('developer-provided-token', $request->request->token);
40
        $this->assertEquals('101', $request->request->correlationToken);
41
        $this->assertEquals('my-list-id', $request->request->listId);
42
        $this->assertEquals('myListPage2', $request->request->pageToken);
43
    }
44
45
    public function testRuntimeErrorRequest(): void
46
    {
47
        $requestBody = file_get_contents(__DIR__ . '/RequestData/aplRuntimeError.json');
48
        $request = Request::fromAmazonRequest($requestBody, 'https://s3.amazonaws.com/echo.api/echo-api-cert.pem', 'signature');
49
50
        $this->assertInstanceOf(RuntimeErrorRequest::class, $request->request);
51
        $this->assertEquals('Alexa.Presentation.APL.RuntimeError', $request->request->type);
52
        $this->assertEquals('developer-provided-token', $request->request->token);
53
        $this->assertCount(1, $request->request->errors);
54
55
        $error = $request->request->errors[0];
56
        $this->assertInstanceOf(RuntimeError::class, $error);
57
        $this->assertEquals(RuntimeErrorType::LIST_ERROR, $error->type);
58
        $this->assertEquals('LIST_INDEX_OUT_OF_RANGE', $error->reason);
59
        $this->assertEquals('my-list-id', $error->listId);
60
        $this->assertEquals(3, $error->listVersion);
61
        $this->assertEquals(3, $error->operationIndex);
62
        $this->assertEquals('Index out of range error', $error->message);
63
    }
64
65
    public function testUserEventRequest(): void
66
    {
67
        $requestBody = file_get_contents(__DIR__ . '/RequestData/aplUserEvent.json');
68
        $request = Request::fromAmazonRequest($requestBody, 'https://s3.amazonaws.com/echo.api/echo-api-cert.pem', 'signature');
69
70
        $this->assertInstanceOf(UserEventRequest::class, $request->request);
71
        $this->assertEquals('Alexa.Presentation.APL.UserEvent', $request->request->type);
72
        $this->assertEquals('developer-provided-token', $request->request->token);
73
        $this->assertCount(1, $request->request->arguments);
74
        $this->assertEquals('ItemIDForSmokedWildSalmon', $request->request->arguments[0]['itemId']);
75
        $this->assertEquals('TouchWrapper', $request->request->source['type']);
76
        $this->assertEquals('Press', $request->request->source['handler']);
77
        $this->assertEquals('myTouchWrapperPress', $request->request->source['id']);
78
        $this->assertEquals('TouchWrapper', $request->request->components['myTouchWrapperPress']['type']);
79
        $this->assertEquals('widget-presentation-uri-123', $request->request->presentationUri);
80
    }
81
82
    public function testLoadIndexListDataRequestWithNumericStartIndex(): void
83
    {
84
        $requestBody = json_decode(file_get_contents(__DIR__ . '/RequestData/aplLoadIndexListData.json'), true);
85
        $requestBody['request']['startIndex'] = 10;
86
        $requestBody = json_encode($requestBody);
87
88
        $request = Request::fromAmazonRequest($requestBody, 'https://s3.amazonaws.com/echo.api/echo-api-cert.pem', 'signature');
89
90
        $this->assertInstanceOf(LoadIndexListDataRequest::class, $request->request);
91
        $this->assertEquals(10, $request->request->startIndex);
92
    }
93
94
    public function testRuntimeErrorRequestValidateTimestamp(): void
95
    {
96
        $requestBody = file_get_contents(__DIR__ . '/RequestData/aplRuntimeError.json');
97
        $request = Request::fromAmazonRequest($requestBody, 'https://s3.amazonaws.com/echo.api/echo-api-cert.pem', 'signature');
98
99
        $this->assertInstanceOf(RuntimeErrorRequest::class, $request->request);
100
        $this->assertFalse($request->request->validateTimestamp());
0 ignored issues
show
The method validateTimestamp() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

100
        $this->assertFalse($request->request->/** @scrutinizer ignore-call */ validateTimestamp());

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
101
    }
102
103
    public function testUserEventRequestValidateTimestamp(): void
104
    {
105
        $requestBody = file_get_contents(__DIR__ . '/RequestData/aplUserEvent.json');
106
        $request = Request::fromAmazonRequest($requestBody, 'https://s3.amazonaws.com/echo.api/echo-api-cert.pem', 'signature');
107
108
        $this->assertInstanceOf(UserEventRequest::class, $request->request);
109
        $this->assertFalse($request->request->validateTimestamp());
110
    }
111
}
112