X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/f21669c0c966f3dadeac2024a382b8a7cd831a8a..refs/pull/3918/head:/tests/TestCase.php diff --git a/tests/TestCase.php b/tests/TestCase.php index 594194168..d0dd7d772 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -7,15 +7,7 @@ use BookStack\Auth\Permissions\PermissionsRepo; use BookStack\Auth\Permissions\RolePermission; use BookStack\Auth\Role; use BookStack\Auth\User; -use BookStack\Entities\Models\Book; -use BookStack\Entities\Models\Bookshelf; -use BookStack\Entities\Models\Chapter; use BookStack\Entities\Models\Entity; -use BookStack\Entities\Models\Page; -use BookStack\Entities\Repos\BookRepo; -use BookStack\Entities\Repos\BookshelfRepo; -use BookStack\Entities\Repos\ChapterRepo; -use BookStack\Entities\Repos\PageRepo; use BookStack\Settings\SettingService; use BookStack\Uploads\HttpFetcher; use GuzzleHttp\Client; @@ -34,6 +26,8 @@ use Monolog\Handler\TestHandler; use Monolog\Logger; use Psr\Http\Client\ClientInterface; use Ssddanbrown\AssertHtml\TestsHtml; +use Tests\Helpers\EntityProvider; +use Tests\Helpers\TestServiceProvider; abstract class TestCase extends BaseTestCase { @@ -43,6 +37,13 @@ abstract class TestCase extends BaseTestCase protected ?User $admin = null; protected ?User $editor = null; + protected EntityProvider $entities; + + protected function setUp(): void + { + $this->entities = new EntityProvider(); + parent::setUp(); + } /** * The base URL to use while testing the application. @@ -135,51 +136,6 @@ abstract class TestCase extends BaseTestCase return User::query()->where('system_name', '=', null)->get()->last(); } - /** - * Regenerate the permission for an entity. - */ - protected function regenEntityPermissions(Entity $entity): void - { - $entity->rebuildPermissions(); - $entity->load('jointPermissions'); - } - - /** - * Create and return a new bookshelf. - */ - public function newShelf(array $input = ['name' => 'test shelf', 'description' => 'My new test shelf']): Bookshelf - { - return app(BookshelfRepo::class)->create($input, []); - } - - /** - * Create and return a new book. - */ - public function newBook(array $input = ['name' => 'test book', 'description' => 'My new test book']): Book - { - return app(BookRepo::class)->create($input); - } - - /** - * Create and return a new test chapter. - */ - public function newChapter(array $input, Book $book): Chapter - { - return app(ChapterRepo::class)->create($input, $book); - } - - /** - * Create and return a new test page. - */ - public function newPage(array $input = ['name' => 'test page', 'html' => 'My new test page']): Page - { - $book = Book::query()->first(); - $pageRepo = app(PageRepo::class); - $draftPage = $pageRepo->getNewDraftPage($book); - - return $pageRepo->publishDraft($draftPage, $input); - } - /** * Quickly sets an array of settings. */ @@ -191,31 +147,6 @@ abstract class TestCase extends BaseTestCase } } - /** - * Manually set some permissions on an entity. - */ - protected function setEntityRestrictions(Entity $entity, array $actions = [], array $roles = []): void - { - $entity->restricted = true; - $entity->permissions()->delete(); - - $permissions = []; - foreach ($actions as $action) { - foreach ($roles as $role) { - $permissions[] = [ - 'role_id' => $role->id, - 'action' => strtolower($action), - ]; - } - } - $entity->permissions()->createMany($permissions); - - $entity->save(); - $entity->load('permissions'); - $this->app->make(JointPermissionBuilder::class)->rebuildForEntity($entity); - $entity->load('jointPermissions'); - } - /** * Give the given user some permissions. */ @@ -262,27 +193,6 @@ abstract class TestCase extends BaseTestCase return $permissionRepo->saveNewRole($roleData); } - /** - * Create a group of entities that belong to a specific user. - * - * @return array{book: Book, chapter: Chapter, page: Page} - */ - protected function createEntityChainBelongingToUser(User $creatorUser, ?User $updaterUser = null): array - { - if (empty($updaterUser)) { - $updaterUser = $creatorUser; - } - - $userAttrs = ['created_by' => $creatorUser->id, 'owned_by' => $creatorUser->id, 'updated_by' => $updaterUser->id]; - $book = Book::factory()->create($userAttrs); - $chapter = Chapter::factory()->create(array_merge(['book_id' => $book->id], $userAttrs)); - $page = Page::factory()->create(array_merge(['book_id' => $book->id, 'chapter_id' => $chapter->id], $userAttrs)); - - $this->app->make(JointPermissionBuilder::class)->rebuildForEntity($book); - - return compact('book', 'chapter', 'page'); - } - /** * Mock the HttpFetcher service and return the given data on fetch. */ @@ -420,7 +330,7 @@ abstract class TestCase extends BaseTestCase protected function assertNotificationContains(\Illuminate\Testing\TestResponse $resp, string $text) { - return $this->withHtml($resp)->assertElementContains('[notification]', $text); + return $this->withHtml($resp)->assertElementContains('.notification[role="alert"]', $text); } /** @@ -460,17 +370,4 @@ abstract class TestCase extends BaseTestCase $this->assertDatabaseHas('activities', $detailsToCheck); } - - /** - * @return array{page: Page, chapter: Chapter, book: Book, bookshelf: Bookshelf} - */ - protected function getEachEntityType(): array - { - return [ - 'page' => Page::query()->first(), - 'chapter' => Chapter::query()->first(), - 'book' => Book::query()->first(), - 'bookshelf' => Bookshelf::query()->first(), - ]; - } }