| 
									
										
										
										
											2023-01-21 19:08:34 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Tests\Permissions\Scenarios; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use BookStack\Entities\Models\Entity; | 
					
						
							| 
									
										
										
										
											2023-05-18 00:56:55 +08:00
										 |  |  | use BookStack\Users\Models\User; | 
					
						
							| 
									
										
										
										
											2023-01-21 19:08:34 +08:00
										 |  |  | use Tests\TestCase; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Cases defined in dev/docs/permission-scenario-testing.md
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PermissionScenarioTestCase extends TestCase | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     protected function assertVisibleToUser(Entity $entity, User $user) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->actingAs($user); | 
					
						
							|  |  |  |         $funcView = userCan($entity->getMorphClass() . '-view', $entity); | 
					
						
							|  |  |  |         $queryView = $entity->newQuery()->scopes(['visible'])->find($entity->id) !== null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $id = $entity->getMorphClass() . ':' . $entity->id; | 
					
						
							|  |  |  |         $msg = "Item [{$id}] should be visible but was not found via "; | 
					
						
							|  |  |  |         $msg .= implode(' and ', array_filter([!$funcView ? 'userCan' : '', !$queryView ? 'query' : ''])); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         static::assertTrue($funcView && $queryView, $msg); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     protected function assertNotVisibleToUser(Entity $entity, User $user) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->actingAs($user); | 
					
						
							|  |  |  |         $funcView = userCan($entity->getMorphClass() . '-view', $entity); | 
					
						
							|  |  |  |         $queryView = $entity->newQuery()->scopes(['visible'])->find($entity->id) !== null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $id = $entity->getMorphClass() . ':' . $entity->id; | 
					
						
							|  |  |  |         $msg = "Item [{$id}] should not be visible but was found via "; | 
					
						
							|  |  |  |         $msg .= implode(' and ', array_filter([$funcView ? 'userCan' : '', $queryView ? 'query' : ''])); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         static::assertTrue(!$funcView && !$queryView, $msg); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |