mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-10-01 01:36:00 -04:00
References: Fixed references count/list recycle bin interaction
Count and reference list would get references then attempt to load entities, which could fail to load if in the recycle bin. This updates the queries to effectively ignore references for items we can't see (in recycle bin). Added test to cover. For #4918
This commit is contained in:
parent
58f6219cb3
commit
a33dbcb04a
@ -41,7 +41,8 @@ class ReferenceFetcher
|
||||
{
|
||||
$baseQuery = Reference::query()
|
||||
->where('to_type', '=', $entity->getMorphClass())
|
||||
->where('to_id', '=', $entity->id);
|
||||
->where('to_id', '=', $entity->id)
|
||||
->whereHas('from');
|
||||
|
||||
return $this->permissions->restrictEntityRelationQuery(
|
||||
$baseQuery,
|
||||
|
@ -271,7 +271,31 @@ class ReferencesTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
protected function createReference(Model $from, Model $to)
|
||||
public function test_reference_from_deleted_item_does_not_count_or_show_in_references_page()
|
||||
{
|
||||
$page = $this->entities->page();
|
||||
$referencingPageA = $this->entities->page();
|
||||
$referencingPageB = $this->entities->page();
|
||||
|
||||
$this->asEditor();
|
||||
$this->createReference($referencingPageA, $page);
|
||||
$this->createReference($referencingPageB, $page);
|
||||
|
||||
$resp = $this->get($page->getUrl());
|
||||
$resp->assertSee('Referenced by 2 items');
|
||||
|
||||
$this->delete($referencingPageA->getUrl());
|
||||
|
||||
$resp = $this->get($page->getUrl());
|
||||
$resp->assertSee('Referenced by 1 item');
|
||||
|
||||
$resp = $this->get($page->getUrl('/references'));
|
||||
$resp->assertOk();
|
||||
$resp->assertSee($referencingPageB->getUrl());
|
||||
$resp->assertDontSee($referencingPageA->getUrl());
|
||||
}
|
||||
|
||||
protected function createReference(Model $from, Model $to): void
|
||||
{
|
||||
(new Reference())->forceFill([
|
||||
'from_type' => $from->getMorphClass(),
|
||||
|
Loading…
Reference in New Issue
Block a user