# 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

#hashtag

World

' expect(described_class.get_text(post)).to eq("Hello World") end it "removes emoji" do post.cooked = '

Hello

:smile:

World

' expect(described_class.get_text(post)).to eq("Hello World") end it "removes mentions" do post.cooked = '

Hello

@user

World

' 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

Quote text

World

Code block
@user' expect(described_class.get_text(post)).to eq("Hello World") end end end