2021-06-26 23:23:15 +08:00
< ? php
namespace Tests ;
2017-03-05 23:10:06 +08:00
class LanguageTest extends TestCase
{
2023-01-21 19:08:34 +08:00
protected $langs ;
2017-03-05 23:34:54 +08:00
/**
* LanguageTest constructor .
*/
2021-10-31 04:29:59 +08:00
protected function setUp () : void
2017-03-05 23:34:54 +08:00
{
parent :: setUp ();
2023-02-07 04:41:33 +08:00
$this -> langs = array_diff ( scandir ( lang_path ( '' )), [ '..' , '.' ]);
2017-03-05 23:34:54 +08:00
}
2017-04-29 23:47:41 +08:00
public function test_locales_config_key_set_properly ()
{
$configLocales = config ( 'app.locales' );
sort ( $configLocales );
sort ( $this -> langs );
2020-03-05 06:14:25 +08:00
$this -> assertEquals ( implode ( ':' , $configLocales ), implode ( ':' , $this -> langs ), 'app.locales configuration variable does not match those found in lang files' );
2017-04-29 23:47:41 +08:00
}
2020-04-05 20:07:19 +08:00
// Not part of standard phpunit test runs since we sometimes expect non-added langs.
public function do_test_locales_all_have_language_dropdown_entry ()
{
$dropdownLocales = array_keys ( trans ( 'settings.language_select' , [], 'en' ));
sort ( $dropdownLocales );
sort ( $this -> langs );
$diffs = array_diff ( $this -> langs , $dropdownLocales );
if ( count ( $diffs ) > 0 ) {
$diffText = implode ( ',' , $diffs );
$this -> addWarning ( " Languages: { $diffText } found in files but not in language select dropdown. " );
}
$this -> assertTrue ( true );
}
2017-04-29 23:47:41 +08:00
public function test_correct_language_if_not_logged_in ()
{
$loginReq = $this -> get ( '/login' );
$loginReq -> assertSee ( 'Log In' );
$loginPageFrenchReq = $this -> get ( '/login' , [ 'Accept-Language' => 'fr' ]);
$loginPageFrenchReq -> assertSee ( 'Se Connecter' );
}
2018-08-12 20:34:14 +08:00
public function test_public_lang_autodetect_can_be_disabled ()
{
config () -> set ( 'app.auto_detect_locale' , false );
$loginReq = $this -> get ( '/login' );
$loginReq -> assertSee ( 'Log In' );
$loginPageFrenchReq = $this -> get ( '/login' , [ 'Accept-Language' => 'fr' ]);
$loginPageFrenchReq -> assertDontSee ( 'Se Connecter' );
}
2017-03-05 23:34:54 +08:00
public function test_all_lang_files_loadable ()
{
2023-02-07 04:41:33 +08:00
$files = array_diff ( scandir ( lang_path ( 'en' )), [ '..' , '.' ]);
2017-03-05 23:34:54 +08:00
foreach ( $this -> langs as $lang ) {
foreach ( $files as $file ) {
$loadError = false ;
2021-06-26 23:23:15 +08:00
2017-03-05 23:34:54 +08:00
try {
$translations = trans ( str_replace ( '.php' , '' , $file ), [], $lang );
} catch ( \Exception $e ) {
$loadError = true ;
}
$this -> assertFalse ( $loadError , " Translation file { $lang } / { $file } failed to load " );
}
}
}
2018-09-22 20:18:26 +08:00
public function test_rtl_config_set_if_lang_is_rtl ()
{
$this -> asEditor ();
2021-06-26 23:23:15 +08:00
$this -> assertFalse ( config ( 'app.rtl' ), 'App RTL config should be false by default' );
2023-01-21 19:08:34 +08:00
setting () -> putUser ( $this -> users -> editor (), 'language' , 'ar' );
2018-09-22 20:18:26 +08:00
$this -> get ( '/' );
2021-06-26 23:23:15 +08:00
$this -> assertTrue ( config ( 'app.rtl' ), 'App RTL config should have been set to true by middleware' );
2018-09-22 20:18:26 +08:00
}
2021-06-26 23:23:15 +08:00
}