summaryrefslogtreecommitdiff
path: root/test/pleroma/web/gettext_test.exs
blob: e186f1ab334e06c6047947f20b77228d91a1bab2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# Pleroma: A lightweight social networking server
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.GettextTest do
  use ExUnit.Case

  require Pleroma.Web.Gettext

  test "put_locales/1: set the first in the list to Gettext's locale" do
    Pleroma.Web.Gettext.put_locales(["zh_Hans", "en_test"])

    assert "zh_Hans" == Gettext.get_locale(Pleroma.Web.Gettext)
  end

  test "with_locales/2: reset locale on exit" do
    old_first_locale = Gettext.get_locale(Pleroma.Web.Gettext)
    old_locales = Pleroma.Web.Gettext.get_locales()

    Pleroma.Web.Gettext.with_locales ["zh_Hans", "en_test"] do
      assert "zh_Hans" == Gettext.get_locale(Pleroma.Web.Gettext)
      assert ["zh_Hans", "en_test"] == Pleroma.Web.Gettext.get_locales()
    end

    assert old_first_locale == Gettext.get_locale(Pleroma.Web.Gettext)
    assert old_locales == Pleroma.Web.Gettext.get_locales()
  end

  describe "handle_missing_translation/5" do
    test "fallback to next locale if some translation is not available" do
      Pleroma.Web.Gettext.with_locales ["x_unsupported", "en_test"] do
        assert "xxYour account is awaiting approvalxx" ==
                 Pleroma.Web.Gettext.dpgettext(
                   "static_pages",
                   "approval pending email subject",
                   "Your account is awaiting approval"
                 )
      end
    end

    test "putting en locale at the front should not make gettext fallback unexpectedly" do
      Pleroma.Web.Gettext.with_locales ["en", "en_test"] do
        assert "Your account is awaiting approval" ==
                 Pleroma.Web.Gettext.dpgettext(
                   "static_pages",
                   "approval pending email subject",
                   "Your account is awaiting approval"
                 )
      end
    end

    test "duplicated locale in list should not result in infinite loops" do
      Pleroma.Web.Gettext.with_locales ["x_unsupported", "x_unsupported", "en_test"] do
        assert "xxYour account is awaiting approvalxx" ==
                 Pleroma.Web.Gettext.dpgettext(
                   "static_pages",
                   "approval pending email subject",
                   "Your account is awaiting approval"
                 )
      end
    end

    test "direct interpolation" do
      Pleroma.Web.Gettext.with_locales ["en_test"] do
        assert "xxYour digest from some instancexx" ==
                 Pleroma.Web.Gettext.dpgettext(
                   "static_pages",
                   "digest email subject",
                   "Your digest from %{instance_name}",
                   instance_name: "some instance"
                 )
      end
    end

    test "fallback with interpolation" do
      Pleroma.Web.Gettext.with_locales ["x_unsupported", "en_test"] do
        assert "xxYour digest from some instancexx" ==
                 Pleroma.Web.Gettext.dpgettext(
                   "static_pages",
                   "digest email subject",
                   "Your digest from %{instance_name}",
                   instance_name: "some instance"
                 )
      end
    end

    test "fallback to msgid" do
      Pleroma.Web.Gettext.with_locales ["x_unsupported"] do
        assert "Your digest from some instance" ==
                 Pleroma.Web.Gettext.dpgettext(
                   "static_pages",
                   "digest email subject",
                   "Your digest from %{instance_name}",
                   instance_name: "some instance"
                 )
      end
    end
  end

  describe "handle_missing_plural_translation/7" do
    test "direct interpolation" do
      Pleroma.Web.Gettext.with_locales ["en_test"] do
        assert "xx1 New Followerxx" ==
                 Pleroma.Web.Gettext.dpngettext(
                   "static_pages",
                   "new followers count header",
                   "%{count} New Follower",
                   "%{count} New Followers",
                   1,
                   count: 1
                 )

        assert "xx5 New Followersxx" ==
                 Pleroma.Web.Gettext.dpngettext(
                   "static_pages",
                   "new followers count header",
                   "%{count} New Follower",
                   "%{count} New Followers",
                   5,
                   count: 5
                 )
      end
    end

    test "fallback with interpolation" do
      Pleroma.Web.Gettext.with_locales ["x_unsupported", "en_test"] do
        assert "xx1 New Followerxx" ==
                 Pleroma.Web.Gettext.dpngettext(
                   "static_pages",
                   "new followers count header",
                   "%{count} New Follower",
                   "%{count} New Followers",
                   1,
                   count: 1
                 )

        assert "xx5 New Followersxx" ==
                 Pleroma.Web.Gettext.dpngettext(
                   "static_pages",
                   "new followers count header",
                   "%{count} New Follower",
                   "%{count} New Followers",
                   5,
                   count: 5
                 )
      end
    end

    test "fallback to msgid" do
      Pleroma.Web.Gettext.with_locales ["x_unsupported"] do
        assert "1 New Follower" ==
                 Pleroma.Web.Gettext.dpngettext(
                   "static_pages",
                   "new followers count header",
                   "%{count} New Follower",
                   "%{count} New Followers",
                   1,
                   count: 1
                 )

        assert "5 New Followers" ==
                 Pleroma.Web.Gettext.dpngettext(
                   "static_pages",
                   "new followers count header",
                   "%{count} New Follower",
                   "%{count} New Followers",
                   5,
                   count: 5
                 )
      end
    end
  end
end