2021-06-26 11:23:15 -04:00
< ? php
namespace Tests\Commands ;
2021-02-11 17:42:36 -05: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 ()
{
2022-09-29 17:11:16 -04:00
$shelf = $this -> entities -> shelf ();
2021-02-11 17:42:36 -05:00
$child = $shelf -> books () -> first ();
$editorRole = $this -> getEditor () -> roles () -> first ();
2022-10-10 11:58:26 -04:00
$this -> assertFalse ( boolval ( $child -> hasPermissions ()), 'Child book should not be restricted by default' );
2021-06-26 11:23:15 -04:00
$this -> assertTrue ( $child -> permissions () -> count () === 0 , 'Child book should have no permissions by default' );
2021-02-11 17:42:36 -05:00
2022-09-29 11:49:25 -04:00
$this -> entities -> setPermissions ( $shelf , [ 'view' , 'update' ], [ $editorRole ]);
2021-02-11 17:42:36 -05:00
$this -> artisan ( 'bookstack:copy-shelf-permissions' , [
'--slug' => $shelf -> slug ,
]);
$child = $shelf -> books () -> first ();
2022-10-10 11:58:26 -04:00
$this -> assertTrue ( boolval ( $child -> hasPermissions ()), 'Child book should now be restricted' );
2021-06-26 11:23:15 -04:00
$this -> assertTrue ( $child -> permissions () -> count () === 2 , 'Child book should have copied permissions' );
2021-02-11 17:42:36 -05: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 ()
{
2022-09-29 12:31:38 -04:00
$shelf = $this -> entities -> shelf ();
2021-02-11 17:42:36 -05:00
Bookshelf :: query () -> where ( 'id' , '!=' , $shelf -> id ) -> delete ();
$child = $shelf -> books () -> first ();
$editorRole = $this -> getEditor () -> roles () -> first ();
2022-10-10 11:58:26 -04:00
$this -> assertFalse ( boolval ( $child -> hasPermissions ()), 'Child book should not be restricted by default' );
2021-06-26 11:23:15 -04:00
$this -> assertTrue ( $child -> permissions () -> count () === 0 , 'Child book should have no permissions by default' );
2021-02-11 17:42:36 -05:00
2022-09-29 11:49:25 -04:00
$this -> entities -> setPermissions ( $shelf , [ 'view' , 'update' ], [ $editorRole ]);
2021-02-11 17:42:36 -05:00
$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 ();
2022-10-10 11:58:26 -04:00
$this -> assertTrue ( boolval ( $child -> hasPermissions ()), 'Child book should now be restricted' );
2021-06-26 11:23:15 -04:00
$this -> assertTrue ( $child -> permissions () -> count () === 2 , 'Child book should have copied permissions' );
2021-02-11 17:42:36 -05: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 11:23:15 -04:00
}