2021-02-11 17:42:36 -05:00
< ? php namespace Tests\Commands ;
use BookStack\Entities\Models\Page ;
use Symfony\Component\Console\Exception\RuntimeException ;
use Tests\TestCase ;
class UpdateUrlCommandTest extends TestCase
{
2021-02-11 18:14:37 -05:00
public function test_command_updates_page_content ()
2021-02-11 17:42:36 -05:00
{
$page = Page :: query () -> first ();
$page -> html = '<a href="https://example.com/donkeys"></a>' ;
$page -> save ();
$this -> artisan ( 'bookstack:update-url https://example.com https://cats.example.com' )
-> expectsQuestion ( " This will search for \" https://example.com \" in your database and replace it with \" https://cats.example.com \" . \n Are you sure you want to proceed? " , 'y' )
-> expectsQuestion ( " This operation could cause issues if used incorrectly. Have you made a backup of your existing database? " , 'y' );
$this -> assertDatabaseHas ( 'pages' , [
'id' => $page -> id ,
'html' => '<a href="https://cats.example.com/donkeys"></a>'
]);
}
2021-02-11 18:14:37 -05:00
public function test_command_requires_valid_url ()
2021-02-11 17:42:36 -05:00
{
$badUrlMessage = " The given urls are expected to be full urls starting with http:// or https:// " ;
$this -> artisan ( 'bookstack:update-url //example.com https://cats.example.com' ) -> expectsOutput ( $badUrlMessage );
$this -> artisan ( 'bookstack:update-url https://example.com htts://cats.example.com' ) -> expectsOutput ( $badUrlMessage );
$this -> artisan ( 'bookstack:update-url example.com https://cats.example.com' ) -> expectsOutput ( $badUrlMessage );
$this -> expectException ( RuntimeException :: class );
$this -> artisan ( 'bookstack:update-url https://cats.example.com' );
}
2021-02-11 18:14:37 -05:00
public function test_command_updates_settings ()
2021-02-11 17:42:36 -05:00
{
setting () -> put ( 'my-custom-item' , 'https://example.com/donkey/cat' );
2021-02-11 18:14:37 -05:00
$this -> runUpdate ( 'https://example.com' , 'https://cats.example.com' );
2021-02-11 17:42:36 -05:00
$settingVal = setting ( 'my-custom-item' );
$this -> assertEquals ( 'https://cats.example.com/donkey/cat' , $settingVal );
}
2021-02-11 18:14:37 -05:00
public function test_command_updates_array_settings ()
{
setting () -> put ( 'my-custom-array-item' , [[ 'name' => 'a https://example.com/donkey/cat url' ]]);
$this -> runUpdate ( 'https://example.com' , 'https://cats.example.com' );
$settingVal = setting ( 'my-custom-array-item' );
$this -> assertEquals ( 'a https://cats.example.com/donkey/cat url' , $settingVal [ 0 ][ 'name' ]);
}
protected function runUpdate ( string $oldUrl , string $newUrl )
{
$this -> artisan ( " bookstack:update-url { $oldUrl } { $newUrl } " )
-> expectsQuestion ( " This will search for \" { $oldUrl } \" in your database and replace it with \" { $newUrl } \" . \n Are you sure you want to proceed? " , 'y' )
-> expectsQuestion ( " This operation could cause issues if used incorrectly. Have you made a backup of your existing database? " , 'y' );
}
2021-02-11 17:42:36 -05:00
}