Hello Name'; $data = [ ['id' => '123', 'value' => 'John Doe'] ]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('
Hello John Doe
'); }); it('uses fallback when value is not found', function () { $content = 'Name'; $data = []; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('Guest'); }); it('removes the element when no value and no fallback is provided', function () { $content = '
Hello Name!
'; $data = []; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('
Hello !
'); }); describe('parseAsText', function () { it('converts HTML to plain text with proper line breaks', function () { $content = '
First line
Second line
'; $parser = new MentionParser($content, []); $result = $parser->parseAsText(); expect($result)->toBe("First line\nSecond line"); }); it('handles email addresses with proper line breaks', function () { $content = 'Email
john@example.com
'; $data = [ ['id' => '123', 'value' => 'jane@example.com'] ]; $parser = new MentionParser($content, $data); $result = $parser->parseAsText(); expect($result)->toBe("jane@example.com\njohn@example.com"); }); it('handles multiple mentions and complex HTML structure', function () { $content = '
Contact: Email1
CC: Email2
Additional: test@example.com
'; $data = [ ['id' => '123', 'value' => 'primary@example.com'], ['id' => '456', 'value' => 'secondary@example.com'], ]; $parser = new MentionParser($content, $data); $result = $parser->parseAsText(); expect($result)->toBe( "Contact: primary@example.com\n" . "CC: secondary@example.com\n" . "Additional: test@example.com" ); }); it('handles array values in mentions', function () { $content = 'Emails'; $data = [ ['id' => '123', 'value' => ['first@test.com', 'second@test.com']] ]; $parser = new MentionParser($content, $data); $result = $parser->parseAsText(); expect($result)->toBe('first@test.com, second@test.com'); }); }); test('it replaces mention elements with their corresponding values', function () { $content = '

Hello Placeholder

'; $data = [['id' => '123', 'value' => 'World']]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('

Hello World

'); }); test('it handles multiple mentions', function () { $content = '

Name is Age years old

'; $data = [ ['id' => '123', 'value' => 'John'], ['id' => '456', 'value' => 30], ]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('

John is 30 years old

'); }); test('it uses fallback when value is not found', function () { $content = '

Hello Placeholder

'; $data = []; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('

Hello Friend

'); }); test('it removes mention element when no value and no fallback', function () { $content = '

Hello Placeholder

'; $data = []; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('

Hello

'); }); test('it handles array values', function () { $content = '

Tags: Placeholder

'; $data = [['id' => '123', 'value' => ['PHP', 'Laravel', 'Testing']]]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('

Tags: PHP, Laravel, Testing

'); }); test('it preserves HTML structure', function () { $content = '

Hello Placeholder

How are you?

'; $data = [['id' => '123', 'value' => 'World']]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('

Hello World

How are you?

'); }); test('it handles UTF-8 characters', function () { $content = '

こんにちは Placeholder

'; $data = [['id' => '123', 'value' => '世界']]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('

こんにちは 世界

'); }); test('it handles content without surrounding paragraph tags', function () { $content = 'some text Post excerpt dewde'; $data = [['id' => '123', 'value' => 'replaced text']]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('some text replaced text dewde'); }); });