3 use BookStack\Auth\Permissions\JointPermission;
4 use BookStack\Entities\Page;
5 use BookStack\Entities\Repos\EntityRepo;
6 use BookStack\Auth\User;
7 use BookStack\Entities\Repos\PageRepo;
9 class CommandsTest extends TestCase
12 public function test_clear_views_command()
15 $page = Page::first();
17 $this->get($page->getUrl());
19 $this->assertDatabaseHas('views', [
20 'user_id' => $this->getEditor()->id,
21 'viewable_id' => $page->id,
25 $exitCode = \Artisan::call('bookstack:clear-views');
26 $this->assertTrue($exitCode === 0, 'Command executed successfully');
28 $this->assertDatabaseMissing('views', [
29 'user_id' => $this->getEditor()->id
33 public function test_clear_activity_command()
36 $page = Page::first();
37 \Activity::add($page, 'page_update', $page->book->id);
39 $this->assertDatabaseHas('activities', [
40 'key' => 'page_update',
41 'entity_id' => $page->id,
42 'user_id' => $this->getEditor()->id
45 $exitCode = \Artisan::call('bookstack:clear-activity');
46 $this->assertTrue($exitCode === 0, 'Command executed successfully');
49 $this->assertDatabaseMissing('activities', [
50 'key' => 'page_update'
54 public function test_clear_revisions_command()
57 $pageRepo = app(PageRepo::class);
58 $page = Page::first();
59 $pageRepo->updatePage($page, $page->book_id, ['name' => 'updated page', 'html' => '<p>new content</p>', 'summary' => 'page revision testing']);
60 $pageRepo->updatePageDraft($page, ['name' => 'updated page', 'html' => '<p>new content in draft</p>', 'summary' => 'page revision testing']);
62 $this->assertDatabaseHas('page_revisions', [
63 'page_id' => $page->id,
66 $this->assertDatabaseHas('page_revisions', [
67 'page_id' => $page->id,
68 'type' => 'update_draft'
71 $exitCode = \Artisan::call('bookstack:clear-revisions');
72 $this->assertTrue($exitCode === 0, 'Command executed successfully');
74 $this->assertDatabaseMissing('page_revisions', [
75 'page_id' => $page->id,
78 $this->assertDatabaseHas('page_revisions', [
79 'page_id' => $page->id,
80 'type' => 'update_draft'
83 $exitCode = \Artisan::call('bookstack:clear-revisions', ['--all' => true]);
84 $this->assertTrue($exitCode === 0, 'Command executed successfully');
86 $this->assertDatabaseMissing('page_revisions', [
87 'page_id' => $page->id,
88 'type' => 'update_draft'
92 public function test_regen_permissions_command()
94 JointPermission::query()->truncate();
95 $page = Page::first();
97 $this->assertDatabaseMissing('joint_permissions', ['entity_id' => $page->id]);
99 $exitCode = \Artisan::call('bookstack:regenerate-permissions');
100 $this->assertTrue($exitCode === 0, 'Command executed successfully');
102 $this->assertDatabaseHas('joint_permissions', ['entity_id' => $page->id]);
105 public function test_add_admin_command()
107 $exitCode = \Artisan::call('bookstack:create-admin', [
108 '--email' => 'admintest@example.com',
109 '--name' => 'Admin Test',
110 '--password' => 'testing-4',
112 $this->assertTrue($exitCode === 0, 'Command executed successfully');
114 $this->assertDatabaseHas('users', [
115 'email' => 'admintest@example.com',
116 'name' => 'Admin Test'
119 $this->assertTrue(User::where('email', '=', 'admintest@example.com')->first()->hasSystemRole('admin'), 'User has admin role as expected');
120 $this->assertTrue(\Auth::attempt(['email' => 'admintest@example.com', 'password' => 'testing-4']), 'Password stored as expected');