2021-06-26 23:23:15 +08:00
< ? php
namespace Tests\Commands ;
2021-02-12 06:42:36 +08:00
2023-12-19 02:31:16 +08:00
use BookStack\Entities\Models\Entity ;
2023-05-07 06:05:25 +08:00
use Illuminate\Support\Facades\Artisan ;
2021-02-12 06:42:36 +08:00
use Symfony\Component\Console\Exception\RuntimeException ;
use Tests\TestCase ;
class UpdateUrlCommandTest extends TestCase
{
2021-02-12 07:14:37 +08:00
public function test_command_updates_page_content ()
2021-02-12 06:42:36 +08:00
{
2022-09-30 00:31:38 +08:00
$page = $this -> entities -> page ();
2021-02-12 06:42:36 +08:00
$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' )
2021-06-26 23:23:15 +08:00
-> expectsQuestion ( 'This operation could cause issues if used incorrectly. Have you made a backup of your existing database?' , 'y' );
2021-02-12 06:42:36 +08:00
$this -> assertDatabaseHas ( 'pages' , [
2021-06-26 23:23:15 +08:00
'id' => $page -> id ,
'html' => '<a href="https://cats.example.com/donkeys"></a>' ,
2021-02-12 06:42:36 +08:00
]);
}
2023-12-19 02:31:16 +08:00
public function test_command_updates_description_html ()
{
/** @var Entity[] $models */
$models = [ $this -> entities -> book (), $this -> entities -> chapter (), $this -> entities -> shelf ()];
foreach ( $models as $model ) {
$model -> description_html = '<a href="https://example.com/donkeys"></a>' ;
$model -> 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' );
foreach ( $models as $model ) {
$this -> assertDatabaseHas ( $model -> getTable (), [
'id' => $model -> id ,
'description_html' => '<a href="https://cats.example.com/donkeys"></a>' ,
]);
}
}
2021-02-12 07:14:37 +08:00
public function test_command_requires_valid_url ()
2021-02-12 06:42:36 +08:00
{
2021-06-26 23:23:15 +08:00
$badUrlMessage = 'The given urls are expected to be full urls starting with http:// or https://' ;
2021-02-12 06:42:36 +08:00
$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' );
}
2023-05-07 06:05:25 +08:00
public function test_command_force_option_skips_prompt ()
{
$this -> artisan ( 'bookstack:update-url --force https://cats.example.com/donkey https://cats.example.com/monkey' )
-> expectsOutputToContain ( 'URL update procedure complete' )
-> assertSuccessful ();
}
2021-02-12 07:14:37 +08:00
public function test_command_updates_settings ()
2021-02-12 06:42:36 +08:00
{
setting () -> put ( 'my-custom-item' , 'https://example.com/donkey/cat' );
2021-02-12 07:14:37 +08:00
$this -> runUpdate ( 'https://example.com' , 'https://cats.example.com' );
2021-02-12 06:42:36 +08:00
2023-02-24 06:14:47 +08:00
setting () -> flushCache ();
2021-02-12 06:42:36 +08:00
$settingVal = setting ( 'my-custom-item' );
$this -> assertEquals ( 'https://cats.example.com/donkey/cat' , $settingVal );
}
2021-02-12 07:14:37 +08: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' );
2023-02-24 06:14:47 +08:00
setting () -> flushCache ();
2021-02-12 07:14:37 +08:00
$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' )
2021-06-26 23:23:15 +08:00
-> expectsQuestion ( 'This operation could cause issues if used incorrectly. Have you made a backup of your existing database?' , 'y' );
2021-02-12 07:14:37 +08:00
}
2021-06-26 23:23:15 +08:00
}