Skip to content

Commit 15b7912

Browse files
authored
Merge pull request #2 from softonic/Add-tests
Added tests
2 parents 2edf0bb + b5dbe6d commit 15b7912

File tree

4 files changed

+441
-0
lines changed

4 files changed

+441
-0
lines changed

Diff for: tests/.gitkeep

Whitespace-only changes.
+156
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
<?php
2+
3+
namespace Softonic\RestApiNestedResources\Http\Middleware;
4+
5+
use Illuminate\Database\Query\Builder;
6+
use Illuminate\Http\Request;
7+
use Illuminate\Support\Facades\Response;
8+
use Mockery;
9+
use Mockery\MockInterface;
10+
use PHPUnit\Framework\TestCase;
11+
use Symfony\Component\HttpKernel\Exception\ConflictHttpException;
12+
13+
class EnsureModelDoesNotExistTest extends TestCase
14+
{
15+
private Builder $builder;
16+
17+
private $model;
18+
19+
private EnsureModelDoesNotExist $middleware;
20+
21+
protected function setUp(): void
22+
{
23+
parent::setUp();
24+
25+
$this->builder = Mockery::mock(Builder::class);
26+
$this->model = Mockery::mock('alias:PlatformVersion');
27+
28+
$this->middleware = new EnsureModelDoesNotExist();
29+
}
30+
31+
protected function tearDown(): void
32+
{
33+
Mockery::close();
34+
35+
parent::tearDown();
36+
}
37+
38+
/**
39+
* @test
40+
*/
41+
public function whenModelDoesNotExistItShouldPassToTheNextMiddleware()
42+
{
43+
$pathParameters = [
44+
'platform' => 'windows',
45+
];
46+
$requestParameters = [
47+
'id_platform' => 'mac',
48+
'id_version' => 'test',
49+
'name' => 'windows test',
50+
];
51+
52+
$request = $this->getRequest($pathParameters, $requestParameters);
53+
54+
$this->builder->shouldReceive('count')
55+
->once()
56+
->andReturn(0);
57+
58+
$this->model->shouldReceive('where')
59+
->once()
60+
->with([
61+
'id_platform' => 'windows',
62+
'id_version' => 'test',
63+
])
64+
->andReturn($this->builder);
65+
66+
[$controllerResponse, $next] = $this->whenNextMiddlewareIsExecuted();
67+
68+
$response = $this->middleware->handle(
69+
$request,
70+
$next,
71+
'PlatformVersion',
72+
'id_platform',
73+
'id_version'
74+
);
75+
76+
self::assertSame($controllerResponse, $response, 'The response must not be modified');
77+
}
78+
79+
/**
80+
* @test
81+
*/
82+
public function whenModelExistsItShouldAbortTheExecution()
83+
{
84+
$pathParameters = [
85+
'platform' => 'windows',
86+
];
87+
$requestParameters = [
88+
'id_platform' => 'mac',
89+
'id_version' => 'test',
90+
'name' => 'windows test',
91+
];
92+
93+
$request = $this->getRequest($pathParameters, $requestParameters);
94+
95+
$this->builder->shouldReceive('count')
96+
->once()
97+
->andReturn(1);
98+
99+
$this->model->shouldReceive('where')
100+
->once()
101+
->with([
102+
'id_platform' => 'windows',
103+
'id_version' => 'test',
104+
])
105+
->andReturn($this->builder);
106+
107+
$next = $this->whenNextMiddlewareIsNotExecuted();
108+
109+
$parametersToCheck = [
110+
'id_platform' => 'windows',
111+
'id_version' => 'test',
112+
];
113+
$this->expectException(ConflictHttpException::class);
114+
$this->expectExceptionMessage(
115+
'PlatformVersion resource already exists for ' . json_encode($parametersToCheck)
116+
);
117+
118+
$this->middleware->handle(
119+
$request,
120+
$next,
121+
'PlatformVersion',
122+
'id_platform',
123+
'id_version'
124+
);
125+
}
126+
127+
private function getRequest(array $pathParameters, array $requestParameters): MockInterface
128+
{
129+
$request = \Mockery::mock(Request::class);
130+
$request->shouldReceive('route->parameters')
131+
->once()
132+
->andReturn($pathParameters);
133+
$request->shouldReceive('all')
134+
->once()
135+
->andReturn($requestParameters);
136+
137+
return $request;
138+
}
139+
140+
protected function whenNextMiddlewareIsExecuted(): array
141+
{
142+
$controllerResponse = Response::getFacadeRoot();
143+
$next = function (\Illuminate\Http\Request $request) use ($controllerResponse) {
144+
return $controllerResponse;
145+
};
146+
147+
return [$controllerResponse, $next];
148+
}
149+
150+
protected function whenNextMiddlewareIsNotExecuted(): \Closure
151+
{
152+
return function (Request $request) {
153+
self::assertTrue(false, 'The next handler must never be executed in this case.');
154+
};
155+
}
156+
}

Diff for: tests/Http/Middleware/EnsureModelExistsTest.php

+143
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
<?php
2+
3+
namespace Softonic\RestApiNestedResources\Http\Middleware;
4+
5+
use Illuminate\Http\Request;
6+
use Illuminate\Support\Facades\Response;
7+
use PHPUnit\Framework\TestCase;
8+
use Softonic\RestApiNestedResources\PreProcessors\EnsureModelExists as EnsureModelExistsProcessor;
9+
use Symfony\Component\HttpKernel\Exception\ConflictHttpException;
10+
11+
class EnsureModelExistsTest extends TestCase
12+
{
13+
private EnsureModelExistsProcessor $ensureModelExistsProcessor;
14+
15+
private EnsureModelExists $middleware;
16+
17+
protected function setUp(): void
18+
{
19+
parent::setUp();
20+
21+
$this->ensureModelExistsProcessor = \Mockery::mock(EnsureModelExistsProcessor::class);
22+
23+
$this->middleware = new EnsureModelExists($this->ensureModelExistsProcessor);
24+
}
25+
26+
/**
27+
* @test
28+
*/
29+
public function whenModelExistsItShouldPassToTheNextMiddleware()
30+
{
31+
$pathParameters = [
32+
'program' => 'f0f1ae26-e44a-460a-9f59-f53c83ec4372',
33+
'platform' => 'windows',
34+
];
35+
$requestParameters = [
36+
'id_program' => 'f0f1ae26-e44a-460a-9f59-f53c83ec4372',
37+
'id_platform' => 'mac',
38+
'id_version' => '1.0',
39+
'id_platformversion' => 'test',
40+
];
41+
$request = $this->getRequest($pathParameters, $requestParameters);
42+
43+
$this->ensureModelExistsProcessor->shouldReceive('process')
44+
->once()
45+
->with(
46+
'PlatformVersion',
47+
['id_platform', 'id_version=id_platformversion'],
48+
[
49+
'id_program' => 'f0f1ae26-e44a-460a-9f59-f53c83ec4372',
50+
'id_platform' => 'windows',
51+
'id_version' => '1.0',
52+
'id_platformversion' => 'test',
53+
]
54+
);
55+
56+
[$controllerResponse, $next] = $this->whenNextMiddlewareIsExecuted();
57+
58+
$response = $this->middleware->handle(
59+
$request,
60+
$next,
61+
'PlatformVersion',
62+
'id_platform',
63+
'id_version=id_platformversion'
64+
);
65+
66+
self::assertSame($controllerResponse, $response, 'The response must not be modified');
67+
}
68+
69+
/**
70+
* @test
71+
*/
72+
public function whenModelDoesNotExistItShouldAbortTheExecution()
73+
{
74+
$pathParameters = [
75+
'program' => 'f0f1ae26-e44a-460a-9f59-f53c83ec4372',
76+
'platform' => 'windows',
77+
];
78+
$requestParameters = [
79+
'id_program' => 'f0f1ae26-e44a-460a-9f59-f53c83ec4372',
80+
'id_platform' => 'mac',
81+
'id_version' => '1.0',
82+
'id_platformversion' => 'test',
83+
];
84+
$request = $this->getRequest($pathParameters, $requestParameters);
85+
86+
$this->ensureModelExistsProcessor->shouldReceive('process')
87+
->once()
88+
->with(
89+
'PlatformVersion',
90+
['id_platform', 'id_version=id_platformversion'],
91+
[
92+
'id_program' => 'f0f1ae26-e44a-460a-9f59-f53c83ec4372',
93+
'id_platform' => 'windows',
94+
'id_version' => '1.0',
95+
'id_platformversion' => 'test',
96+
]
97+
)
98+
->andThrow(new ConflictHttpException('error message'));
99+
100+
$next = $this->whenNextMiddlewareIsNotExecuted();
101+
102+
$this->expectException(ConflictHttpException::class);
103+
$this->expectExceptionMessage('error message');
104+
105+
$this->middleware->handle(
106+
$request,
107+
$next,
108+
'PlatformVersion',
109+
'id_platform',
110+
'id_version=id_platformversion'
111+
);
112+
}
113+
114+
private function getRequest(array $pathParameters, array $requestParameters): Request
115+
{
116+
$request = \Mockery::mock(Request::class);
117+
$request->shouldReceive('route->parameters')
118+
->once()
119+
->andReturn($pathParameters);
120+
$request->shouldReceive('all')
121+
->once()
122+
->andReturn($requestParameters);
123+
124+
return $request;
125+
}
126+
127+
private function whenNextMiddlewareIsExecuted(): array
128+
{
129+
$controllerResponse = Response::getFacadeRoot();
130+
$next = function (Request $request) use ($controllerResponse) {
131+
return $controllerResponse;
132+
};
133+
134+
return [$controllerResponse, $next];
135+
}
136+
137+
private function whenNextMiddlewareIsNotExecuted(): \Closure
138+
{
139+
return function (Request $request) {
140+
self::assertTrue(false, 'The next handler must never be executed in this case.');
141+
};
142+
}
143+
}

0 commit comments

Comments
 (0)