2021-06-26 23:23:15 +08:00
< ? php
namespace Tests\Commands ;
2021-02-12 06:42:36 +08:00
use BookStack\Entities\Models\Page ;
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
{
$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' )
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
]);
}
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' );
}
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
$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' );
$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
}