• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

api-platform / core / 13203378522

07 Feb 2025 03:56PM UTC coverage: 8.501% (+0.7%) from 7.837%
13203378522

push

github

soyuka
Merge 4.1

111 of 490 new or added lines in 51 files covered. (22.65%)

5590 existing lines in 163 files now uncovered.

13345 of 156987 relevant lines covered (8.5%)

22.88 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/tests/Symfony/Controller/MainControllerTest.php
1
<?php
2

3
/*
4
 * This file is part of the API Platform project.
5
 *
6
 * (c) Kévin Dunglas <dunglas@gmail.com>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11

12
declare(strict_types=1);
13

14
namespace ApiPlatform\Tests\Symfony\Controller;
15

16
use ApiPlatform\Metadata\Error;
17
use ApiPlatform\Metadata\Exception\RuntimeException;
18
use ApiPlatform\Metadata\Get;
19
use ApiPlatform\Metadata\Link;
20
use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;
21
use ApiPlatform\State\ProcessorInterface;
22
use ApiPlatform\State\ProviderInterface;
23
use ApiPlatform\Symfony\Controller\MainController;
24
use PHPUnit\Framework\TestCase;
25
use Psr\Log\LoggerInterface;
26
use Symfony\Component\HttpFoundation\Request;
27
use Symfony\Component\HttpFoundation\Response;
28
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
29

30
class MainControllerTest extends TestCase
31
{
32
    public function testControllerNotSupported(): void
33
    {
34
        $this->expectException(RuntimeException::class);
×
35
        $resourceMetadataFactory = $this->createMock(ResourceMetadataCollectionFactoryInterface::class);
×
36
        $provider = $this->createMock(ProviderInterface::class);
×
37
        $processor = $this->createMock(ProcessorInterface::class);
×
38
        $controller = new MainController($resourceMetadataFactory, $provider, $processor);
×
39
        $controller->__invoke(new Request());
×
40
    }
41

42
    public function testController(): void
43
    {
44
        $resourceMetadataFactory = $this->createMock(ResourceMetadataCollectionFactoryInterface::class);
×
45
        $provider = $this->createMock(ProviderInterface::class);
×
46
        $processor = $this->createMock(ProcessorInterface::class);
×
47
        $controller = new MainController($resourceMetadataFactory, $provider, $processor);
×
48

49
        $body = new \stdClass();
×
50
        $response = new Response();
×
51
        $request = new Request();
×
52
        $request->attributes->set('_api_operation', new Get());
×
53

54
        $provider->expects($this->once())
×
55
            ->method('provide')
×
56
            ->willReturn($body);
×
57

58
        $processor->expects($this->once())
×
59
            ->method('process')
×
60
            ->willReturn($response);
×
61

62
        $this->assertEquals($response, $controller->__invoke($request));
×
63
    }
64

65
    public function testControllerWithNonExistentUriVariables(): void
66
    {
67
        $this->expectException(NotFoundHttpException::class);
×
68
        $resourceMetadataFactory = $this->createMock(ResourceMetadataCollectionFactoryInterface::class);
×
69
        $provider = $this->createMock(ProviderInterface::class);
×
70
        $processor = $this->createMock(ProcessorInterface::class);
×
71
        $controller = new MainController($resourceMetadataFactory, $provider, $processor);
×
72

73
        $body = new \stdClass();
×
74
        $response = new Response();
×
75
        $request = new Request();
×
76
        $request->attributes->set('_api_operation', new Get(uriVariables: ['id' => new Link()]));
×
77

78
        $controller->__invoke($request);
×
79
    }
80

81
    public function testControllerWithUriVariables(): void
82
    {
83
        $resourceMetadataFactory = $this->createMock(ResourceMetadataCollectionFactoryInterface::class);
×
84
        $provider = $this->createMock(ProviderInterface::class);
×
85
        $processor = $this->createMock(ProcessorInterface::class);
×
86
        $controller = new MainController($resourceMetadataFactory, $provider, $processor);
×
87

88
        $body = new \stdClass();
×
89
        $response = new Response();
×
90
        $request = new Request();
×
91
        $request->attributes->set('_api_operation', new Get(uriVariables: ['id' => new Link()]));
×
92
        $request->attributes->set('id', 0);
×
93

94
        $provider->expects($this->once())
×
95
            ->method('provide')
×
96
            ->willReturn($body);
×
97

98
        $processor->expects($this->once())
×
99
            ->method('process')
×
100
            ->willReturn($response);
×
101

102
        $this->assertEquals($response, $controller->__invoke($request));
×
103
    }
104

105
    public function testControllerErrorWithUriVariables(): void
106
    {
107
        $resourceMetadataFactory = $this->createMock(ResourceMetadataCollectionFactoryInterface::class);
×
108
        $provider = $this->createMock(ProviderInterface::class);
×
109
        $processor = $this->createMock(ProcessorInterface::class);
×
110
        $controller = new MainController($resourceMetadataFactory, $provider, $processor);
×
111

112
        $body = new \stdClass();
×
113
        $response = new Response();
×
114
        $request = new Request();
×
NEW
115
        $request->attributes->set('exception', new \Exception());
×
UNCOV
116
        $request->attributes->set('_api_operation', new Error(uriVariables: ['id' => new Link()]));
×
117

118
        $provider->expects($this->once())
×
119
            ->method('provide')
×
120
            ->willReturn($body);
×
121

122
        $processor->expects($this->once())
×
123
            ->method('process')
×
124
            ->willReturn($response);
×
125

126
        $this->assertEquals($response, $controller->__invoke($request));
×
127
    }
128

129
    public function testControllerErrorWithUriVariablesDuringProvider(): void
130
    {
131
        $resourceMetadataFactory = $this->createMock(ResourceMetadataCollectionFactoryInterface::class);
×
132
        $provider = $this->createMock(ProviderInterface::class);
×
133
        $logger = $this->createMock(LoggerInterface::class);
×
134
        $processor = $this->createMock(ProcessorInterface::class);
×
135
        $controller = new MainController($resourceMetadataFactory, $provider, $processor, logger: $logger);
×
136

137
        $response = new Response();
×
138
        $request = new Request();
×
NEW
139
        $request->attributes->set('exception', new \Exception());
×
140
        $request->attributes->set('_api_operation', new Get(uriVariables: ['id' => new Link()]));
×
141
        $request->attributes->set('id', '1');
×
142

143
        $provider->expects($this->once())
×
144
            ->method('provide')
×
145
            ->willReturnCallback(function () use ($request) {
×
146
                $request->attributes->set('_api_operation', new Error(uriVariables: ['status' => new Link()]));
×
147
                $request->attributes->remove('id');
×
148

149
                return new \stdClass();
×
150
            });
×
151

152
        $logger->expects($this->never())->method('error');
×
153
        $processor->expects($this->once())
×
154
            ->method('process')
×
155
            ->willReturn($response);
×
156

157
        $this->assertEquals($response, $controller->__invoke($request));
×
158
    }
159
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc