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' ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-11-08 19:22:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  test_command_updates_page_revisions () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $page  =  $this -> entities -> page (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  ( $i  =  0 ;  $i  <  2 ;  $i ++ )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> entities -> updatePage ( $page ,  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'name'  =>  $page -> name , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'markdown'  =>  " [A link  { $i } ](https://example.com/donkey/cat) " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> runUpdate ( 'https://example.com' ,  'https://cats.example.com' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        setting () -> flushCache (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> assertDatabaseHas ( 'page_revisions' ,  [ 
							 
						 
					
						
							
								
									
										
										
										
											2024-11-08 19:35:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            'page_id'  =>  $page -> id , 
							 
						 
					
						
							
								
									
										
										
										
											2024-11-08 19:22:30 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            'markdown'  =>  '[A link 1](https://cats.example.com/donkey/cat)' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            'html'  =>  '<p id="bkmrk-a-link-1"><a href="https://cats.example.com/donkey/cat">A link 1</a></p>'  .  " \n " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-02-12 07:14:37 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    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 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}