| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-03 01:26:33 +08:00
										 |  |  | use Illuminate\Foundation\Testing\DatabaseTransactions; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  | class TestCase extends Illuminate\Foundation\Testing\TestCase | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-09-03 01:26:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     use DatabaseTransactions; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * The base URL to use while testing the application. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @var string | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected $baseUrl = 'http://localhost'; | 
					
						
							| 
									
										
										
										
											2015-09-03 01:26:33 +08:00
										 |  |  |     private $admin; | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Creates the application. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return \Illuminate\Foundation\Application | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function createApplication() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $app = require __DIR__.'/../bootstrap/app.php'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $app; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-09-03 01:26:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public function asAdmin() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if($this->admin === null) { | 
					
						
							| 
									
										
										
										
											2015-09-11 02:31:09 +08:00
										 |  |  |             $this->admin = \BookStack\User::find(1); | 
					
						
							| 
									
										
										
										
											2015-09-03 01:26:33 +08:00
										 |  |  |         } | 
					
						
							|  |  |  |         return $this->actingAs($this->admin); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-09-23 04:07:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Quickly sets an array of settings. | 
					
						
							|  |  |  |      * @param $settingsArray | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected function setSettings($settingsArray) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $settings = app('BookStack\Services\SettingService'); | 
					
						
							|  |  |  |         foreach ($settingsArray as $key => $value) { | 
					
						
							|  |  |  |             $settings->put($key, $value); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-12-03 04:22:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-16 03:27:36 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Create a group of entities that belong to a specific user. | 
					
						
							|  |  |  |      * @param $creatorUser | 
					
						
							|  |  |  |      * @param $updaterUser | 
					
						
							|  |  |  |      * @return array | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected function createEntityChainBelongingToUser($creatorUser, $updaterUser = false) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ($updaterUser === false) $updaterUser = $creatorUser; | 
					
						
							|  |  |  |         $book = factory(BookStack\Book::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id]); | 
					
						
							|  |  |  |         $chapter = factory(BookStack\Chapter::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id]); | 
					
						
							|  |  |  |         $page = factory(BookStack\Page::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id, 'book_id' => $book->id]); | 
					
						
							|  |  |  |         $book->chapters()->saveMany([$chapter]); | 
					
						
							|  |  |  |         $chapter->pages()->saveMany([$page]); | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |             'book' => $book, | 
					
						
							|  |  |  |             'chapter' => $chapter, | 
					
						
							|  |  |  |             'page' => $page | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Quick way to create a new user | 
					
						
							|  |  |  |      * @param array $attributes | 
					
						
							|  |  |  |      * @return mixed | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected function getNewUser($attributes = []) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $user = factory(\BookStack\User::class)->create($attributes); | 
					
						
							|  |  |  |         $userRepo = app('BookStack\Repos\UserRepo'); | 
					
						
							|  |  |  |         $userRepo->attachDefaultRole($user); | 
					
						
							|  |  |  |         return $user; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-03 04:22:41 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Assert that a given string is seen inside an element. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param  bool|string|null $element | 
					
						
							|  |  |  |      * @param  integer          $position | 
					
						
							|  |  |  |      * @param  string           $text | 
					
						
							|  |  |  |      * @param  bool             $negate | 
					
						
							|  |  |  |      * @return $this | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected function seeInNthElement($element, $position, $text, $negate = false) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $method = $negate ? 'assertNotRegExp' : 'assertRegExp'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $rawPattern = preg_quote($text, '/'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $escapedPattern = preg_quote(e($text), '/'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $content = $this->crawler->filter($element)->eq($position)->html(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $pattern = $rawPattern == $escapedPattern | 
					
						
							|  |  |  |             ? $rawPattern : "({$rawPattern}|{$escapedPattern})"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->$method("/$pattern/i", $content); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $this; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  | } |