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