mirror of
https://github.com/flarum/framework.git
synced 2025-01-20 05:32:49 +08:00
73 lines
2.4 KiB
PHP
73 lines
2.4 KiB
PHP
<?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");
|
|
}
|
|
}
|