mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-12-19 10:42:29 +03:00
- Added new user notification preference, opt-in by default - Added parser to extract mentions from comment HTML, with tests to cover. - Added notification and notification handling Not yet tested, needs testing coverage.
44 lines
1.6 KiB
PHP
44 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace Tests\Activity;
|
|
|
|
use BookStack\Activity\Tools\MentionParser;
|
|
use Tests\TestCase;
|
|
|
|
class MentionParserTest extends TestCase
|
|
{
|
|
public function test_it_extracts_mentions()
|
|
{
|
|
$parser = new MentionParser();
|
|
|
|
// Test basic mention extraction
|
|
$html = '<p>Hello <a href="/user/5" data-mention-user-id="5">@User</a></p>';
|
|
$result = $parser->parseUserIdsFromHtml($html);
|
|
$this->assertEquals([5], $result);
|
|
|
|
// Test multiple mentions
|
|
$html = '<p><a data-mention-user-id="1">@Alice</a> and <a data-mention-user-id="2">@Bob</a></p>';
|
|
$result = $parser->parseUserIdsFromHtml($html);
|
|
$this->assertEquals([1, 2], $result);
|
|
|
|
// Test filtering out invalid IDs (zero and negative)
|
|
$html = '<p><a data-mention-user-id="0">@Invalid</a> <a data-mention-user-id="-5">@Negative</a> <a data-mention-user-id="3">@Valid</a></p>';
|
|
$result = $parser->parseUserIdsFromHtml($html);
|
|
$this->assertEquals([3], $result);
|
|
|
|
// Test non-mention links are ignored
|
|
$html = '<p><a href="/page/1">Normal Link</a> <a data-mention-user-id="7">@User</a></p>';
|
|
$result = $parser->parseUserIdsFromHtml($html);
|
|
$this->assertEquals([7], $result);
|
|
|
|
// Test empty HTML
|
|
$result = $parser->parseUserIdsFromHtml('');
|
|
$this->assertEquals([], $result);
|
|
|
|
// Test duplicate user IDs
|
|
$html = '<p><a data-mention-user-id="4">@User</a> mentioned <a data-mention-user-id="4">@User</a> again</p>';
|
|
$result = $parser->parseUserIdsFromHtml($html);
|
|
$this->assertEquals([4], $result);
|
|
}
|
|
}
|