<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
jcergolj / laravel-form-request-assertions example snippets
namespace App\Http\Controllers;
use App\Http\Requests\CreatePostRequest;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function store(CreatePostRequest $request)
{
// ...
}
}
use App\Http\Controllers\PostController;
Route::post('posts', [PostController::class, 'store']);
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class CreatePostRequest extends FormRequest
{
public function authorize()
{
return $this->user()->id === 1 && $this->post->id === 1;
}
function rules()
{
return ['email' => ['
namespace Tests\Unit;
use Tests\TestCase;
use Jcergolj\FormRequestAssertions\TestableFormRequest;
class CreatePostRequestTest extends TestCase
{
use TestableFormRequest;
// ...
}
public function controller_has_form_request()
{
$this->assertActionUsesFormRequest(PostController::class, 'store', CreatePostRequest::class);
}
public function controller_has_form_request()
{
$this->post(route('users.store'));
$this->assertContainsFormRequest(CreateUserRequest::class);
}
public function email_is_equest(CreatePostRequest::class)
->validate(['email' => ''])
->assertFails(['email' => 'validate(['password' => 'short'])
->assertFails(['password' => App\Rules\PasswordRule::class]); //custom password rule class
}
public function email_has_custom_rule_applied()
{
$this->createFormRequest(CreatePostRequest::class)
->validate()
->assertHasRule('email', new CustomRule); // here we don't validate the rule, but just make sure rule is applied
}
public function test_email_is_not_il' => 'email|nullable'] */
$this->createFormRequest(CreatePostRequest::class)
->validate([])
->assertRulesWithoutFailures(['email' => '
/** @test */
function test_transforms_email_to_lowercase_before_validation()
{
$this->createFormRequest(CreatePostRequest::class)
->onPreparedData(['email' => '[email protected]'], function (array $preparedData) {
$this->assertEquals('[email protected]', $preparedData['email']);
});
}
namespace Tests\Support;
class TestFormRequest extends \Jcergolj\FormRequestAssertions\TestFormRequest
{
public function assertSomethingImportant()
{
// your assertions on `$this->request`
}
}
namespace Tests\Support;
trait TestableFormRequest {
use \Jcergolj\FormRequestAssertions\TestableFormRequest;
protected function createNewTestFormRequest(FormRequest $request): TestFormRequest
{
return new \Tests\Support\TestFormRequest($request);
}
}