mirror of
https://github.com/flarum/core.git
synced 2025-07-30 21:20:24 +02:00
Slug Driver Support (#2456)
- Support slug drivers for core's sluggable models, easily extends to other models - Add automated testing for affected single-model API routes - Fix nickname selection UI - Serialize slugs as `slug` attribute - Make min search length a constant
This commit is contained in:
82
tests/integration/extenders/ModelUrlTest.php
Normal file
82
tests/integration/extenders/ModelUrlTest.php
Normal file
@@ -0,0 +1,82 @@
|
||||
<?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\extenders;
|
||||
|
||||
use Flarum\Database\AbstractModel;
|
||||
use Flarum\Extend;
|
||||
use Flarum\Http\SlugDriverInterface;
|
||||
use Flarum\Http\SlugManager;
|
||||
use Flarum\Tests\integration\RetrievesAuthorizedUsers;
|
||||
use Flarum\Tests\integration\TestCase;
|
||||
use Flarum\User\User;
|
||||
|
||||
class ModelUrlTest extends TestCase
|
||||
{
|
||||
use RetrievesAuthorizedUsers;
|
||||
|
||||
protected function prepDb()
|
||||
{
|
||||
$userClass = User::class;
|
||||
$this->prepareDatabase([
|
||||
'users' => [
|
||||
$this->adminUser(),
|
||||
$this->normalUser(),
|
||||
],
|
||||
'settings' => [
|
||||
['key' => "slug_driver_$userClass", 'value' => 'testDriver'],
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function uses_default_driver_by_default()
|
||||
{
|
||||
$this->prepDb();
|
||||
|
||||
$slugManager = $this->app()->getContainer()->make(SlugManager::class);
|
||||
|
||||
$testUser = User::find(1);
|
||||
|
||||
$this->assertEquals('admin', $slugManager->forResource(User::class)->toSlug($testUser));
|
||||
$this->assertEquals('1', $slugManager->forResource(User::class)->fromSlug('admin', $testUser)->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function custom_slug_driver_has_effect_if_added()
|
||||
{
|
||||
$this->extend((new Extend\ModelUrl(User::class))->addSlugDriver('testDriver', TestSlugDriver::class));
|
||||
|
||||
$this->prepDb();
|
||||
|
||||
$slugManager = $this->app()->getContainer()->make(SlugManager::class);
|
||||
|
||||
$testUser = User::find(1);
|
||||
|
||||
$this->assertEquals('test-slug', $slugManager->forResource(User::class)->toSlug($testUser));
|
||||
$this->assertEquals('1', $slugManager->forResource(User::class)->fromSlug('random-gibberish', $testUser)->id);
|
||||
}
|
||||
}
|
||||
|
||||
class TestSlugDriver implements SlugDriverInterface
|
||||
{
|
||||
public function toSlug(AbstractModel $instance): string
|
||||
{
|
||||
return 'test-slug';
|
||||
}
|
||||
|
||||
public function fromSlug(string $slug, User $actor): AbstractModel
|
||||
{
|
||||
return User::find(1);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user