Skip to content

Commit 71c9aac

Browse files
committed
Fix oddities and update spec
1 parent a8030aa commit 71c9aac

File tree

3 files changed

+48
-40
lines changed

3 files changed

+48
-40
lines changed

lib/discourse_translator/translator_selection_validator.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ def valid_value?(val)
1010
return true if val.blank?
1111

1212
if val == "DiscourseAi"
13-
return false if !defined?(DiscourseAutomation)
13+
return false if !defined?(::DiscourseAi)
1414
return false if !SiteSetting.ai_helper_enabled
1515
end
1616

1717
true
1818
end
1919

2020
def error_message
21-
return I18n.t("translator.discourse_ai.not_installed") if !defined?(DiscourseAutomation)
21+
return I18n.t("translator.discourse_ai.not_installed") if !defined?(::DiscourseAi)
2222

2323
I18n.t("translator.discourse_ai.ai_helper_required") if !SiteSetting.ai_helper_enabled
2424
end

spec/lib/translator_selection_validator_spec.rb

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,74 +3,76 @@
33
require "rails_helper"
44

55
describe ::DiscourseTranslator::TranslatorSelectionValidator do
6-
subject { described_class.new }
7-
8-
fab!(:llm_model) { Fabricate(:llm_model) }
6+
fab!(:llm_model)
97

108
describe "#valid_value?" do
119
context "when value is blank" do
1210
it "returns true" do
13-
expect(subject.valid_value?(nil)).to eq(true)
14-
expect(subject.valid_value?("")).to eq(true)
11+
expect(described_class.new.valid_value?(nil)).to eq(true)
12+
expect(described_class.new.valid_value?("")).to eq(true)
1513
end
1614
end
1715

1816
context "when value is 'DiscourseAi'" do
19-
context "when DiscourseAutomation is not defined" do
17+
context "when DiscourseAi is not defined" do
2018
it "returns false" do
21-
hide_const("DiscourseAutomation")
22-
expect(subject.valid_value?("DiscourseAi")).to eq(false)
19+
hide_const("DiscourseAi")
20+
expect(described_class.new.valid_value?("DiscourseAi")).to eq(false)
2321
end
2422
end
2523

26-
context "when DiscourseAutomation is defined but ai_helper_enabled is false" do
24+
context "when DiscourseAi is defined but ai_helper_enabled is false" do
2725
it "returns false" do
2826
SiteSetting.ai_helper_enabled = false
29-
expect(subject.valid_value?("DiscourseAi")).to eq(false)
27+
expect(described_class.new.valid_value?("DiscourseAi")).to eq(false)
3028
end
3129
end
3230

33-
context "when DiscourseAutomation is defined and ai_helper_enabled is true" do
31+
context "when DiscourseAi is defined and ai_helper_enabled is true" do
3432
it "returns true" do
3533
DiscourseAi::Completions::Llm.with_prepared_responses(["OK"]) do
3634
SiteSetting.ai_helper_model = "custom:#{llm_model.id}"
3735
SiteSetting.ai_helper_enabled = true
3836
end
39-
expect(subject.valid_value?("DiscourseAi")).to eq(true)
37+
expect(described_class.new.valid_value?("DiscourseAi")).to eq(true)
4038
end
4139
end
4240
end
4341

4442
context "when value is not 'DiscourseAi'" do
4543
it "returns true" do
46-
expect(subject.valid_value?("googly")).to eq(true)
47-
expect(subject.valid_value?("poopy")).to eq(true)
44+
expect(described_class.new.valid_value?("googly")).to eq(true)
45+
expect(described_class.new.valid_value?("poopy")).to eq(true)
4846
end
4947
end
5048
end
5149

5250
describe "#error_message" do
53-
context "when DiscourseAutomation is not defined" do
51+
context "when DiscourseAi is not defined" do
5452
it "returns the not_installed error message" do
55-
hide_const("DiscourseAutomation")
56-
expect(subject.error_message).to eq(I18n.t("translator.discourse_ai.not_installed"))
53+
hide_const("DiscourseAi")
54+
expect(described_class.new.error_message).to eq(
55+
I18n.t("translator.discourse_ai.not_installed"),
56+
)
5757
end
5858
end
5959

60-
context "when DiscourseAutomation is defined but ai_helper_enabled is false" do
60+
context "when DiscourseAi is defined but ai_helper_enabled is false" do
6161
it "returns the ai_helper_required error message" do
6262
SiteSetting.ai_helper_enabled = false
63-
expect(subject.error_message).to eq(I18n.t("translator.discourse_ai.ai_helper_required"))
63+
expect(described_class.new.error_message).to eq(
64+
I18n.t("translator.discourse_ai.ai_helper_required"),
65+
)
6466
end
6567
end
6668

67-
context "when DiscourseAutomation is defined and ai_helper_enabled is true" do
69+
context "when DiscourseAi is defined and ai_helper_enabled is true" do
6870
it "returns nil" do
6971
DiscourseAi::Completions::Llm.with_prepared_responses(["OK"]) do
7072
SiteSetting.ai_helper_model = "custom:#{llm_model.id}"
7173
SiteSetting.ai_helper_enabled = true
7274
end
73-
expect(subject.error_message).to be_nil
75+
expect(described_class.new.error_message).to be_nil
7476
end
7577
end
7678
end

spec/services/discourse_ai_spec.rb

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,55 @@
33
require "rails_helper"
44

55
describe DiscourseTranslator::DiscourseAi do
6+
fab!(:post)
7+
68
before do
7-
SiteSetting.translator_enabled = true
89
Fabricate(:fake_model).tap do |fake_llm|
910
SiteSetting.public_send("ai_helper_model=", "custom:#{fake_llm.id}")
1011
end
12+
SiteSetting.ai_helper_enabled = true
13+
SiteSetting.translator_enabled = true
14+
SiteSetting.translator = "DiscourseAi"
1115
end
1216

1317
describe ".detect" do
14-
let(:post) { Fabricate(:post) }
15-
1618
it "stores the detected language in a custom field" do
1719
locale = "de"
1820
DiscourseAi::Completions::Llm.with_prepared_responses(["<output>de</output>"]) do
1921
DiscourseTranslator::DiscourseAi.detect(post)
22+
post.save_custom_fields
2023
end
2124

2225
expect(post.custom_fields[DiscourseTranslator::DETECTED_LANG_CUSTOM_FIELD]).to eq locale
2326
end
2427

2528
it "truncates to MAX LENGTH" do
26-
truncated_text = post.cooked.truncate(DiscourseTranslator::DiscourseAi::MAX_DETECT_LOCALE_TEXT_LENGTH)
27-
expect_any_instance_of(::DiscourseAi::AiHelper::Assistant)
28-
.to receive(:generate_and_send_prompt)
29-
.with(
30-
CompletionPrompt.find_by(id: CompletionPrompt::DETECT_TEXT_LOCALE),
31-
truncated_text,
32-
Discourse.system_user
33-
).and_call_original
29+
truncated_text =
30+
post.cooked.truncate(DiscourseTranslator::DiscourseAi::MAX_DETECT_LOCALE_TEXT_LENGTH)
31+
expect_any_instance_of(::DiscourseAi::AiHelper::Assistant).to receive(
32+
:generate_and_send_prompt,
33+
).with(
34+
CompletionPrompt.find_by(id: CompletionPrompt::DETECT_TEXT_LOCALE),
35+
truncated_text,
36+
Discourse.system_user,
37+
).and_call_original
3438

3539
DiscourseAi::Completions::Llm.with_prepared_responses(["<output>de</output>"]) do
3640
DiscourseTranslator::DiscourseAi.detect(post)
3741
end
3842
end
39-
40-
it "returns if settings are not correct" do
41-
42-
end
4343
end
4444

4545
describe ".translate" do
46+
before do
47+
post.custom_fields[DiscourseTranslator::DETECTED_LANG_CUSTOM_FIELD] = "de"
48+
post.save_custom_fields
49+
end
50+
4651
it "translates the post and returns [locale, translated_text]" do
47-
post = Fabricate(:post)
48-
DiscourseAi::Completions::Llm.with_prepared_responses(["<output>some translated text</output>", "<output>translated</output>"]) do
52+
DiscourseAi::Completions::Llm.with_prepared_responses(
53+
["<output>some translated text</output>", "<output>translated</output>"],
54+
) do
4955
locale, translated_text = DiscourseTranslator::DiscourseAi.translate(post)
5056
expect(locale).to eq "de"
5157
expect(translated_text).to eq "some translated text"

0 commit comments

Comments
 (0)