mirror of
https://github.com/flarum/framework.git
synced 2025-02-21 06:39:40 +08:00
Add Authenticated Test Case utility
This commit is contained in:
parent
b0711b18c7
commit
232a431b50
@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Flarum.
|
||||
*
|
||||
* For detailed copyright and license information, please view the
|
||||
* LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Flarum\Tests\integration;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Flarum\Api\ApiKey;
|
||||
use Illuminate\Support\Str;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
abstract class AuthenticatedTestCase extends TestCase
|
||||
{
|
||||
use RetrievesAuthorizedUsers;
|
||||
|
||||
protected function genKey(int $user_id = null): ApiKey
|
||||
{
|
||||
return ApiKey::unguarded(function () use ($user_id) {
|
||||
return ApiKey::query()->firstOrCreate([
|
||||
'key' => Str::random(),
|
||||
'user_id' => $user_id,
|
||||
'created_at' => Carbon::now()
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Build an authenticated HTTP request that can be passed through middleware.
|
||||
*
|
||||
* This method simplifies building HTTP request for use in our HTTP-level
|
||||
* integration tests. It provides options for all features repeatedly being
|
||||
* used in those tests.
|
||||
*
|
||||
* @param string $method
|
||||
* @param string $path
|
||||
* @param array $options
|
||||
* An array of optional request properties.
|
||||
* Currently supported:
|
||||
* - "json" should point to a JSON-serializable object that will be
|
||||
* serialized and used as request body. The corresponding Content-Type
|
||||
* header will be set automatically.
|
||||
* - "cookiesFrom" should hold a response object from a previous HTTP
|
||||
* interaction. All cookies returned from the server in that response
|
||||
* (via the "Set-Cookie" header) will be copied to the cookie params of
|
||||
* the new request.
|
||||
* @param int $userId Which user should be emulated? User ID 1 will return a
|
||||
* user with admin perms unless this has been modified in your test case.
|
||||
* @return ServerRequestInterface
|
||||
*/
|
||||
protected function authenticatedRequest(string $method, string $path, array $options = [], int $userId = 1): ServerRequestInterface
|
||||
{
|
||||
$request = $this->request($method, $path, $options);
|
||||
|
||||
$this->prepareDatabase([
|
||||
'users' => [
|
||||
$this->adminUser(),
|
||||
$this->normalUser(),
|
||||
],
|
||||
]);
|
||||
|
||||
if (! isset($this->key)) {
|
||||
$this->key = $this->genKey();
|
||||
}
|
||||
|
||||
return $request->withAddedHeader('Authorization', "Token {$this->key->key}; userId=$userId");
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user