]> BookStack Code Mirror - bookstack/blob - tests/References/CrossLinkParserTest.php
Fixed local_secure_restricted preventing attachment uploads
[bookstack] / tests / References / CrossLinkParserTest.php
1 <?php
2
3 namespace Tests\References;
4
5 use BookStack\Entities\Models\Page;
6 use BookStack\References\CrossLinkParser;
7 use Tests\TestCase;
8
9 class CrossLinkParserTest extends TestCase
10 {
11     public function test_instance_with_entity_resolvers_matches_entity_links()
12     {
13         $entities = $this->getEachEntityType();
14         $otherPage = Page::query()->where('id', '!=', $entities['page']->id)->first();
15
16         $html = '
17 <a href="' . url('/link/' . $otherPage->id) . '#cat">Page Permalink</a>
18 <a href="' . $entities['page']->getUrl() . '?a=b">Page Link</a>
19 <a href="' . $entities['chapter']->getUrl() . '?cat=mouse#donkey">Chapter Link</a>
20 <a href="' . $entities['book']->getUrl() . '/edit">Book Link</a>
21 <a href="' . $entities['bookshelf']->getUrl() . '/edit?cat=happy#hello">Shelf Link</a>
22 <a href="' . url('/settings') . '">Settings Link</a>
23         ';
24
25         $parser = CrossLinkParser::createWithEntityResolvers();
26         $results = $parser->extractLinkedModels($html);
27
28         $this->assertCount(5, $results);
29         $this->assertEquals(get_class($otherPage), get_class($results[0]));
30         $this->assertEquals($otherPage->id, $results[0]->id);
31         $this->assertEquals(get_class($entities['page']), get_class($results[1]));
32         $this->assertEquals($entities['page']->id, $results[1]->id);
33         $this->assertEquals(get_class($entities['chapter']), get_class($results[2]));
34         $this->assertEquals($entities['chapter']->id, $results[2]->id);
35         $this->assertEquals(get_class($entities['book']), get_class($results[3]));
36         $this->assertEquals($entities['book']->id, $results[3]->id);
37         $this->assertEquals(get_class($entities['bookshelf']), get_class($results[4]));
38         $this->assertEquals($entities['bookshelf']->id, $results[4]->id);
39     }
40
41     public function test_similar_page_and_book_reference_links_dont_conflict()
42     {
43         $page = Page::query()->first();
44         $book = $page->book;
45
46         $html = '
47 <a href="' . $page->getUrl() . '">Page Link</a>
48 <a href="' . $book->getUrl() . '">Book Link</a>
49         ';
50
51         $parser = CrossLinkParser::createWithEntityResolvers();
52         $results = $parser->extractLinkedModels($html);
53
54         $this->assertCount(2, $results);
55         $this->assertEquals(get_class($page), get_class($results[0]));
56         $this->assertEquals($page->id, $results[0]->id);
57         $this->assertEquals(get_class($book), get_class($results[1]));
58         $this->assertEquals($book->id, $results[1]->id);
59     }
60 }