# frozen_string_literal: true describe DiscourseAi::Translation::PostDetectionText do describe ".get_text" do let(:post) { Fabricate.build(:post) } it "returns nil when post is nil" do expect(described_class.get_text(nil)).to be_nil end it "returns nil when post.cooked is nil" do post.cooked = nil expect(described_class.get_text(post)).to be_nil end it "handles simple text" do post.cooked = "
Hello world
" expect(described_class.get_text(post)).to eq("Hello world") end it "removes quotes" do post.cooked = "Hello
Quote
World
" expect(described_class.get_text(post)).to eq("Hello World") end it "removes Discourse quotes" do post.cooked = 'Hello
World
' expect(described_class.get_text(post)).to eq("Hello World") end it "removes image captions" do post.cooked = 'Hello
World
' expect(described_class.get_text(post)).to eq("Hello World") end it "removes oneboxes" do post.cooked = 'Hello
World
' expect(described_class.get_text(post)).to eq("Hello World") end it "removes code blocks" do post.cooked = "Hello
Code block
World
" expect(described_class.get_text(post)).to eq("Hello World") end it "removes hashtags" do post.cooked = 'Hello
#hashtagWorld
' expect(described_class.get_text(post)).to eq("Hello World") end it "removes emoji" do post.cooked = 'Hello
World
' expect(described_class.get_text(post)).to eq("Hello World") end it "removes mentions" do post.cooked = 'Hello
@userWorld
' expect(described_class.get_text(post)).to eq("Hello World") end it "falls back to necessary text when preferred is empty" do post.cooked = '@user' expect(described_class.get_text(post)).to eq("@user") end it "falls back to cooked when all filtering removes all content" do post.cooked = "Quote" expect(described_class.get_text(post)).to eq("Quote") end it "handles complex nested content correctly" do post.cooked = '
Hello
Image caption
Quote text
World
Code block
@user'
expect(described_class.get_text(post)).to eq("Hello World")
end
end
end