discourse-translator/spec/jobs/translate_translatable_spec.rb
Natalie Tay f4724ab924
DEV: Move providers into their own module (#279)
* Rename base method

* Base is base provider

* Scope providers

* Lint
2025-04-22 13:10:18 +08:00

62 lines
2.1 KiB
Ruby

# frozen_string_literal: true
describe Jobs::TranslateTranslatable do
fab!(:post)
fab!(:topic)
let!(:job) { Jobs::TranslateTranslatable.new }
before do
SiteSetting.translator_enabled = true
SiteSetting.translator_provider = "Google"
SiteSetting.automatic_translation_backfill_rate = 100
SiteSetting.automatic_translation_target_languages = "es|fr"
allow(DiscourseTranslator::Provider::Google).to receive(:translate)
end
describe "#execute" do
it "does nothing when translator is disabled" do
SiteSetting.translator_enabled = false
job.execute(type: "Post", translatable_id: post.id)
expect(DiscourseTranslator::Provider::Google).not_to have_received(:translate)
end
it "does nothing when target languages are empty" do
SiteSetting.automatic_translation_target_languages = ""
job.execute(type: "Post", translatable_id: post.id)
expect(DiscourseTranslator::Provider::Google).not_to have_received(:translate)
end
it "translates posts to configured target languages" do
MessageBus
.expects(:publish)
.with("/topic/#{post.topic.id}", type: :translated_post, id: post.id)
.once
job.execute(type: "Post", translatable_id: post.id)
expect(DiscourseTranslator::Provider::Google).to have_received(:translate).with(post, :es)
expect(DiscourseTranslator::Provider::Google).to have_received(:translate).with(post, :fr)
end
it "translates topics to configured target languages" do
MessageBus.expects(:publish).with("/topic/#{topic.id}", type: :translated_post, id: 1).once
job.execute(type: "Topic", translatable_id: topic.id)
expect(DiscourseTranslator::Provider::Google).to have_received(:translate).with(topic, :es)
expect(DiscourseTranslator::Provider::Google).to have_received(:translate).with(topic, :fr)
end
it "does nothing when translatable is not found" do
MessageBus.expects(:publish).never
job.execute(type: "Post", translatable_id: -1)
expect(DiscourseTranslator::Provider::Google).not_to have_received(:translate)
end
end
end