2021-06-26 11:23:15 -04:00
< ? php
namespace Tests ;
2017-03-05 10:10:06 -05:00
2023-06-12 11:45:30 -04:00
use BookStack\Activity\ActivityType ;
2017-03-05 10:10:06 -05:00
class LanguageTest extends TestCase
{
2023-02-27 14:09:20 -05:00
protected array $langs ;
2017-03-05 10:34:54 -05:00
/**
* LanguageTest constructor .
*/
2021-10-30 16:29:59 -04:00
protected function setUp () : void
2017-03-05 10:34:54 -05:00
{
parent :: setUp ();
2023-02-06 15:41:33 -05:00
$this -> langs = array_diff ( scandir ( lang_path ( '' )), [ '..' , '.' ]);
2017-03-05 10:34:54 -05:00
}
2017-04-29 11:47:41 -04:00
public function test_locales_config_key_set_properly ()
{
$configLocales = config ( 'app.locales' );
sort ( $configLocales );
sort ( $this -> langs );
2020-03-04 17:14:25 -05:00
$this -> assertEquals ( implode ( ':' , $configLocales ), implode ( ':' , $this -> langs ), 'app.locales configuration variable does not match those found in lang files' );
2017-04-29 11:47:41 -04:00
}
2020-04-05 08:07:19 -04: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 11:47:41 -04: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 08:34:14 -04: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 10:34:54 -05:00
public function test_all_lang_files_loadable ()
{
2023-02-06 15:41:33 -05:00
$files = array_diff ( scandir ( lang_path ( 'en' )), [ '..' , '.' ]);
2017-03-05 10:34:54 -05:00
foreach ( $this -> langs as $lang ) {
foreach ( $files as $file ) {
$loadError = false ;
2021-06-26 11:23:15 -04:00
2017-03-05 10:34:54 -05: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 08:18:26 -04:00
public function test_rtl_config_set_if_lang_is_rtl ()
{
$this -> asEditor ();
2021-06-26 11:23:15 -04:00
$this -> assertFalse ( config ( 'app.rtl' ), 'App RTL config should be false by default' );
2023-01-21 06:08:34 -05:00
setting () -> putUser ( $this -> users -> editor (), 'language' , 'ar' );
2018-09-22 08:18:26 -04:00
$this -> get ( '/' );
2021-06-26 11:23:15 -04:00
$this -> assertTrue ( config ( 'app.rtl' ), 'App RTL config should have been set to true by middleware' );
2018-09-22 08:18:26 -04:00
}
2023-02-27 14:09:20 -05:00
public function test_unknown_lang_does_not_break_app ()
{
config () -> set ( 'app.locale' , 'zz' );
$loginReq = $this -> get ( '/login' , [ 'Accept-Language' => 'zz' ]);
$loginReq -> assertOk ();
$loginReq -> assertSee ( 'Log In' );
}
2023-06-12 11:45:30 -04:00
public function test_all_activity_types_have_activity_text ()
{
foreach ( ActivityType :: all () as $activityType ) {
$langKey = 'activities.' . $activityType ;
$this -> assertNotEquals ( $langKey , trans ( $langKey , [], 'en' ));
}
}
2021-06-26 11:23:15 -04:00
}