2021-06-26 23:23:15 +08:00
< ? php
namespace Tests\Commands ;
2021-02-12 06:42:36 +08:00
use BookStack\Entities\Models\Bookshelf ;
use Tests\TestCase ;
class CopyShelfPermissionsCommandTest extends TestCase
{
public function test_copy_shelf_permissions_command_shows_error_when_no_required_option_given ()
{
$this -> artisan ( 'bookstack:copy-shelf-permissions' )
-> expectsOutput ( 'Either a --slug or --all option must be provided.' )
-> assertExitCode ( 0 );
}
public function test_copy_shelf_permissions_command_using_slug ()
{
$shelf = Bookshelf :: first ();
$child = $shelf -> books () -> first ();
$editorRole = $this -> getEditor () -> roles () -> first ();
2021-06-26 23:23:15 +08:00
$this -> assertFalse ( boolval ( $child -> restricted ), 'Child book should not be restricted by default' );
$this -> assertTrue ( $child -> permissions () -> count () === 0 , 'Child book should have no permissions by default' );
2021-02-12 06:42:36 +08:00
$this -> setEntityRestrictions ( $shelf , [ 'view' , 'update' ], [ $editorRole ]);
$this -> artisan ( 'bookstack:copy-shelf-permissions' , [
'--slug' => $shelf -> slug ,
]);
$child = $shelf -> books () -> first ();
2021-06-26 23:23:15 +08:00
$this -> assertTrue ( boolval ( $child -> restricted ), 'Child book should now be restricted' );
$this -> assertTrue ( $child -> permissions () -> count () === 2 , 'Child book should have copied permissions' );
2021-02-12 06:42:36 +08:00
$this -> assertDatabaseHas ( 'entity_permissions' , [ 'restrictable_id' => $child -> id , 'action' => 'view' , 'role_id' => $editorRole -> id ]);
$this -> assertDatabaseHas ( 'entity_permissions' , [ 'restrictable_id' => $child -> id , 'action' => 'update' , 'role_id' => $editorRole -> id ]);
}
public function test_copy_shelf_permissions_command_using_all ()
{
$shelf = Bookshelf :: query () -> first ();
Bookshelf :: query () -> where ( 'id' , '!=' , $shelf -> id ) -> delete ();
$child = $shelf -> books () -> first ();
$editorRole = $this -> getEditor () -> roles () -> first ();
2021-06-26 23:23:15 +08:00
$this -> assertFalse ( boolval ( $child -> restricted ), 'Child book should not be restricted by default' );
$this -> assertTrue ( $child -> permissions () -> count () === 0 , 'Child book should have no permissions by default' );
2021-02-12 06:42:36 +08:00
$this -> setEntityRestrictions ( $shelf , [ 'view' , 'update' ], [ $editorRole ]);
$this -> artisan ( 'bookstack:copy-shelf-permissions --all' )
-> expectsQuestion ( 'Permission settings for all shelves will be cascaded. Books assigned to multiple shelves will receive only the permissions of it\'s last processed shelf. Are you sure you want to proceed?' , 'y' );
$child = $shelf -> books () -> first ();
2021-06-26 23:23:15 +08:00
$this -> assertTrue ( boolval ( $child -> restricted ), 'Child book should now be restricted' );
$this -> assertTrue ( $child -> permissions () -> count () === 2 , 'Child book should have copied permissions' );
2021-02-12 06:42:36 +08:00
$this -> assertDatabaseHas ( 'entity_permissions' , [ 'restrictable_id' => $child -> id , 'action' => 'view' , 'role_id' => $editorRole -> id ]);
$this -> assertDatabaseHas ( 'entity_permissions' , [ 'restrictable_id' => $child -> id , 'action' => 'update' , 'role_id' => $editorRole -> id ]);
}
2021-06-26 23:23:15 +08:00
}