5
5
use CodeZero \BrowserLocale \BrowserLocale ;
6
6
use CodeZero \Localizer \Middleware \SetLocale ;
7
7
use CodeZero \Localizer \Tests \TestCase ;
8
- use Illuminate \Foundation \Testing \TestResponse ;
9
8
use Illuminate \Support \Facades \App ;
10
9
use Illuminate \Support \Facades \Config ;
11
10
use Illuminate \Support \Facades \Crypt ;
14
13
15
14
class SetLocaleTest extends TestCase
16
15
{
16
+ protected $ sessionKey ;
17
+ protected $ cookieName ;
18
+
19
+ /**
20
+ * Setup the test environment.
21
+ *
22
+ * @return void
23
+ */
17
24
protected function setUp ()
18
25
{
19
26
parent ::setUp ();
20
27
21
- TestResponse::macro ('assertAppLocale ' , function ($ locale ) {
22
- return $ this ->assertSee ('The locale is: ' . $ locale );
23
- });
24
-
25
- $ this ->withoutExceptionHandling ();
26
- $ this ->setSupportedLocales (['en ' , 'nl ' , 'fr ' , 'de ' , 'es ' , 'it ' ]);
28
+ $ this ->sessionKey = Config::get ('localizer.session-key ' );
29
+ $ this ->cookieName = Config::get ('localizer.cookie-name ' );
27
30
}
28
31
29
32
/** @test */
30
33
public function it_looks_for_a_locale_in_the_url_first ()
31
34
{
32
- $ this ->registerRoute ('nl/some/route ' );
33
-
35
+ $ this ->setSupportedLocales (['en ' , 'nl ' , 'fr ' , 'de ' , 'es ' , 'it ' ]);
34
36
$ this ->setSessionLocale ('fr ' );
35
37
$ this ->setBrowserLocales ('it ' );
36
38
$ this ->setAppLocale ('en ' );
37
-
38
39
$ cookie = [$ this ->cookieName => Crypt::encrypt ('de ' )];
39
40
40
- $ this ->call ('GET ' , 'nl/some/route ' , [], $ cookie )
41
- ->assertSessionHas ($ this ->sessionKey , 'nl ' )
42
- ->assertCookie ($ this ->cookieName , 'nl ' )
43
- ->assertAppLocale ('nl ' );
41
+ Route::get ('nl/some/route ' , function () {
42
+ return App::getLocale ();
43
+ })->middleware (['web ' , SetLocale::class]);
44
+
45
+ $ response = $ this ->call ('GET ' , 'nl/some/route ' , [], $ cookie );
46
+
47
+ $ response ->assertSessionHas ($ this ->sessionKey , 'nl ' );
48
+ $ response ->assertCookie ($ this ->cookieName , 'nl ' );
49
+ $ this ->assertEquals ('nl ' , $ response ->original );
44
50
}
45
51
46
52
/** @test */
47
53
public function you_can_configure_which_segment_to_use_as_locale ()
48
54
{
49
- $ this ->registerRoute ('some/nl/route ' );
50
-
51
- Config::set ('localizer.url-segment ' , 2 );
52
-
55
+ $ this ->setSupportedLocales (['en ' , 'nl ' , 'fr ' , 'de ' , 'es ' , 'it ' ]);
53
56
$ this ->setSessionLocale ('fr ' );
54
57
$ this ->setBrowserLocales ('it ' );
55
58
$ this ->setAppLocale ('en ' );
56
-
57
59
$ cookie = [$ this ->cookieName => Crypt::encrypt ('de ' )];
58
60
59
- $ this ->call ('GET ' , 'some/nl/route ' , [], $ cookie )
60
- ->assertSessionHas ($ this ->sessionKey , 'nl ' )
61
- ->assertCookie ($ this ->cookieName , 'nl ' )
62
- ->assertAppLocale ('nl ' );
61
+ Config::set ('localizer.url-segment ' , 2 );
62
+
63
+ Route::get ('some/nl/route ' , function () {
64
+ return App::getLocale ();
65
+ })->middleware (['web ' , SetLocale::class]);
66
+
67
+ $ response = $ this ->call ('GET ' , 'some/nl/route ' , [], $ cookie );
68
+
69
+ $ response ->assertSessionHas ($ this ->sessionKey , 'nl ' );
70
+ $ response ->assertCookie ($ this ->cookieName , 'nl ' );
71
+ $ this ->assertEquals ('nl ' , $ response ->original );
63
72
}
64
73
65
74
/** @test */
66
75
public function it_looks_for_a_locale_in_the_session_if_not_found_in_the_url ()
67
76
{
68
- $ this ->registerRoute ('some/route ' );
69
-
77
+ $ this ->setSupportedLocales (['en ' , 'nl ' , 'fr ' , 'de ' , 'es ' , 'it ' ]);
70
78
$ this ->setSessionLocale ('fr ' );
71
79
$ this ->setBrowserLocales ('it ' );
72
80
$ this ->setAppLocale ('en ' );
73
-
74
81
$ cookie = [$ this ->cookieName => Crypt::encrypt ('de ' )];
75
82
76
- $ this ->call ('GET ' , 'some/route ' , [], $ cookie )
77
- ->assertSessionHas ($ this ->sessionKey , 'fr ' )
78
- ->assertCookie ($ this ->cookieName , 'fr ' )
79
- ->assertAppLocale ('fr ' );
83
+ Route::get ('some/route ' , function () {
84
+ return App::getLocale ();
85
+ })->middleware (['web ' , SetLocale::class]);
86
+
87
+ $ response = $ this ->call ('GET ' , 'some/route ' , [], $ cookie );
88
+
89
+ $ response ->assertSessionHas ($ this ->sessionKey , 'fr ' );
90
+ $ response ->assertCookie ($ this ->cookieName , 'fr ' );
91
+ $ this ->assertEquals ('fr ' , $ response ->original );
80
92
}
81
93
82
94
/** @test */
83
95
public function it_looks_for_a_locale_in_a_cookie_if_not_found_in_the_url_or_session ()
84
96
{
85
- $ this ->registerRoute ('some/route ' );
86
-
97
+ $ this ->setSupportedLocales (['en ' , 'nl ' , 'fr ' , 'de ' , 'es ' , 'it ' ]);
87
98
$ this ->setSessionLocale (null );
88
99
$ this ->setBrowserLocales ('it ' );
89
100
$ this ->setAppLocale ('en ' );
90
-
91
101
$ cookie = [$ this ->cookieName => Crypt::encrypt ('de ' )];
92
102
93
- $ this ->call ('GET ' , 'some/route ' , [], $ cookie )
94
- ->assertSessionHas ($ this ->sessionKey , 'de ' )
95
- ->assertCookie ($ this ->cookieName , 'de ' )
96
- ->assertAppLocale ('de ' );
103
+ Route::get ('some/route ' , function () {
104
+ return App::getLocale ();
105
+ })->middleware (['web ' , SetLocale::class]);
106
+
107
+ $ response = $ this ->call ('GET ' , 'some/route ' , [], $ cookie );
108
+
109
+ $ response ->assertSessionHas ($ this ->sessionKey , 'de ' );
110
+ $ response ->assertCookie ($ this ->cookieName , 'de ' );
111
+ $ this ->assertEquals ('de ' , $ response ->original );
97
112
}
98
113
99
114
/** @test */
100
115
public function it_looks_for_a_locale_in_the_browser_if_not_found_in_the_url_or_session_or_cookie ()
101
116
{
102
- $ this ->registerRoute ('some/route ' );
103
-
117
+ $ this ->setSupportedLocales (['en ' , 'nl ' , 'fr ' , 'de ' , 'es ' , 'it ' ]);
104
118
$ this ->setSessionLocale (null );
105
119
$ this ->setBrowserLocales ('it ' );
106
120
$ this ->setAppLocale ('en ' );
107
-
108
121
$ cookie = [];
109
122
110
- $ this ->call ('GET ' , 'some/route ' , [], $ cookie )
111
- ->assertSessionHas ($ this ->sessionKey , 'it ' )
112
- ->assertCookie ($ this ->cookieName , 'it ' )
113
- ->assertAppLocale ('it ' );
123
+ Route::get ('some/route ' , function () {
124
+ return App::getLocale ();
125
+ })->middleware (['web ' , SetLocale::class]);
126
+
127
+ $ response = $ this ->call ('GET ' , 'some/route ' , [], $ cookie );
128
+
129
+ $ response ->assertSessionHas ($ this ->sessionKey , 'it ' );
130
+ $ response ->assertCookie ($ this ->cookieName , 'it ' );
131
+ $ this ->assertEquals ('it ' , $ response ->original );
114
132
}
115
133
116
134
/** @test */
117
135
public function it_returns_the_best_match_when_a_browser_locale_is_used ()
118
136
{
119
- $ this ->registerRoute ('some/route ' );
120
-
137
+ $ this ->setSupportedLocales (['en ' , 'nl ' , 'fr ' , 'de ' , 'es ' , 'it ' ]);
121
138
$ this ->setSessionLocale (null );
122
- $ this ->setBrowserLocales ('cs,it-IT;q=0.8 ,es;q=0.4 ' );
139
+ $ this ->setBrowserLocales ('cs,it-IT;q=0.4 ,es;q=0.8 ' );
123
140
$ this ->setAppLocale ('en ' );
124
-
125
141
$ cookie = [];
126
142
127
- $ this ->call ('GET ' , 'some/route ' , [], $ cookie )
128
- ->assertSessionHas ($ this ->sessionKey , 'it ' )
129
- ->assertCookie ($ this ->cookieName , 'it ' )
130
- ->assertAppLocale ('it ' );
143
+ Route::get ('some/route ' , function () {
144
+ return App::getLocale ();
145
+ })->middleware (['web ' , SetLocale::class]);
146
+
147
+ $ response = $ this ->call ('GET ' , 'some/route ' , [], $ cookie );
148
+
149
+ $ response ->assertSessionHas ($ this ->sessionKey , 'es ' );
150
+ $ response ->assertCookie ($ this ->cookieName , 'es ' );
151
+ $ this ->assertEquals ('es ' , $ response ->original );
131
152
}
132
153
133
154
/** @test */
134
155
public function it_defaults_to_the_current_app_locale ()
135
156
{
136
- $ this ->registerRoute ('some/route ' );
137
-
157
+ $ this ->setSupportedLocales (['en ' , 'nl ' , 'fr ' , 'de ' , 'es ' , 'it ' ]);
138
158
$ this ->setSessionLocale (null );
139
159
$ this ->setBrowserLocales (null );
140
160
$ this ->setAppLocale ('en ' );
141
-
142
161
$ cookie = [];
143
162
144
- $ this ->call ('GET ' , 'some/route ' , [], $ cookie )
145
- ->assertSessionHas ($ this ->sessionKey , 'en ' )
146
- ->assertCookie ($ this ->cookieName , 'en ' )
147
- ->assertAppLocale ('en ' );
163
+ Route::get ('some/route ' , function () {
164
+ return App::getLocale ();
165
+ })->middleware (['web ' , SetLocale::class]);
166
+
167
+ $ response = $ this ->call ('GET ' , 'some/route ' , [], $ cookie );
168
+
169
+ $ response ->assertSessionHas ($ this ->sessionKey , 'en ' );
170
+ $ response ->assertCookie ($ this ->cookieName , 'en ' );
171
+ $ this ->assertEquals ('en ' , $ response ->original );
148
172
}
149
173
150
174
/**
@@ -170,7 +194,7 @@ protected function setAppLocale($locale)
170
194
*/
171
195
protected function setSupportedLocales (array $ locales )
172
196
{
173
- Config::set ($ this -> localesKey , $ locales );
197
+ Config::set (' localizer.supported-locales ' , $ locales );
174
198
175
199
return $ this ;
176
200
}
@@ -204,22 +228,4 @@ protected function setBrowserLocales($locales)
204
228
205
229
return $ this ;
206
230
}
207
-
208
- /**
209
- * Register a route.
210
- *
211
- * @param string $url
212
- *
213
- * @return $this
214
- */
215
- protected function registerRoute ($ url )
216
- {
217
- Route::getRoutes ()->add (
218
- Route::get ($ url , function () {
219
- return 'The locale is: ' . App::getLocale ();
220
- })->middleware (['web ' , SetLocale::class])
221
- );
222
-
223
- return $ this ;
224
- }
225
231
}
0 commit comments