You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

61 lines
2.0 KiB

<?php
namespace Tests\Unit\Http\Middleware;
use App\Domains\Identity\Enums\UserSettingKey;
use App\Domains\Identity\Models\User;
use App\Domains\System\Enums\SystemSettingKey;
use App\Domains\System\Queries\GetSystemSettings;
use App\Http\Middleware\HandlePreferredLanguage;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Mockery;
use Tests\TestCase;
uses(TestCase::class);
test('it sets language from system settings', function () {
$getSystemSettings = Mockery::mock(GetSystemSettings::class);
$getSystemSettings->shouldReceive('get')->with(SystemSettingKey::DEFAULT_LANGUAGE)->andReturn('en');
$middleware = new HandlePreferredLanguage($getSystemSettings);
$request = Request::create('/', 'GET');
$next = fn($req) => new Response();
$middleware->handle($request, $next);
expect(app()->getLocale())->toBe('en');
});
test('it uses session locale if set', function () {
session()->put('locale', 'id');
$getSystemSettings = Mockery::mock(GetSystemSettings::class);
// Should not call getSystemSettings because session has locale
$middleware = new HandlePreferredLanguage($getSystemSettings);
$request = Request::create('/', 'GET');
$next = fn($req) => new Response();
$middleware->handle($request, $next);
expect(app()->getLocale())->toBe('id');
});
test('it uses user preference if set', function () {
$getSystemSettings = Mockery::mock(GetSystemSettings::class);
$getSystemSettings->shouldReceive('get')->with(SystemSettingKey::DEFAULT_LANGUAGE)->andReturn('en');
$user = Mockery::mock(User::class);
$user->shouldReceive('getAttribute')->with('settings')->andReturn(collect([
UserSettingKey::LANGUAGE->value => 'id'
]));
$middleware = new HandlePreferredLanguage($getSystemSettings);
$request = Request::create('/', 'GET');
$request->setUserResolver(fn() => $user);
$next = fn($req) => new Response();
$middleware->handle($request, $next);
expect(app()->getLocale())->toBe('id');
});