-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Expand file tree
/
Copy pathOpenGraphTest.php
More file actions
97 lines (80 loc) · 3.42 KB
/
OpenGraphTest.php
File metadata and controls
97 lines (80 loc) · 3.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
namespace Tests\Meta;
use BookStack\Entities\Repos\BaseRepo;
use BookStack\Entities\Repos\BookRepo;
use Illuminate\Support\Str;
use Illuminate\Testing\TestResponse;
use Tests\TestCase;
class OpenGraphTest extends TestCase
{
public function test_page_tags()
{
$page = $this->entities->page();
$resp = $this->asEditor()->get($page->getUrl());
$tags = $this->getOpenGraphTags($resp);
$this->assertEquals($page->getShortName() . ' | BookStack', $tags['title']);
$this->assertEquals($page->getUrl(), $tags['url']);
$this->assertEquals(Str::limit($page->text, 100, '...'), $tags['description']);
}
public function test_chapter_tags()
{
$chapter = $this->entities->chapter();
$resp = $this->asEditor()->get($chapter->getUrl());
$tags = $this->getOpenGraphTags($resp);
$this->assertEquals($chapter->getShortName() . ' | BookStack', $tags['title']);
$this->assertEquals($chapter->getUrl(), $tags['url']);
$this->assertEquals(Str::limit($chapter->description, 100, '...'), $tags['description']);
}
public function test_book_tags()
{
$book = $this->entities->book();
$resp = $this->asEditor()->get($book->getUrl());
$tags = $this->getOpenGraphTags($resp);
$this->assertEquals($book->getShortName() . ' | BookStack', $tags['title']);
$this->assertEquals($book->getUrl(), $tags['url']);
$this->assertEquals(Str::limit($book->description, 100, '...'), $tags['description']);
$this->assertArrayNotHasKey('image', $tags);
// Test image set if image has cover image
$bookRepo = app(BookRepo::class);
$bookRepo->updateCoverImage($book, $this->files->uploadedImage('image.png'));
$resp = $this->asEditor()->get($book->getUrl());
$tags = $this->getOpenGraphTags($resp);
$this->assertEquals($book->coverInfo()->getUrl(), $tags['image']);
}
public function test_shelf_tags()
{
$shelf = $this->entities->shelf();
$resp = $this->asEditor()->get($shelf->getUrl());
$tags = $this->getOpenGraphTags($resp);
$this->assertEquals($shelf->getShortName() . ' | BookStack', $tags['title']);
$this->assertEquals($shelf->getUrl(), $tags['url']);
$this->assertEquals(Str::limit($shelf->description, 100, '...'), $tags['description']);
$this->assertArrayNotHasKey('image', $tags);
// Test image set if image has cover image
$baseRepo = app(BaseRepo::class);
$baseRepo->updateCoverImage($shelf, $this->files->uploadedImage('image.png'));
$resp = $this->asEditor()->get($shelf->getUrl());
$tags = $this->getOpenGraphTags($resp);
$this->assertEquals($shelf->coverInfo()->getUrl(), $tags['image']);
}
/**
* Parse the open graph tags from a test response.
*/
protected function getOpenGraphTags(TestResponse $resp): array
{
$tags = [];
libxml_use_internal_errors(true);
$doc = new \DOMDocument();
$doc->loadHTML($resp->getContent());
$metaElems = $doc->getElementsByTagName('meta');
/** @var \DOMElement $elem */
foreach ($metaElems as $elem) {
$prop = $elem->getAttribute('property');
$name = explode(':', $prop)[1] ?? null;
if ($name) {
$tags[$name] = $elem->getAttribute('content');
}
}
return $tags;
}
}