| 
									
										
										
										
											2022-03-27 00:44:34 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-26 19:24:49 +08:00
										 |  |  | namespace Tests\Activity; | 
					
						
							| 
									
										
										
										
											2022-03-27 00:44:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-18 00:56:55 +08:00
										 |  |  | use BookStack\Activity\ActivityType; | 
					
						
							|  |  |  | use BookStack\Activity\Models\Webhook; | 
					
						
							|  |  |  | use BookStack\Activity\Tools\WebhookFormatter; | 
					
						
							| 
									
										
										
										
											2022-03-27 00:44:34 +08:00
										 |  |  | use Illuminate\Support\Arr; | 
					
						
							|  |  |  | use Tests\TestCase; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class WebhookFormatTesting extends TestCase | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     public function test_entity_events_show_related_user_info() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $events = [ | 
					
						
							| 
									
										
										
										
											2022-09-30 05:11:16 +08:00
										 |  |  |             ActivityType::BOOK_UPDATE    => $this->entities->book(), | 
					
						
							|  |  |  |             ActivityType::CHAPTER_CREATE => $this->entities->chapter(), | 
					
						
							|  |  |  |             ActivityType::PAGE_MOVE      => $this->entities->page(), | 
					
						
							| 
									
										
										
										
											2022-03-27 00:44:34 +08:00
										 |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         foreach ($events as $event => $entity) { | 
					
						
							|  |  |  |             $data = $this->getWebhookData($event, $entity); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $this->assertEquals($entity->createdBy->name, Arr::get($data, 'related_item.created_by.name')); | 
					
						
							|  |  |  |             $this->assertEquals($entity->updatedBy->id, Arr::get($data, 'related_item.updated_by.id')); | 
					
						
							|  |  |  |             $this->assertEquals($entity->ownedBy->slug, Arr::get($data, 'related_item.owned_by.slug')); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function test_page_create_and_update_events_show_revision_info() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-09-30 00:31:38 +08:00
										 |  |  |         $page = $this->entities->page(); | 
					
						
							| 
									
										
										
										
											2022-03-27 00:44:34 +08:00
										 |  |  |         $this->asEditor()->put($page->getUrl(), ['name' => 'Updated page', 'html' => 'new page html', 'summary' => 'Update a']); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $data = $this->getWebhookData(ActivityType::PAGE_UPDATE, $page); | 
					
						
							|  |  |  |         $this->assertEquals($page->currentRevision->id, Arr::get($data, 'related_item.current_revision.id')); | 
					
						
							|  |  |  |         $this->assertEquals($page->currentRevision->type, Arr::get($data, 'related_item.current_revision.type')); | 
					
						
							|  |  |  |         $this->assertEquals('Update a', Arr::get($data, 'related_item.current_revision.summary')); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     protected function getWebhookData(string $event, $detail): array | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $webhook = Webhook::factory()->make(); | 
					
						
							| 
									
										
										
										
											2023-01-21 19:08:34 +08:00
										 |  |  |         $user = $this->users->editor(); | 
					
						
							| 
									
										
										
										
											2022-03-27 00:44:34 +08:00
										 |  |  |         $formatter = WebhookFormatter::getDefault($event, $webhook, $detail, $user, time()); | 
					
						
							| 
									
										
										
										
											2022-03-27 04:38:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-27 00:44:34 +08:00
										 |  |  |         return $formatter->format(); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-03-27 04:38:03 +08:00
										 |  |  | } |