Skip to content

Commit f627dc7

Browse files
committed
adding tests
1 parent 4ef904a commit f627dc7

File tree

11 files changed

+197
-7
lines changed

11 files changed

+197
-7
lines changed

src/Concerns/CanPresent.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace Coderflex\LaravelPresenter\Concerns;
4+
5+
interface CanPresent
6+
{
7+
/**
8+
* Check the given presenters value exists or not
9+
*
10+
* @param string $type
11+
* @return mixed
12+
*/
13+
public function present(string $type = 'default');
14+
}

src/Concerns/Presenter.php renamed to src/Concerns/UsesPresenters.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ trait UsesPresenters
1313
* Check the given presenters value exists or not
1414
*
1515
* @param string $type
16-
* @return void
16+
* @return mixed
1717
*/
1818
public function present(string $type = 'default')
1919
{

src/Presenter.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Coderflex\LaravelPresenter;
44

5+
use Coderflex\LaravelPresenter\Exceptions\PresenterException;
56
use Illuminate\Database\Eloquent\Model;
67

78
abstract class Presenter
@@ -15,6 +16,15 @@ abstract class Presenter
1516

1617
public function __construct(Model $model)
1718
{
19+
if (! $model instanceof \Coderflex\LaravelPresenter\Concerns\CanPresent) {
20+
throw new PresenterException(
21+
__(':model should implements :interface interface', [
22+
'model' => get_class($model),
23+
'interface' => '\Coderflex\LaravelPresenter\Concerns\CanPresent',
24+
])
25+
);
26+
}
27+
1828
$this->model = $model;
1929
}
2030

tests/Models/Post.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Coderflex\LaravelPresenter\Tests\Models;;
4+
5+
use Coderflex\LaravelPresenter\Concerns\UsesPresenters;
6+
use Coderflex\LaravelPresenter\Tests\Presenters\PostPresenter;
7+
use Illuminate\Database\Eloquent\Model;
8+
9+
class Post extends Model
10+
{
11+
use UsesPresenters;
12+
13+
protected $guarded = [];
14+
15+
protected $presenters = [
16+
'default' => PostPresenter::class,
17+
];
18+
}

tests/Models/User.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace Coderflex\LaravelPresenter\Tests\Models;;
4+
5+
use Coderflex\LaravelPresenter\Concerns\CanPresent;
6+
use Coderflex\LaravelPresenter\Concerns\UsesPresenters;
7+
use Coderflex\LaravelPresenter\Tests\Presenters\UserPresenter;
8+
use Illuminate\Database\Eloquent\Model;
9+
10+
class User extends Model implements CanPresent
11+
{
12+
use UsesPresenters;
13+
14+
protected $guarded = [];
15+
16+
protected $presenters = [
17+
'default' => UserPresenter::class,
18+
];
19+
}

tests/Presenters/PostPresenter.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace Coderflex\LaravelPresenter\Tests\Presenters;;
4+
5+
use Illuminate\Support\Str;
6+
use Coderflex\LaravelPresenter\Presenter;
7+
8+
class PostPresenter extends Presenter
9+
{
10+
public function slug()
11+
{
12+
return Str::slug($this->title);
13+
}
14+
}

tests/Presenters/UserPresenter.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
namespace Coderflex\LaravelPresenter\Tests\Presenters;;
4+
5+
use Coderflex\LaravelPresenter\Presenter;
6+
7+
class UserPresenter extends Presenter
8+
{
9+
public function fullName()
10+
{
11+
return "{$this->model->first_name} {$this->model->last_name}";
12+
}
13+
}

tests/PresentersTest.php

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,42 @@
11
<?php
22

3-
it('can test', function () {
4-
expect(true)->toBeTrue();
5-
});
3+
use Coderflex\LaravelPresenter\Tests\Models\Post;
4+
use Coderflex\LaravelPresenter\Tests\Models\User;
5+
6+
it('cannot create new eloquent model presenter', function () {
7+
$this->artisan('presenter:make ')
8+
->assertExitCode(1);
9+
})->throws(
10+
Symfony\Component\Console\Exception\RuntimeException::class,
11+
'Not enough arguments (missing: "name").'
12+
)->group('Presenter Command');
13+
14+
it('can create new eloquent model presenter', function () {
15+
$this->artisan('presenter:make UserPresenter')
16+
->assertExitCode(0);
17+
})->group('Presenter Command');
18+
19+
it('presents user full name', function () {
20+
$user = new User([
21+
'first_name' => 'John',
22+
'last_name' => 'Doe',
23+
'email' => '[email protected]',
24+
'password' => '123'
25+
]);
26+
27+
expect($user->present()->fullName)
28+
->toEqual('John Doe');
29+
})->group('Presenter Implementation');
30+
31+
it('should implements CanPresent Interface', function () {
32+
$post = new Post([
33+
'title' => 'a title for a post'
34+
]);
35+
36+
$post->present()->slug;
37+
})->throws(
38+
Coderflex\LaravelPresenter\Exceptions\PresenterException::class,
39+
'Coderflex\LaravelPresenter\Tests\Models\Post should implements \Coderflex\LaravelPresenter\Concerns\CanPresent interface'
40+
)->group('Presenter Implementation');
41+
42+

tests/TestCase.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ public function getEnvironmentSetUp($app)
2828
{
2929
config()->set('database.default', 'testing');
3030

31-
/*
32-
$migration = include __DIR__.'/../database/migrations/create_laravel-presenter_table.php.stub';
31+
$migration = include __DIR__.'/database/migrations/create_users_table.php.stub';
3332
$migration->up();
34-
*/
3533
}
3634
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
return new class extends Migration
8+
{
9+
/**
10+
* Run the migrations.
11+
*
12+
* @return void
13+
*/
14+
public function up()
15+
{
16+
Schema::create('posts', function (Blueprint $table) {
17+
$table->id();
18+
$table->string('title');
19+
$table->timestamps();
20+
});
21+
}
22+
23+
/**
24+
* Reverse the migrations.
25+
*
26+
* @return void
27+
*/
28+
public function down()
29+
{
30+
Schema::dropIfExists('users');
31+
}
32+
};

0 commit comments

Comments
 (0)