Hello Name'; $data = [ ['id' => '123', 'value' => 'John Doe'] ]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('
Hello Full Name
'; $data = [ ['id' => '123', 'value' => 'John Doe'] ]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('Hello John Doe
'); }); describe('parseAsText', function () { it('converts HTML to plain text with proper line breaks', 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 supports mention="true" attributes', function () { $content = 'Hello Full Name
'; $data = [['id' => '123', 'value' => 'John Doe']]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('Hello John Doe
'); }); test('it handles multiple mentions with mention="true" syntax', function () { $content = 'Name and Title
'; $data = [ ['id' => '123', 'value' => 'John Doe'], ['id' => '456', 'value' => 'Developer'], ]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('John Doe and Developer
'); }); 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'); }); test('it handles URL-encoded field IDs', function () { $content = 'Hello Full Name
'; $data = [['id' => '%3ARGE', 'value' => 'John Doe']]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('Hello John Doe
'); }); test('it handles URL-encoded field IDs with mention="true" syntax', function () { $content = 'Hello Full Name
'; $data = [['id' => '%3ARGE', 'value' => 'John Doe']]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('Hello John Doe
'); }); test('it handles multiple mentions with URL-encoded IDs and mention="true" syntax', function () { $content = 'Full Name and Phone
'; $data = [ ['id' => '%3ARGE', 'value' => 'John Doe'], ['id' => 'V%7D%40S', 'value' => '123-456-7890'], ]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('John Doe and 123-456-7890
'); }); test('it recreates real-world example with URL-encoded IDs', function () { $content = 'Hello there 👋
This is a confirmation that your submission was successfully saved.
Full NameContact FormPhone Number
'; $data = [ ['id' => '%3ARGE', 'value' => 'jujujujuju'], ['id' => 'title', 'value' => 'jujuuj'], ['id' => 'V%7D%40S', 'value' => '555-1234'], ]; $parser = new MentionParser($content, $data); $result = $parser->parse(); expect($result)->toBe('Hello there 👋
This is a confirmation that your submission was successfully saved.
jujujujujujujuuj555-1234
'); }); 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
'); }); }); });