logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

set_locale_plug_test.exs (4427B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.Plugs.SetLocalePlugTest do
  5. use ExUnit.Case, async: true
  6. use Plug.Test
  7. alias Pleroma.Web.Plugs.SetLocalePlug
  8. alias Plug.Conn
  9. test "default locale is `en`" do
  10. conn =
  11. :get
  12. |> conn("/cofe")
  13. |> SetLocalePlug.call([])
  14. assert "en" == Gettext.get_locale()
  15. assert %{locale: "en"} = conn.assigns
  16. end
  17. test "use supported locale from `accept-language`" do
  18. conn =
  19. :get
  20. |> conn("/cofe")
  21. |> Conn.put_req_header(
  22. "accept-language",
  23. "ru, fr-CH, fr;q=0.9, en;q=0.8, *;q=0.5"
  24. )
  25. |> SetLocalePlug.call([])
  26. assert "ru" == Gettext.get_locale()
  27. assert %{locale: "ru"} = conn.assigns
  28. end
  29. test "fallback to the general language if a variant is not supported" do
  30. conn =
  31. :get
  32. |> conn("/cofe")
  33. |> Conn.put_req_header(
  34. "accept-language",
  35. "ru-CA;q=0.9, en;q=0.8, *;q=0.5"
  36. )
  37. |> SetLocalePlug.call([])
  38. assert "ru" == Gettext.get_locale()
  39. assert %{locale: "ru"} = conn.assigns
  40. end
  41. test "use supported locale with specifiers from `accept-language`" do
  42. conn =
  43. :get
  44. |> conn("/cofe")
  45. |> Conn.put_req_header(
  46. "accept-language",
  47. "zh-Hans;q=0.9, en;q=0.8, *;q=0.5"
  48. )
  49. |> SetLocalePlug.call([])
  50. assert "zh_Hans" == Gettext.get_locale()
  51. assert %{locale: "zh_Hans"} = conn.assigns
  52. end
  53. test "it assigns all supported locales" do
  54. conn =
  55. :get
  56. |> conn("/cofe")
  57. |> Conn.put_req_header(
  58. "accept-language",
  59. "ru, fr-CH, fr;q=0.9, en;q=0.8, x-unsupported;q=0.8, *;q=0.5"
  60. )
  61. |> SetLocalePlug.call([])
  62. assert "ru" == Gettext.get_locale()
  63. assert %{locale: "ru", locales: ["ru", "fr", "en"]} = conn.assigns
  64. end
  65. test "it assigns all supported locales in cookie" do
  66. conn =
  67. :get
  68. |> conn("/cofe")
  69. |> put_req_cookie(SetLocalePlug.frontend_language_cookie_name(), "zh-Hans,uk,zh-Hant")
  70. |> Conn.put_req_header(
  71. "accept-language",
  72. "ru, fr-CH, fr;q=0.9, en;q=0.8, x-unsupported;q=0.8, *;q=0.5"
  73. )
  74. |> SetLocalePlug.call([])
  75. assert "zh_Hans" == Gettext.get_locale()
  76. assert %{locale: "zh_Hans", locales: ["zh_Hans", "uk", "zh_Hant", "ru", "fr", "en"]} =
  77. conn.assigns
  78. end
  79. test "fallback to some variant of the language if the unqualified language is not supported" do
  80. conn =
  81. :get
  82. |> conn("/cofe")
  83. |> Conn.put_req_header(
  84. "accept-language",
  85. "zh;q=0.9, en;q=0.8, *;q=0.5"
  86. )
  87. |> SetLocalePlug.call([])
  88. assert "zh_" <> _ = Gettext.get_locale()
  89. assert %{locale: "zh_" <> _} = conn.assigns
  90. end
  91. test "use supported locale from cookie" do
  92. conn =
  93. :get
  94. |> conn("/cofe")
  95. |> put_req_cookie(SetLocalePlug.frontend_language_cookie_name(), "zh-Hans")
  96. |> Conn.put_req_header(
  97. "accept-language",
  98. "ru, fr-CH, fr;q=0.9, en;q=0.8, *;q=0.5"
  99. )
  100. |> SetLocalePlug.call([])
  101. assert "zh_Hans" == Gettext.get_locale()
  102. assert %{locale: "zh_Hans"} = conn.assigns
  103. end
  104. test "fallback to supported locale from `accept-language` if locale in cookie not supported" do
  105. conn =
  106. :get
  107. |> conn("/cofe")
  108. |> put_req_cookie(SetLocalePlug.frontend_language_cookie_name(), "x-nonexist")
  109. |> Conn.put_req_header(
  110. "accept-language",
  111. "ru, fr-CH, fr;q=0.9, en;q=0.8, *;q=0.5"
  112. )
  113. |> SetLocalePlug.call([])
  114. assert "ru" == Gettext.get_locale()
  115. assert %{locale: "ru"} = conn.assigns
  116. end
  117. test "fallback to default if nothing is supported" do
  118. conn =
  119. :get
  120. |> conn("/cofe")
  121. |> put_req_cookie(SetLocalePlug.frontend_language_cookie_name(), "x-nonexist")
  122. |> Conn.put_req_header(
  123. "accept-language",
  124. "x-nonexist"
  125. )
  126. |> SetLocalePlug.call([])
  127. assert "en" == Gettext.get_locale()
  128. assert %{locale: "en"} = conn.assigns
  129. end
  130. test "use default locale if locale from `accept-language` is not supported" do
  131. conn =
  132. :get
  133. |> conn("/cofe")
  134. |> Conn.put_req_header("accept-language", "tlh")
  135. |> SetLocalePlug.call([])
  136. assert "en" == Gettext.get_locale()
  137. assert %{locale: "en"} = conn.assigns
  138. end
  139. end