Skip to content

Commit b96faad

Browse files
authored
[1.x] Fix carbon locale when setting it via app locale setter (#557)
* Fix carbon locale when setting it via app locale setter * Uses latest version of Carbon * Removes repositories on composer
1 parent 4a03170 commit b96faad

File tree

4 files changed

+33
-1
lines changed

4 files changed

+33
-1
lines changed

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"laravel/framework": "^8.81|^9.0",
1919
"laminas/laminas-diactoros": "^2.5",
2020
"laravel/serializable-closure": "^1.0",
21+
"nesbot/carbon": "^2.60",
2122
"symfony/psr-http-message-bridge": "^2.0"
2223
},
2324
"require-dev": {

src/Listeners/FlushLocaleState.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ public function handle($event): void
2121
$translator->setFallback($config->get('app.fallback_locale'));
2222
});
2323

24-
(new CarbonServiceProvider($event->app))->updateLocale();
24+
$provider = tap(new CarbonServiceProvider($event->app))->updateLocale();
25+
26+
collect($event->sandbox->getProviders($provider))
27+
->values()
28+
->whenNotEmpty(fn ($providers) => $providers->first()->setAppGetter(fn () => $event->sandbox));
2529
}
2630
}

tests/LocaleStateTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,29 @@ public function test_carbon_state_is_reset_across_subsequent_requests()
5353
$this->assertEquals('nl', $client->responses[1]->getContent());
5454
$this->assertEquals('en', $client->responses[2]->getContent());
5555
}
56+
57+
public function test_carbon_and_app_locale_gets_updated_when_changing_app_locale()
58+
{
59+
[$app, $worker, $client] = $this->createOctaneContext([
60+
Request::create('/test-locale', 'GET'), // should be "en"
61+
Request::create('/test-locale?locale=nl', 'GET'), // should be "nl"
62+
Request::create('/test-locale', 'GET'), // should be "en", and not "nl"
63+
Request::create('/test-locale?locale=pt', 'GET'), // should be "pt"
64+
]);
65+
66+
$app['router']->get('/test-locale', function (Application $app, Request $request) {
67+
if ($request->has('locale')) {
68+
app()->setLocale($request->query('locale'));
69+
}
70+
71+
return [app()->getLocale(), now()->getLocale()];
72+
});
73+
74+
$worker->run();
75+
76+
$this->assertEquals(['en', 'en'], json_decode($client->responses[0]->getContent(), true));
77+
$this->assertEquals(['nl', 'nl'], json_decode($client->responses[1]->getContent(), true));
78+
$this->assertEquals(['en', 'en'], json_decode($client->responses[2]->getContent(), true));
79+
$this->assertEquals(['pt', 'pt'], json_decode($client->responses[3]->getContent(), true));
80+
}
5681
}

tests/TestCase.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Laravel\Octane\Tests;
44

5+
use Carbon\Laravel\ServiceProvider as CarbonServiceProvider;
56
use Laravel\Octane\ApplicationFactory;
67
use Laravel\Octane\Contracts\Client;
78
use Laravel\Octane\Octane;
@@ -21,6 +22,7 @@ protected function createOctaneContext(array $requests)
2122

2223
$appFactory->shouldReceive('createApplication')->andReturn($app = $this->createApplication());
2324

25+
$app->register(new CarbonServiceProvider($app));
2426
$app->register(new OctaneServiceProvider($app));
2527

2628
$worker = new FakeWorker($appFactory, $roadRunnerClient = new FakeClient($requests));

0 commit comments

Comments
 (0)