Skip to content

Commit 6ab2980

Browse files
committed
Added route builder, extra tests, auto formatting.
1 parent bf21adb commit 6ab2980

File tree

12 files changed

+187
-1
lines changed

12 files changed

+187
-1
lines changed

.gitattributes

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/tests export-ignore
2+
/phpunit.xml export-ignore
3+
/.gitattributes export-ignore

composer.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
],
1010
"require": {
1111
"php": ">=5.4.0",
12-
"illuminate/support": "~4.0|~5.0"
12+
"illuminate/support": "~4.0|~5.0",
13+
"mockery/mockery": "^0.9.9"
1314
},
1415
"require-dev": {
1516
"phpunit/phpunit": "~4.0"
@@ -19,5 +20,10 @@
1920
"Briedis\\ApiBuilder": "src/"
2021
}
2122
},
23+
"autoload-dev": {
24+
"psr-4": {
25+
"Briedis\\ApiBuilder\\Tests\\": "tests/"
26+
}
27+
},
2228
"minimum-stability": "stable"
2329
}

src/Briedis/ApiBuilder/Exceptions/InvalidParameterTypeException.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
23
namespace Briedis\ApiBuilder\Exceptions;
34

45
use Briedis\ApiBuilder\Items\BaseItem;

src/Briedis/ApiBuilder/Presenter.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
23
namespace Briedis\ApiBuilder;
34

45

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace Briedis\ApiBuilder;
4+
5+
use Closure;
6+
use Illuminate\Contracts\Routing\Registrar;
7+
8+
/**
9+
* Class to help build routes
10+
*/
11+
class RouteBuilder
12+
{
13+
/** @var Registrar */
14+
private $registrar;
15+
16+
/**
17+
* @param Registrar $registrar
18+
*/
19+
public function __construct(Registrar $registrar)
20+
{
21+
$this->registrar = $registrar;
22+
}
23+
24+
/**
25+
* Generate a route for a given method
26+
* @param Method $method
27+
* @param array|Closure|null|string $routeAction
28+
* @return self
29+
*/
30+
public function add(Method $method, $routeAction)
31+
{
32+
$mapping = [
33+
'GET' => 'get',
34+
'POST' => 'post',
35+
'PUT' => 'put',
36+
'DELETE' => 'delete',
37+
'PATCH' => 'patch',
38+
];
39+
40+
if (!isset($mapping[$method::METHOD])) {
41+
throw new \InvalidArgumentException('Unknown method type: ' . $method::METHOD);
42+
}
43+
44+
$routeMethod = $mapping[$method::METHOD];
45+
46+
call_user_func([$this->registrar, $routeMethod], $method::URI, $routeAction);
47+
48+
return $this;
49+
}
50+
}

tests/MultiDepthValidatorTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
<?php
22

3+
namespace Briedis\ApiBuilder\Tests;
34

45
use Briedis\ApiBuilder\Exceptions\InvalidStructureException;
56
use Briedis\ApiBuilder\Items\DecimalItem;
67
use Briedis\ApiBuilder\StructureBuilder as SB;
78
use Briedis\ApiBuilder\StructureValidator;
9+
use PHPUnit_Framework_TestCase;
810

911
class MultiDepthValidatorTest extends PHPUnit_Framework_TestCase
1012
{

tests/RouteBuilderTest.php

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
namespace Briedis\ApiBuilder\Tests;
4+
5+
use Briedis\ApiBuilder\RouteBuilder;
6+
use Briedis\ApiBuilder\Tests\Stubs\GetMethodStub;
7+
use Briedis\ApiBuilder\Tests\Stubs\InvalidMethodStub;
8+
use Briedis\ApiBuilder\Tests\Stubs\PostMethodStub;
9+
use Illuminate\Contracts\Routing\Registrar;
10+
use Mockery;
11+
use Mockery\Mock;
12+
use Mockery\MockInterface;
13+
use PHPUnit_Framework_TestCase;
14+
15+
class RouteBuilderTest extends PHPUnit_Framework_TestCase
16+
{
17+
/** @var Registrar|MockInterface|Mock */
18+
private $mock;
19+
20+
/** @var RouteBuilder */
21+
private $builder;
22+
23+
24+
public static function tearDownAfterClass()
25+
{
26+
Mockery::close();
27+
parent::tearDownAfterClass();
28+
}
29+
30+
protected function setUp()
31+
{
32+
parent::setUp();
33+
$this->mock = Mockery::mock(Registrar::class);
34+
$this->builder = new RouteBuilder($this->mock);
35+
}
36+
37+
public function testGetMethod()
38+
{
39+
$method = new GetMethodStub;
40+
$this->mock->shouldReceive('get')->with($method::URI, 'action')->once();
41+
$this->builder->add($method, 'action');
42+
}
43+
44+
public function testPostMethod()
45+
{
46+
$method = new PostMethodStub;
47+
$this->mock->shouldReceive('post')->with($method::URI, 'controller@method')->once();
48+
$this->builder->add($method, 'controller@method');
49+
}
50+
51+
public function testInvalidMethod()
52+
{
53+
$method = new InvalidMethodStub;
54+
self::setExpectedException(\InvalidArgumentException::class);
55+
$this->builder->add($method, 'controller@method');
56+
}
57+
}

tests/SingleDepthValidatorTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
<?php
22

3+
namespace Briedis\ApiBuilder\Tests;
34

45
use Briedis\ApiBuilder\Exceptions\InvalidStructureException;
56
use Briedis\ApiBuilder\Items\DecimalItem;
67
use Briedis\ApiBuilder\Items\IntegerItem;
78
use Briedis\ApiBuilder\StructureBuilder;
89
use Briedis\ApiBuilder\StructureValidator;
10+
use PHPUnit_Framework_TestCase;
911

1012
class SingleDepthValidatorTest extends PHPUnit_Framework_TestCase
1113
{

tests/Stubs/GetMethodStub.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace Briedis\ApiBuilder\Tests\Stubs;
4+
5+
use Briedis\ApiBuilder\Method;
6+
7+
class GetMethodStub extends Method
8+
{
9+
const METHOD = 'GET';
10+
11+
const URI = 'get-uri';
12+
13+
public function getRequest()
14+
{
15+
}
16+
17+
public function getResponse()
18+
{
19+
}
20+
}

tests/Stubs/InvalidMethodStub.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace Briedis\ApiBuilder\Tests\Stubs;
4+
5+
use Briedis\ApiBuilder\Method;
6+
7+
class InvalidMethodStub extends Method
8+
{
9+
const METHOD = 'UNKNOWN-METHOD';
10+
11+
const URI = 'doesnt-matter';
12+
13+
public function getRequest()
14+
{
15+
}
16+
17+
public function getResponse()
18+
{
19+
}
20+
}

0 commit comments

Comments
 (0)