]> BookStack Code Mirror - bookstack/blob - tests/References/ReferencesTest.php
1285f591664915b0eaa76870ff61ebe1669041f0
[bookstack] / tests / References / ReferencesTest.php
1 <?php
2
3 namespace Tests\References;
4
5 use BookStack\Entities\Models\Page;
6 use BookStack\Entities\Repos\PageRepo;
7 use BookStack\Entities\Tools\TrashCan;
8 use BookStack\Model;
9 use BookStack\References\Reference;
10 use Tests\TestCase;
11
12 class ReferencesTest extends TestCase
13 {
14
15     public function test_references_created_on_page_update()
16     {
17         /** @var Page $pageA */
18         /** @var Page $pageB */
19         $pageA = Page::query()->first();
20         $pageB = Page::query()->where('id', '!=', $pageA->id)->first();
21
22         $this->assertDatabaseMissing('references', ['from_id' => $pageA->id, 'from_type' => $pageA->getMorphClass()]);
23
24         $this->asEditor()->put($pageA->getUrl(), [
25             'name' => 'Reference test',
26             'html' => '<a href="' . $pageB->getUrl() . '">Testing</a>'
27         ]);
28
29         $this->assertDatabaseHas('references', [
30             'from_id' => $pageA->id,
31             'from_type' => $pageA->getMorphClass(),
32             'to_id' => $pageB->id,
33             'to_type' => $pageB->getMorphClass(),
34         ]);
35     }
36
37     public function test_references_deleted_on_entity_delete()
38     {
39         /** @var Page $pageA */
40         /** @var Page $pageB */
41         $pageA = Page::query()->first();
42         $pageB = Page::query()->where('id', '!=', $pageA->id)->first();
43
44         $this->createReference($pageA, $pageB);
45         $this->createReference($pageB, $pageA);
46
47         $this->assertDatabaseHas('references', ['from_id' => $pageA->id, 'from_type' => $pageA->getMorphClass()]);
48         $this->assertDatabaseHas('references', ['to_id' => $pageA->id, 'to_type' => $pageA->getMorphClass()]);
49
50         app(PageRepo::class)->destroy($pageA);
51         app(TrashCan::class)->empty();
52
53         $this->assertDatabaseMissing('references', ['from_id' => $pageA->id, 'from_type' => $pageA->getMorphClass()]);
54         $this->assertDatabaseMissing('references', ['to_id' => $pageA->id, 'to_type' => $pageA->getMorphClass()]);
55     }
56
57     protected function createReference(Model $from, Model $to)
58     {
59         (new Reference())->forceFill([
60             'from_type' => $from->getMorphClass(),
61             'from_id' => $from->id,
62             'to_type' => $to->getMorphClass(),
63             'to_id' => $to->id,
64         ])->save();
65     }
66
67 }