@@ -99,4 +99,66 @@ class EmptyTranslator < DiscourseTranslator::Base
9999 )
100100 end
101101 end
102+
103+ describe ".detect" do
104+ fab! ( :post )
105+
106+ it "returns nil when text is blank" do
107+ post . cooked = ""
108+ expect ( TestTranslator . detect ( post ) ) . to be_nil
109+ end
110+
111+ it "returns cached detection if available" do
112+ TestTranslator . save_detected_locale ( post ) { "en" }
113+
114+ TestTranslator . expects ( :detect! ) . never
115+ expect ( TestTranslator . detect ( post ) ) . to eq ( "en" )
116+ end
117+
118+ it "performs detection if no cached result" do
119+ TestTranslator . save_detected_locale ( post ) { nil }
120+ TestTranslator . expects ( :detect! ) . with ( post ) . returns ( "es" )
121+
122+ expect ( TestTranslator . detect ( post ) ) . to eq ( "es" )
123+ end
124+ end
125+
126+ describe ".translate" do
127+ fab! ( :post )
128+
129+ it "returns nil when text is blank" do
130+ post . cooked = ""
131+ expect ( TestTranslator . translate ( post ) ) . to be_nil
132+ end
133+
134+ it "returns original text when detected language matches current locale" do
135+ TestTranslator . save_detected_locale ( post ) { I18n . locale . to_s }
136+ post . cooked = "hello"
137+
138+ expect ( TestTranslator . translate ( post ) ) . to eq ( %w[ en hello ] )
139+ end
140+
141+ it "returns cached translation if available" do
142+ TestTranslator . save_detected_locale ( post ) { "es" }
143+ TestTranslator . save_translation ( post ) { "hello" }
144+
145+ expect ( TestTranslator . translate ( post ) ) . to eq ( %w[ es hello ] )
146+ end
147+
148+ it "raises error when translation not supported" do
149+ TestTranslator . save_detected_locale ( post ) { "xx" }
150+ TestTranslator . save_translation ( post ) { nil }
151+ TestTranslator . expects ( :translate_supported? ) . with ( "xx" , :en ) . returns ( false )
152+
153+ expect { TestTranslator . translate ( post ) } . to raise_error ( DiscourseTranslator ::TranslatorError )
154+ end
155+
156+ it "performs translation when needed" do
157+ TestTranslator . save_detected_locale ( post ) { "es" }
158+ TestTranslator . save_translation ( post ) { nil }
159+ TestTranslator . expects ( :translate! ) . returns ( "hello" )
160+
161+ expect ( TestTranslator . translate ( post ) ) . to eq ( %w[ es hello ] )
162+ end
163+ end
102164end
0 commit comments