Skip to content

Commit

Permalink
Improved tests for routes macros.
Browse files Browse the repository at this point in the history
  • Loading branch information
ulin-evgeny committed May 16, 2024
1 parent 2ca73ed commit 19ff088
Show file tree
Hide file tree
Showing 4 changed files with 294 additions and 52 deletions.
4 changes: 4 additions & 0 deletions src/HelpersServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@ protected function extendRouter()
RouteFacade::macro('whereIn', function ($parameters, array $values) {
return static::getFacadeRoot()->assignExpressionToParameters($parameters, implode('|', $values));
});

RouteFacade::macro('prefix', function (string $prefix) {
return static::getFacadeRoot()->prefix($prefix);
});
}

/**
Expand Down
219 changes: 170 additions & 49 deletions tests/VersionRouteTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,113 +2,232 @@

namespace RonasIT\Support\Tests;

use Illuminate\Support\Facades\Route;
use RonasIT\Support\Contracts\VersionEnumContract;
use RonasIT\Support\Tests\Support\Enum\VersionEnum;
use RonasIT\Support\Routing\RouteFacade;
use RonasIT\Support\Tests\Support\Traits\RouteMockTrait;

class VersionRouteTest extends HelpersTestCase
{
protected const ROUTE_FACADE = '/test-facade';
protected const ROUTE_OBJECT = '/test-object';
use RouteMockTrait;

protected const ROUTE_FACADE_RANGE = '/test-facade-range';
protected const ROUTE_FACADE_FROM = '/test-facade-from';
protected const ROUTE_FACADE_TO = '/test-facade-to';
protected const ROUTE_OBJECT_RANGE = '/test-object-range';
protected const ROUTE_OBJECT_FROM = '/test-object-from';
protected const ROUTE_OBJECT_TO = '/test-object-to';

protected const ROUTE_FACADE_VERSION = '/test-facade-version';

public function setUp(): void
{
parent::setUp();

$this->app->bind(VersionEnumContract::class, VersionEnum::class);

switch ($this->getProvidedData()['route']) {
case static::ROUTE_FACADE:
$versionFrom = $this->createMock(VersionEnumContract::class);
$versionFrom->value = VersionEnum::v11;
$versionTo = $this->createMock(VersionEnumContract::class);
$versionTo->value = VersionEnum::v12;
Route::group(['prefix' => 'v{version}'], function () use ($versionTo, $versionFrom) {
RouteFacade::versionRange($versionFrom, $versionTo)->group(function () {
Route::get(static::ROUTE_FACADE, function () {
return 'RouteFacade';
});
});
});
break;
case static::ROUTE_OBJECT:
$versionFrom = $this->createMock(VersionEnumContract::class);
$versionFrom->value = VersionEnum::v1;
$versionTo = $this->createMock(VersionEnumContract::class);
$versionTo->value = VersionEnum::v2;
Route::group(['prefix' => 'v{version}'], function () use ($versionTo, $versionFrom) {
Route::get(static::ROUTE_OBJECT, function () {
return 'Route';
})->versionRange($versionFrom, $versionTo);
});
break;
}
}

public function getTestVersionRangeData(): array
{
return [
// Range
[
'version' => '1',
'is_correct_version' => true,
'route' => static::ROUTE_OBJECT_RANGE,
],
[
'version' => '1.0',
'is_correct_version' => false,
'route' => static::ROUTE_OBJECT_RANGE,
],
[
'version' => '0.5',
'is_correct_version' => false,
'route' => static::ROUTE_OBJECT_RANGE,
],
[
'version' => '4',
'is_correct_version' => false,
'route' => static::ROUTE_OBJECT_RANGE,
],
[
'version' => '2',
'is_correct_version' => true,
'route' => static::ROUTE_OBJECT_RANGE,
],
[
'version' => '2.0',
'is_correct_version' => false,
'route' => static::ROUTE_OBJECT_RANGE,
],
[
'version' => '1.5',
'is_correct_version' => false,
'route' => static::ROUTE_OBJECT_RANGE,
],

[
'version' => '1',
'is_correct_version' => true,
'route' => static::ROUTE_OBJECT,
'route' => static::ROUTE_FACADE_RANGE,
],
[
'version' => '1.0',
'is_correct_version' => false,
'route' => static::ROUTE_OBJECT,
'route' => static::ROUTE_FACADE_RANGE,
],
[
'version' => '0.5',
'is_correct_version' => false,
'route' => static::ROUTE_OBJECT,
'route' => static::ROUTE_FACADE_RANGE,
],
[
'version' => '4',
'is_correct_version' => false,
'route' => static::ROUTE_OBJECT,
'route' => static::ROUTE_FACADE_RANGE,
],
[
'version' => '2',
'is_correct_version' => true,
'route' => static::ROUTE_OBJECT,
'route' => static::ROUTE_FACADE_RANGE,
],
[
'version' => '2.0',
'is_correct_version' => false,
'route' => static::ROUTE_FACADE_RANGE,
],
[
'version' => '1.5',
'is_correct_version' => false,
'route' => static::ROUTE_FACADE_RANGE,
],

// From
[
'version' => '1',
'is_correct_version' => false,
'route' => static::ROUTE_OBJECT_FROM,
],
[
'version' => '2.0',
'is_correct_version' => false,
'route' => static::ROUTE_OBJECT_FROM,
],
[
'version' => '2',
'is_correct_version' => true,
'route' => static::ROUTE_OBJECT_FROM,
],
[
'version' => '3',
'is_correct_version' => true,
'route' => static::ROUTE_OBJECT_FROM,
],
[
'version' => '3.5',
'is_correct_version' => false,
'route' => static::ROUTE_OBJECT_FROM,
],

[
'version' => '1',
'is_correct_version' => false,
'route' => static::ROUTE_FACADE_FROM,
],
[
'version' => '2.0',
'is_correct_version' => false,
'route' => static::ROUTE_OBJECT,
'route' => static::ROUTE_FACADE_FROM,
],
[
'version' => '2',
'is_correct_version' => true,
'route' => static::ROUTE_FACADE_FROM,
],
[
'version' => '3',
'is_correct_version' => true,
'route' => static::ROUTE_FACADE_FROM,
],
[
'version' => '3.5',
'is_correct_version' => false,
'route' => static::ROUTE_FACADE_FROM,
],

// To
[
'version' => '11',
'version' => '1',
'is_correct_version' => true,
'route' => static::ROUTE_OBJECT_TO,
],
[
'version' => '2.0',
'is_correct_version' => false,
'route' => static::ROUTE_OBJECT_TO,
],
[
'version' => '2',
'is_correct_version' => true,
'route' => static::ROUTE_FACADE,
'route' => static::ROUTE_OBJECT_TO,
],
[
'version' => '11.0',
'version' => '3',
'is_correct_version' => false,
'route' => static::ROUTE_FACADE,
'route' => static::ROUTE_OBJECT_TO,
],
[
'version' => '10.5',
'version' => '1.5',
'is_correct_version' => false,
'route' => static::ROUTE_FACADE,
'route' => static::ROUTE_OBJECT_TO,
],

[
'version' => '14',
'version' => '1',
'is_correct_version' => false,
'route' => static::ROUTE_FACADE,
'route' => static::ROUTE_FACADE_FROM,
],
[
'version' => '2.0',
'is_correct_version' => false,
'route' => static::ROUTE_FACADE_FROM,
],
[
'version' => '2',
'is_correct_version' => true,
'route' => static::ROUTE_FACADE_FROM,
],
[
'version' => '12',
'version' => '3',
'is_correct_version' => true,
'route' => static::ROUTE_FACADE,
'route' => static::ROUTE_FACADE_FROM,
],
[
'version' => '12.0',
'version' => '3.5',
'is_correct_version' => false,
'route' => static::ROUTE_FACADE,
'route' => static::ROUTE_FACADE_FROM,
],

// Version
[
'version' => '2',
'is_correct_version' => true,
'route' => static::ROUTE_FACADE_VERSION,
],
[
'version' => '2.0',
'is_correct_version' => false,
'route' => static::ROUTE_FACADE_VERSION,
],
[
'version' => '1',
'is_correct_version' => false,
'route' => static::ROUTE_FACADE_VERSION,
],
[
'version' => '3',
'is_correct_version' => false,
'route' => static::ROUTE_FACADE_VERSION,
],
];
}
Expand All @@ -118,6 +237,8 @@ public function getTestVersionRangeData(): array
*/
public function testVersionRange(string $version, bool $isCorrectVersion, string $route): void
{
$this->mockRoutes();

$response = $this->get("/v{$version}{$route}");

$status = ($isCorrectVersion) ? 200 : 404;
Expand Down
5 changes: 2 additions & 3 deletions tests/support/Enum/VersionEnum.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@ class VersionEnum implements VersionEnumContract
{
const v1 = '1';
const v2 = '2';
const v11 = '11';
const v12 = '12';
const v3 = '3';

public static function values(): array
{
return [static::v1, static::v2, static::v11, static::v12];
return [static::v1, static::v2, static::v3];
}

public static function toString(string $separator = ','): string
Expand Down

0 comments on commit 19ff088

Please sign in to comment.