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 = 'Emailjohn@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('');
});
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');
});
});