createObject(Person::class, [ 'name' => 'Khalo', 'first_name' => 'Frida', 'org_id' => $this->getTestOrgId(), ]); $this->oContact = $oContact; /** @var Trigger $oTrigger */ $oTrigger = $this->createObject(TriggerOnObjectMention::class, [ 'description' => 'Person mentioned on Ticket', 'target_class' => 'Ticket', ]); $this->oTrigger = $oTrigger; /** @var Action $oAction */ $oAction = $this->createObject(ActionNewsroom::class, [ 'name' => 'Notification to persons mentioned in logs', 'status' => 'enabled', 'title' => '$this->friendlyname$', 'message' => 'You have been mentioned by $current_contact->friendlyname$', 'recipients' => 'SELECT Person WHERE id = :mentioned->id', ]); $this->oAction = $oAction; /** @var Ticket $oTicket */ $oTicket = $this->createObject(UserRequest::class, [ 'org_id' => $this->getTestOrgId(), 'title' => 'Houston, got a problem', 'description' => 'Test description', ]); $this->oTicket = $oTicket; } protected function tearDown(): void { parent::tearDown(); $this->oEvent->DBDelete(); } public function testDownloadIsTriggeredWhenDownloaderIsNotificationRecipient(): void { $this->oEvent = EventNotificationNewsroomService::MakeEventFromAction( oAction: $this->oAction, iContactId: $this->oContact->GetKey(), iTriggerId: $this->oTrigger->GetKey(), sMessage: 'Test message', sTitle: 'Test event', sUrl: 'https://localhost/itop/pages/UI.php?operation=details&class=UserRequest&id=1', iObjectId: $this->oTicket->GetKey(), sObjectClass: UserRequest::class, ); $this->oEvent->DBInsert(); $oPage = new CaptureWebPage(); $bDownloadIcon = EventNotificationNewsroomService::DownloadIcon($oPage, $this->oEvent->GetKey(), $this->oContact->GetKey()); $sHtml = $oPage->GetHtml(); $this->assertTrue($bDownloadIcon); $this->assertNotEquals('', $sHtml); } public function testDownloadIsNotTriggeredWhenDownloaderIsNotNotificationRecipient(): void { $oContact = $this->createObject(Person::class, [ 'name' => 'Doe', 'first_name' => 'John', 'org_id' => $this->getTestOrgId(), ]); $this->oEvent = EventNotificationNewsroomService::MakeEventFromAction( oAction: $this->oAction, iContactId: $oContact->GetKey(), iTriggerId: $this->oTrigger->GetKey(), sMessage: 'Test message', sTitle: 'Test event', sUrl: 'https://localhost/itop/pages/UI.php?operation=details&class=UserRequest&id=1', iObjectId: $this->oTicket->GetKey(), sObjectClass: UserRequest::class, ); $this->oEvent->DBInsert(); $oPage = new CaptureWebPage(); $bDownloadIcon = EventNotificationNewsroomService::DownloadIcon($oPage, $this->oEvent->GetKey(), $this->oContact->GetKey()); $sHtml = $oPage->GetHtml(); $this->assertFalse($bDownloadIcon); $this->assertEquals('', $sHtml); } public function testDownloadIconIsTriggeredEvenWhenUserCannotReadIconAttribute(): void { // Create a user with Support Agent Profile $sLogin = uniqid('EventNotificationNewsroomServiceTest'); $oUser = $this->CreateContactlessUser($sLogin, self::$aURP_Profiles['Support Agent'], '1234@Abcdefg'); $oUser->Set('contactid', $this->oContact->GetKey()); UserRights::Login($sLogin); $this->oEvent = EventNotificationNewsroomService::MakeEventFromAction( oAction: $this->oAction, iContactId: $this->oContact->GetKey(), iTriggerId: $this->oTrigger->GetKey(), sMessage: 'Test message', sTitle: 'Test event', sUrl: 'https://localhost/itop/pages/UI.php?operation=details&class=UserRequest&id=1', iObjectId: $this->oTicket->GetKey(), sObjectClass: UserRequest::class, ); $this->oEvent->DBInsert(); $iURValue = UserRights::IsActionAllowedOnAttribute(EventNotificationNewsroom::class, 'icon', UR_ACTION_READ, $this->oEvent, $oUser); $this->assertEquals(UR_ALLOWED_NO, $iURValue); $oPage = new CaptureWebPage(); $bDownloadIcon = EventNotificationNewsroomService::DownloadIcon($oPage, $this->oEvent->GetKey(), $this->oContact->GetKey()); $sHtml = $oPage->GetHtml(); $this->assertTrue($bDownloadIcon); $this->assertNotEquals('', $sHtml); $this->assertStringNotContainsString('the object does not exist or you are not allowed to view it', $sHtml); } }