Hello Name'; $data = [ ['id' => '123', 'value' => 'John Doe'] ]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('
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?
Hello World
How are you?
こんにちは 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'); }); describe('urlFriendlyOutput', function () { test('it encodes special characters in values', function () { $content = 'Test: Placeholder
'; $data = [['id' => '123', 'value' => 'Hello & World']]; $parser = new MentionParser($content, $data); $result = $parser->urlFriendlyOutput()->parse(); expect($result)->toBe('Test: Hello+%26+World
'); }); test('it encodes spaces in values', function () { $content = 'Name: Placeholder
'; $data = [['id' => '123', 'value' => 'John Doe']]; $parser = new MentionParser($content, $data); $result = $parser->urlFriendlyOutput()->parse(); expect($result)->toBe('Name: John+Doe
'); }); test('it encodes array values', function () { $content = 'Tags: Placeholder
'; $data = [['id' => '123', 'value' => ['Web & Mobile', 'PHP/Laravel']]]; $parser = new MentionParser($content, $data); $result = $parser->urlFriendlyOutput()->parse(); expect($result)->toBe('Tags: Web+%26+Mobile,+PHP%2FLaravel
'); }); test('it can be disabled explicitly', function () { $content = 'Test: Placeholder
'; $data = [['id' => '123', 'value' => 'Hello & World']]; $parser = new MentionParser($content, $data); $result = $parser->urlFriendlyOutput(false)->parse(); expect($result)->toBe('Test: Hello & World
'); }); }); });