Issues (51)

Test/RequestHandler/RequestHandlerRegistryTest.php (1 issue)

1
<?php
2
3
declare(strict_types=1);
4
5
namespace MaxBeckers\AmazonAlexa\Test\RequestHandler;
6
7
use MaxBeckers\AmazonAlexa\Exception\MissingRequestHandlerException;
8
use MaxBeckers\AmazonAlexa\Helper\ResponseHelper;
9
use MaxBeckers\AmazonAlexa\Request\Application;
10
use MaxBeckers\AmazonAlexa\Request\Context;
11
use MaxBeckers\AmazonAlexa\Request\Request;
12
use MaxBeckers\AmazonAlexa\Request\Request\Standard\IntentRequest;
13
use MaxBeckers\AmazonAlexa\Request\Session;
14
use MaxBeckers\AmazonAlexa\Request\System;
15
use MaxBeckers\AmazonAlexa\RequestHandler\AbstractRequestHandler;
16
use MaxBeckers\AmazonAlexa\RequestHandler\RequestHandlerRegistry;
17
use MaxBeckers\AmazonAlexa\Response\Response;
18
use PHPUnit\Framework\TestCase;
19
20
class RequestHandlerRegistryTest extends TestCase
21
{
22
    public function testSimpleRequest(): void
23
    {
24
        $responseHelper = new ResponseHelper();
25
        $handler = new SimpleTestRequestHandler($responseHelper);
26
        $registry = new RequestHandlerRegistry();
27
28
        $intentRequest = new IntentRequest();
29
        $intentRequest->type = 'test';
30
        $application = new Application();
31
        $application->applicationId = 'my_amazon_skill_id';
32
        $system = new System();
33
        $system->application = $application;
34
        $context = new Context();
35
        $context->system = $system;
36
        $session = new Session();
37
        $session->application = $application;
38
        $request = new Request();
39
        $request->request = $intentRequest;
40
        $request->context = $context;
41
        $request->session = $session;
42
43
        $registry->addHandler($handler);
44
        $registry->getSupportingHandler($request);
45
46
        $this->assertSame($handler, $registry->getSupportingHandler($request));
47
    }
48
49
    public function testSimpleRequestAddHandlerByConstructor(): void
50
    {
51
        $responseHelper = new ResponseHelper();
52
        $handler = new SimpleTestRequestHandler($responseHelper);
53
        $registry = new RequestHandlerRegistry([$handler]);
54
55
        $intentRequest = new IntentRequest();
56
        $intentRequest->type = 'test';
57
        $application = new Application();
58
        $application->applicationId = 'my_amazon_skill_id';
59
        $system = new System();
60
        $system->application = $application;
61
        $context = new Context();
62
        $context->system = $system;
63
        $session = new Session();
64
        $session->application = $application;
65
        $request = new Request();
66
        $request->request = $intentRequest;
67
        $request->context = $context;
68
        $request->session = $session;
69
70
        $registry->getSupportingHandler($request);
71
72
        $this->assertSame($handler, $registry->getSupportingHandler($request));
73
    }
74
75
    public function testMissingHandlerRequest(): void
76
    {
77
        $registry = new RequestHandlerRegistry();
78
79
        $intentRequest = new IntentRequest();
80
        $intentRequest->type = 'test';
81
        $application = new Application();
82
        $application->applicationId = 'my_amazon_skill_id';
83
        $system = new System();
84
        $system->application = $application;
85
        $context = new Context();
86
        $context->system = $system;
87
        $session = new Session();
88
        $session->application = $application;
89
        $request = new Request();
90
        $request->request = $intentRequest;
91
        $request->context = $context;
92
        $request->session = $session;
93
94
        $this->expectException(MissingRequestHandlerException::class);
95
        $registry->getSupportingHandler($request);
96
    }
97
}
98
class SimpleTestRequestHandler extends AbstractRequestHandler
99
{
100
    public function __construct(
101
        private readonly ResponseHelper $responseHelper
102
    ) {
103
        $this->supportedApplicationIds = ['my_amazon_skill_id'];
104
    }
105
106
    public function supportsRequest(Request $request): bool
107
    {
108
        return 'test' === $request->request->type;
109
    }
110
111
    public function handleRequest(Request $request): Response
112
    {
113
        return $this->responseHelper->respond('Success :)');
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->responseHe...->respond('Success :)') could return the type null which is incompatible with the type-hinted return MaxBeckers\AmazonAlexa\Response\Response. Consider adding an additional type-check to rule them out.
Loading history...
114
    }
115
}
116