| 
									
										
										
										
											2017-02-04 19:58:42 +08:00
										 |  |  | <?php namespace Tests; | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-05 22:20:59 +08:00
										 |  |  | use BookStack\Book; | 
					
						
							|  |  |  | use BookStack\Chapter; | 
					
						
							|  |  |  | use BookStack\Repos\EntityRepo; | 
					
						
							|  |  |  | use BookStack\Role; | 
					
						
							| 
									
										
										
										
											2017-02-05 22:37:50 +08:00
										 |  |  | use Illuminate\Foundation\Testing\DatabaseTransactions; | 
					
						
							| 
									
										
										
										
											2017-02-04 19:58:42 +08:00
										 |  |  | use Illuminate\Foundation\Testing\TestCase as BaseTestCase; | 
					
						
							| 
									
										
										
										
											2015-09-03 01:26:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-04 19:58:42 +08:00
										 |  |  | abstract class TestCase extends BaseTestCase | 
					
						
							| 
									
										
										
										
											2015-07-13 03:01:42 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-02-04 19:58:42 +08:00
										 |  |  |     use CreatesApplication; | 
					
						
							| 
									
										
										
										
											2017-02-05 22:37:50 +08:00
										 |  |  |     use DatabaseTransactions; | 
					
						
							| 
									
										
										
										
											2017-02-05 22:20:59 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     protected $admin; | 
					
						
							| 
									
										
										
										
											2017-02-25 20:29:01 +08:00
										 |  |  |     protected $editor; | 
					
						
							| 
									
										
										
										
											2017-02-05 22:20:59 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Set the current user context to be an admin. | 
					
						
							|  |  |  |      * @return $this | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function asAdmin() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return $this->actingAs($this->getAdmin()); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Get the current admin user. | 
					
						
							|  |  |  |      * @return mixed | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getAdmin() { | 
					
						
							|  |  |  |         if($this->admin === null) { | 
					
						
							|  |  |  |             $adminRole = Role::getSystemRole('admin'); | 
					
						
							|  |  |  |             $this->admin = $adminRole->users->first(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return $this->admin; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-25 20:29:01 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Set the current user context to be an editor. | 
					
						
							|  |  |  |      * @return $this | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function asEditor() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return $this->actingAs($this->getEditor()); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Get a editor user. | 
					
						
							|  |  |  |      * @return mixed | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getEditor() { | 
					
						
							|  |  |  |         if($this->editor === null) { | 
					
						
							|  |  |  |             $editorRole = Role::getRole('editor'); | 
					
						
							|  |  |  |             $this->editor = $editorRole->users->first(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return $this->editor; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-05 22:20:59 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Create and return a new book. | 
					
						
							|  |  |  |      * @param array $input | 
					
						
							|  |  |  |      * @return Book | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function newBook($input = ['name' => 'test book', 'description' => 'My new test book']) { | 
					
						
							|  |  |  |         return $this->app[EntityRepo::class]->createFromInput('book', $input, false); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Create and return a new test chapter | 
					
						
							|  |  |  |      * @param array $input | 
					
						
							|  |  |  |      * @param Book $book | 
					
						
							|  |  |  |      * @return Chapter | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function newChapter($input = ['name' => 'test chapter', 'description' => 'My new test chapter'], Book $book) { | 
					
						
							|  |  |  |         return $this->app[EntityRepo::class]->createFromInput('chapter', $input, $book); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-04-16 17:47:44 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Create and return a new test page | 
					
						
							|  |  |  |      * @param array $input | 
					
						
							|  |  |  |      * @return Chapter | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function newPage($input = ['name' => 'test page', 'html' => 'My new test page']) { | 
					
						
							|  |  |  |         $book = Book::first(); | 
					
						
							|  |  |  |         $entityRepo = $this->app[EntityRepo::class]; | 
					
						
							|  |  |  |         $draftPage = $entityRepo->getDraftPage($book); | 
					
						
							|  |  |  |         return $entityRepo->publishPageDraft($draftPage, $input); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-02-04 19:58:42 +08:00
										 |  |  | } |