Compare commits

...
1 Commits
2 changed files with 32 additions and 1 deletions
@@ -9,7 +9,8 @@ class Messages::MarkdownRendererService
'Channel::Line' => :render_line,
'Channel::TwitterProfile' => :render_plain_text,
'Channel::Sms' => :render_plain_text,
'Channel::TwilioSms' => :render_plain_text
'Channel::TwilioSms' => :render_plain_text,
'Channel::Api' => :render_api_message
}.freeze
def initialize(content, channel_type, channel = nil)
@@ -56,6 +57,11 @@ class Messages::MarkdownRendererService
restore_multiple_newlines(result)
end
def render_api_message
# Convert literal \n strings to actual newlines for API channel messages
@content.gsub('\\n', "\n")
end
def render_whatsapp
# Strip whitespace from whitespace-only lines to normalize newlines
normalized_content = @content.gsub(/^[ \t]+$/m, '')
@@ -493,6 +493,31 @@ RSpec.describe Messages::MarkdownRendererService, type: :service do
result = described_class.new(content, channel_type).render
expect(result).to eq("- Item 1\n- Item 2")
end
it 'converts literal \\n strings to actual newlines' do
content = 'Hi \\ntext message \\nwith line \\nbreak'
result = described_class.new(content, channel_type).render
expect(result).to eq("Hi \ntext message \nwith line \nbreak")
end
it 'handles multiple literal \\n in sequence' do
content = 'Line 1\\n\\n\\nLine 2'
result = described_class.new(content, channel_type).render
expect(result).to eq("Line 1\n\n\nLine 2")
end
it 'preserves markdown formatting while converting \\n' do
content = '**bold**\\n_italic_\\n`code`'
result = described_class.new(content, channel_type).render
expect(result).to eq("**bold**\n_italic_\n`code`")
end
it 'handles real-world API payload with literal \\n strings' do
content = 'Hi \\ntext message \\nwith line \\nbreak'
result = described_class.new(content, channel_type).render
expect(result).to eq("Hi \ntext message \nwith line \nbreak")
expect(result).not_to include('\\n')
end
end
context 'when channel is Channel::TwitterProfile' do