DB::raw('SUM(IF(entity_type = \'book\', 1, 0)) as book_count'),
DB::raw('SUM(IF(entity_type = \'bookshelf\', 1, 0)) as shelf_count'),
])
- ->orderBy($sort, $listOptions->getOrder());
+ ->orderBy($sort, $listOptions->getOrder())
+ ->whereHas('entity');
if ($nameFilter) {
$query->where('name', '=', $nameFilter);
class TagTest extends TestCase
{
- protected $defaultTagCount = 20;
+ protected int $defaultTagCount = 20;
/**
* Get an instance of a page that has many tags.
$resp->assertSee('Tags can be assigned via the page editor sidebar');
}
+ public function test_tag_index_does_not_include_tags_on_recycle_bin_items()
+ {
+ $page = $this->entities->page();
+ $page->tags()->create(['name' => 'DeleteRecord', 'value' => 'itemToDeleteTest']);
+
+ $resp = $this->asEditor()->get('/tags');
+ $resp->assertSee('DeleteRecord');
+ $resp = $this->asEditor()->get('/tags?name=DeleteRecord');
+ $resp->assertSee('itemToDeleteTest');
+
+ $this->entities->sendToRecycleBin($page);
+
+ $resp = $this->asEditor()->get('/tags');
+ $resp->assertDontSee('DeleteRecord');
+ $resp = $this->asEditor()->get('/tags?name=DeleteRecord');
+ $resp->assertDontSee('itemToDeleteTest');
+ }
+
public function test_tag_classes_visible_on_entities()
{
$this->asEditor();
return $draftPage;
}
+ /**
+ * Send an entity to the recycle bin.
+ */
+ public function sendToRecycleBin(Entity $entity)
+ {
+ $trash = app()->make(TrashCan::class);
+
+ if ($entity instanceof Page) {
+ $trash->softDestroyPage($entity);
+ } elseif ($entity instanceof Chapter) {
+ $trash->softDestroyChapter($entity);
+ } elseif ($entity instanceof Book) {
+ $trash->softDestroyBook($entity);
+ } elseif ($entity instanceof Bookshelf) {
+ $trash->softDestroyBookshelf($entity);
+ }
+
+ $entity->refresh();
+ if (is_null($entity->deleted_at)) {
+ throw new \Exception("Could not send entity type [{$entity->getMorphClass()}] to the recycle bin");
+ }
+ }
+
/**
* Fully destroy the given entity from the system, bypassing the recycle bin
* stage. Still runs through main app deletion logic.