getUserLocale.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. /**
  3. * @group l10n
  4. * @group i18n
  5. */
  6. class Tests_L10n_GetUserLocale extends WP_UnitTestCase {
  7. protected $user_id;
  8. public function setUp() {
  9. parent::setUp();
  10. $this->user_id = $this->factory()->user->create(
  11. array(
  12. 'role' => 'administrator',
  13. 'locale' => 'de_DE',
  14. )
  15. );
  16. wp_set_current_user( $this->user_id );
  17. }
  18. public function tearDown() {
  19. set_current_screen( 'front' );
  20. parent::tearDown();
  21. }
  22. public function test_user_locale_property() {
  23. set_current_screen( 'dashboard' );
  24. $this->assertSame( 'de_DE', get_user_locale() );
  25. $this->assertSame( get_user_by( 'id', $this->user_id )->locale, get_user_locale() );
  26. }
  27. public function test_update_user_locale() {
  28. set_current_screen( 'dashboard' );
  29. update_user_meta( $this->user_id, 'locale', 'fr_FR' );
  30. $this->assertSame( 'fr_FR', get_user_locale() );
  31. }
  32. public function test_returns_site_locale_if_empty() {
  33. set_current_screen( 'dashboard' );
  34. update_user_meta( $this->user_id, 'locale', '' );
  35. $this->assertSame( get_locale(), get_user_locale() );
  36. }
  37. public function test_returns_site_locale_if_no_user() {
  38. wp_set_current_user( 0 );
  39. $this->assertSame( get_locale(), get_user_locale() );
  40. }
  41. public function test_returns_correct_user_locale() {
  42. set_current_screen( 'dashboard' );
  43. $this->assertSame( 'de_DE', get_user_locale() );
  44. }
  45. public function test_returns_correct_user_locale_on_frontend() {
  46. $this->assertSame( 'de_DE', get_user_locale() );
  47. }
  48. public function test_site_locale_is_not_affected() {
  49. set_current_screen( 'dashboard' );
  50. $this->assertSame( 'en_US', get_locale() );
  51. }
  52. public function test_site_locale_is_not_affected_on_frontend() {
  53. $this->assertSame( 'en_US', get_locale() );
  54. }
  55. /**
  56. * @group ms-required
  57. */
  58. public function test_user_locale_is_same_across_network() {
  59. if ( ! is_multisite() ) {
  60. $this->markTestSkipped( __METHOD__ . ' requires Multisite.' );
  61. }
  62. $user_locale = get_user_locale();
  63. switch_to_blog( self::factory()->blog->create() );
  64. $user_locale_2 = get_user_locale();
  65. restore_current_blog();
  66. $this->assertSame( 'de_DE', $user_locale );
  67. $this->assertSame( $user_locale, $user_locale_2 );
  68. }
  69. public function test_user_id_argument_with_id() {
  70. $user_id = $this->factory()->user->create(
  71. array(
  72. 'locale' => 'es_ES',
  73. )
  74. );
  75. $user_locale1 = get_user_locale( $user_id );
  76. delete_user_meta( $user_id, 'locale' );
  77. $user_locale2 = get_user_locale( $user_id );
  78. $this->assertSame( 'es_ES', $user_locale1 );
  79. $this->assertSame( get_locale(), $user_locale2 );
  80. }
  81. public function test_user_id_argument_with_wp_user_object() {
  82. $user_id = $this->factory()->user->create(
  83. array(
  84. 'locale' => 'es_ES',
  85. )
  86. );
  87. $user = get_user_by( 'id', $user_id );
  88. $user_locale1 = get_user_locale( $user );
  89. delete_user_meta( $user_id, 'locale' );
  90. $user_locale2 = get_user_locale( $user );
  91. $this->assertSame( 'es_ES', $user_locale1 );
  92. $this->assertSame( get_locale(), $user_locale2 );
  93. }
  94. public function test_user_id_argument_with_nonexistent_user() {
  95. global $wpdb;
  96. $user_id = $wpdb->get_var( "SELECT MAX(ID) FROM $wpdb->users" ) + 1;
  97. $user_locale = get_user_locale( $user_id );
  98. $this->assertSame( get_locale(), $user_locale );
  99. }
  100. public function test_user_id_argument_with_invalid_type() {
  101. $user_locale = get_user_locale( 'string' );
  102. $this->assertSame( get_locale(), $user_locale );
  103. }
  104. }