From 1acaacf85daa26d424cf71669b3c31f37262cd39 Mon Sep 17 00:00:00 2001 From: Jose Andres Tejerina Date: Mon, 9 Feb 2026 18:01:14 -0300 Subject: [PATCH 1/2] feat: add new formatters for sponsors Signed-off-by: Jose Andres Tejerina [C --- .../SponsorAdAuditLogFormatter.php | 71 ++++++++++++ .../SponsorBadgeScanAuditLogFormatter.php | 76 +++++++++++++ ...anExtraQuestionAnswerAuditLogFormatter.php | 74 ++++++++++++ .../SponsorMaterialAuditLogFormatter.php | 78 +++++++++++++ .../SponsorSocialNetworkAuditLogFormatter.php | 74 ++++++++++++ ...istrationDiscountCodeAuditLogFormatter.php | 75 ++++++++++++ ...RegistrationPromoCodeAuditLogFormatter.php | 75 ++++++++++++ .../SponsorUserInfoGrantAuditLogFormatter.php | 73 ++++++++++++ ...nsorExtraQuestionTypeAuditLogFormatter.php | 75 ++++++++++++ .../Formatters/SponsorAdFormatterTest.php | 82 ++++++++++++++ ...geScanExtraQuestionAnswerFormatterTest.php | 82 ++++++++++++++ .../SponsorBadgeScanFormatterTest.php | 86 ++++++++++++++ .../SponsorMaterialFormatterTest.php | 83 ++++++++++++++ .../SponsorSocialNetworkFormatterTest.php | 81 +++++++++++++ ...tRegistrationDiscountCodeFormatterTest.php | 104 +++++++++++++++++ ...mmitRegistrationPromoCodeFormatterTest.php | 100 ++++++++++++++++ .../SponsorUserInfoGrantFormatterTest.php | 81 +++++++++++++ ...ExtraQuestionTypeAuditLogFormatterTest.php | 107 ++++++++++++++++++ 18 files changed, 1477 insertions(+) create mode 100644 app/Audit/ConcreteFormatters/SponsorAdAuditLogFormatter.php create mode 100644 app/Audit/ConcreteFormatters/SponsorBadgeScanAuditLogFormatter.php create mode 100644 app/Audit/ConcreteFormatters/SponsorBadgeScanExtraQuestionAnswerAuditLogFormatter.php create mode 100644 app/Audit/ConcreteFormatters/SponsorMaterialAuditLogFormatter.php create mode 100644 app/Audit/ConcreteFormatters/SponsorSocialNetworkAuditLogFormatter.php create mode 100644 app/Audit/ConcreteFormatters/SponsorSummitRegistrationDiscountCodeAuditLogFormatter.php create mode 100644 app/Audit/ConcreteFormatters/SponsorSummitRegistrationPromoCodeAuditLogFormatter.php create mode 100644 app/Audit/ConcreteFormatters/SponsorUserInfoGrantAuditLogFormatter.php create mode 100644 app/Audit/ConcreteFormatters/SummitSponsorExtraQuestionTypeAuditLogFormatter.php create mode 100644 tests/OpenTelemetry/Formatters/SponsorAdFormatterTest.php create mode 100644 tests/OpenTelemetry/Formatters/SponsorBadgeScanExtraQuestionAnswerFormatterTest.php create mode 100644 tests/OpenTelemetry/Formatters/SponsorBadgeScanFormatterTest.php create mode 100644 tests/OpenTelemetry/Formatters/SponsorMaterialFormatterTest.php create mode 100644 tests/OpenTelemetry/Formatters/SponsorSocialNetworkFormatterTest.php create mode 100644 tests/OpenTelemetry/Formatters/SponsorSummitRegistrationDiscountCodeFormatterTest.php create mode 100644 tests/OpenTelemetry/Formatters/SponsorSummitRegistrationPromoCodeFormatterTest.php create mode 100644 tests/OpenTelemetry/Formatters/SponsorUserInfoGrantFormatterTest.php create mode 100644 tests/OpenTelemetry/Formatters/SummitSponsorExtraQuestionTypeAuditLogFormatterTest.php diff --git a/app/Audit/ConcreteFormatters/SponsorAdAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorAdAuditLogFormatter.php new file mode 100644 index 000000000..d71deb701 --- /dev/null +++ b/app/Audit/ConcreteFormatters/SponsorAdAuditLogFormatter.php @@ -0,0 +1,71 @@ +getText() ?? 'No Text'; + $sponsor = $subject->getSponsor(); + $sponsor_id = $sponsor ? ($sponsor->getId() ?? 'unknown') : 'unknown'; + $sponsor_company = $sponsor && $sponsor->getCompany() ? ($sponsor->getCompany()->getName() ?? 'Unknown Company') : 'Unknown Company'; + + switch ($this->event_type) { + case IAuditStrategy::EVENT_ENTITY_CREATION: + return sprintf( + "Sponsor Ad '%s' for Sponsor %s ('%s') created by user %s", + $text, + $sponsor_id, + $sponsor_company, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_UPDATE: + $details = $this->buildChangeDetails($change_set); + return sprintf( + "Sponsor Ad '%s' for Sponsor %s updated: %s by user %s", + $text, + $sponsor_id, + $details, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_DELETION: + return sprintf( + "Sponsor Ad '%s' for Sponsor %s deleted by user %s", + $text, + $sponsor_id, + $this->getUserInfo() + ); + } + } catch (\Exception $ex) { + Log::warning("SponsorAdAuditLogFormatter error: " . $ex->getMessage()); + } + + return null; + } +} diff --git a/app/Audit/ConcreteFormatters/SponsorBadgeScanAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorBadgeScanAuditLogFormatter.php new file mode 100644 index 000000000..73bb47c8e --- /dev/null +++ b/app/Audit/ConcreteFormatters/SponsorBadgeScanAuditLogFormatter.php @@ -0,0 +1,76 @@ +getId() ?? 'unknown'; + $scan_date = $subject->getScanDate(); + $scan_date_str = $scan_date ? $scan_date->format('Y-m-d H:i:s') : 'Unknown Date'; + $user = $subject->getUser(); + $user_email = $user ? ($user->getEmail() ?? 'Unknown User') : 'Unknown User'; + $sponsor = $subject->getSponsor(); + $sponsor_id = $sponsor ? ($sponsor->getId() ?? 'unknown') : 'unknown'; + + switch ($this->event_type) { + case IAuditStrategy::EVENT_ENTITY_CREATION: + return sprintf( + "Sponsor Badge Scan (ID: %s) for user '%s' scanned on '%s' by Sponsor %s created by user %s", + $id, + $user_email, + $scan_date_str, + $sponsor_id, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_UPDATE: + $details = $this->buildChangeDetails($change_set); + return sprintf( + "Sponsor Badge Scan (ID: %s) for Sponsor %s updated: %s by user %s", + $id, + $sponsor_id, + $details, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_DELETION: + return sprintf( + "Sponsor Badge Scan (ID: %s) for user '%s' by Sponsor %s deleted by user %s", + $id, + $user_email, + $sponsor_id, + $this->getUserInfo() + ); + } + } catch (\Exception $ex) { + Log::warning("SponsorBadgeScanAuditLogFormatter error: " . $ex->getMessage()); + } + + return null; + } +} diff --git a/app/Audit/ConcreteFormatters/SponsorBadgeScanExtraQuestionAnswerAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorBadgeScanExtraQuestionAnswerAuditLogFormatter.php new file mode 100644 index 000000000..10f9de76c --- /dev/null +++ b/app/Audit/ConcreteFormatters/SponsorBadgeScanExtraQuestionAnswerAuditLogFormatter.php @@ -0,0 +1,74 @@ +getId() ?? 'unknown'; + $value = $subject->getValue() ?? 'No Value'; + $question = $subject->getQuestion(); + $question_label = $question ? ($question->getLabel() ?? 'Unknown Question') : 'Unknown Question'; + $badge_scan = $subject->getBadgeScan(); + $sponsor_id = $badge_scan && $badge_scan->getSponsor() ? ($badge_scan->getSponsor()->getId() ?? 'unknown') : 'unknown'; + + switch ($this->event_type) { + case IAuditStrategy::EVENT_ENTITY_CREATION: + return sprintf( + "Sponsor Badge Scan Extra Question Answer (ID: %s) for question '%s' with value '%s' created for Sponsor %s by user %s", + $id, + $question_label, + $value, + $sponsor_id, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_UPDATE: + $details = $this->buildChangeDetails($change_set); + return sprintf( + "Sponsor Badge Scan Extra Question Answer (ID: %s) for question '%s' updated: %s by user %s", + $id, + $question_label, + $details, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_DELETION: + return sprintf( + "Sponsor Badge Scan Extra Question Answer (ID: %s) for question '%s' deleted by user %s", + $id, + $question_label, + $this->getUserInfo() + ); + } + } catch (\Exception $ex) { + Log::warning("SponsorBadgeScanExtraQuestionAnswerAuditLogFormatter error: " . $ex->getMessage()); + } + + return null; + } +} diff --git a/app/Audit/ConcreteFormatters/SponsorMaterialAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorMaterialAuditLogFormatter.php new file mode 100644 index 000000000..e1032b48d --- /dev/null +++ b/app/Audit/ConcreteFormatters/SponsorMaterialAuditLogFormatter.php @@ -0,0 +1,78 @@ +getId() ?? 'unknown'; + $name = $subject->getName() ?? 'No Name'; + $type = $subject->getType() ?? 'Unknown Type'; + $order = $subject->getOrder() ? (string)$subject->getOrder() : 'unknown'; + $sponsor = $subject->getSponsor(); + $sponsor_id = $sponsor ? ($sponsor->getId() ?? 'unknown') : 'unknown'; + + switch ($this->event_type) { + case IAuditStrategy::EVENT_ENTITY_CREATION: + return sprintf( + "Sponsor Material (ID: %s) '%s' type '%s' (Order: %s) for Sponsor %s created by user %s", + $id, + $name, + $type, + $order, + $sponsor_id, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_UPDATE: + $details = $this->buildChangeDetails($change_set); + return sprintf( + "Sponsor Material (ID: %s) '%s' for Sponsor %s updated: %s by user %s", + $id, + $name, + $sponsor_id, + $details, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_DELETION: + return sprintf( + "Sponsor Material (ID: %s) '%s' type '%s' for Sponsor %s deleted by user %s", + $id, + $name, + $type, + $sponsor_id, + $this->getUserInfo() + ); + } + } catch (\Exception $ex) { + Log::warning("SponsorMaterialAuditLogFormatter error: " . $ex->getMessage()); + } + + return null; + } +} diff --git a/app/Audit/ConcreteFormatters/SponsorSocialNetworkAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorSocialNetworkAuditLogFormatter.php new file mode 100644 index 000000000..8410cd7b3 --- /dev/null +++ b/app/Audit/ConcreteFormatters/SponsorSocialNetworkAuditLogFormatter.php @@ -0,0 +1,74 @@ +getId() ?? 'unknown'; + $link = $subject->getLink() ?? 'No Link'; + $icon = $subject->getIconCSSClass() ?? 'No Icon'; + $sponsor = $subject->getSponsor(); + $sponsor_id = $sponsor ? ($sponsor->getId() ?? 'unknown') : 'unknown'; + + switch ($this->event_type) { + case IAuditStrategy::EVENT_ENTITY_CREATION: + return sprintf( + "Sponsor Social Network (ID: %s) '%s' with icon '%s' for Sponsor %s created by user %s", + $id, + $link, + $icon, + $sponsor_id, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_UPDATE: + $details = $this->buildChangeDetails($change_set); + return sprintf( + "Sponsor Social Network (ID: %s) for Sponsor %s updated: %s by user %s", + $id, + $sponsor_id, + $details, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_DELETION: + return sprintf( + "Sponsor Social Network (ID: %s) '%s' for Sponsor %s deleted by user %s", + $id, + $link, + $sponsor_id, + $this->getUserInfo() + ); + } + } catch (\Exception $ex) { + Log::warning("SponsorSocialNetworkAuditLogFormatter error: " . $ex->getMessage()); + } + + return null; + } +} diff --git a/app/Audit/ConcreteFormatters/SponsorSummitRegistrationDiscountCodeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorSummitRegistrationDiscountCodeAuditLogFormatter.php new file mode 100644 index 000000000..54bb15884 --- /dev/null +++ b/app/Audit/ConcreteFormatters/SponsorSummitRegistrationDiscountCodeAuditLogFormatter.php @@ -0,0 +1,75 @@ +getId() ?? 'unknown'; + $code = $subject->getCode() ?? 'Unknown Code'; + $summit = $subject->getSummit(); + $summit_name = $summit ? ($summit->getName() ?? 'Unknown Summit') : 'Unknown Summit'; + $sponsor_id = $subject->getSponsorId() ?? 'unknown'; + + switch ($this->event_type) { + case IAuditStrategy::EVENT_ENTITY_CREATION: + return sprintf( + "Sponsor Registration Discount Code '%s' (ID: %s) for Sponsor %s in Summit '%s' created by user %s", + $code, + $id, + $sponsor_id, + $summit_name, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_UPDATE: + $details = $this->buildChangeDetails($change_set); + return sprintf( + "Sponsor Registration Discount Code '%s' (ID: %s) in Summit '%s' updated: %s by user %s", + $code, + $id, + $summit_name, + $details, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_DELETION: + return sprintf( + "Sponsor Registration Discount Code '%s' (ID: %s) in Summit '%s' deleted by user %s", + $code, + $id, + $summit_name, + $this->getUserInfo() + ); + } + } catch (\Exception $ex) { + Log::warning("SponsorSummitRegistrationDiscountCodeAuditLogFormatter error: " . $ex->getMessage()); + } + + return null; + } +} diff --git a/app/Audit/ConcreteFormatters/SponsorSummitRegistrationPromoCodeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorSummitRegistrationPromoCodeAuditLogFormatter.php new file mode 100644 index 000000000..abbe1b366 --- /dev/null +++ b/app/Audit/ConcreteFormatters/SponsorSummitRegistrationPromoCodeAuditLogFormatter.php @@ -0,0 +1,75 @@ +getId() ?? 'unknown'; + $code = $subject->getCode() ?? 'Unknown Code'; + $summit = $subject->getSummit(); + $summit_name = $summit ? ($summit->getName() ?? 'Unknown Summit') : 'Unknown Summit'; + $sponsor_id = $subject->getSponsorId() ?? 'unknown'; + + switch ($this->event_type) { + case IAuditStrategy::EVENT_ENTITY_CREATION: + return sprintf( + "Sponsor Registration Promo Code '%s' (ID: %s) for Sponsor %s in Summit '%s' created by user %s", + $code, + $id, + $sponsor_id, + $summit_name, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_UPDATE: + $details = $this->buildChangeDetails($change_set); + return sprintf( + "Sponsor Registration Promo Code '%s' (ID: %s) in Summit '%s' updated: %s by user %s", + $code, + $id, + $summit_name, + $details, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_DELETION: + return sprintf( + "Sponsor Registration Promo Code '%s' (ID: %s) in Summit '%s' deleted by user %s", + $code, + $id, + $summit_name, + $this->getUserInfo() + ); + } + } catch (\Exception $ex) { + Log::warning("SponsorSummitRegistrationPromoCodeAuditLogFormatter error: " . $ex->getMessage()); + } + + return null; + } +} diff --git a/app/Audit/ConcreteFormatters/SponsorUserInfoGrantAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorUserInfoGrantAuditLogFormatter.php new file mode 100644 index 000000000..35999376e --- /dev/null +++ b/app/Audit/ConcreteFormatters/SponsorUserInfoGrantAuditLogFormatter.php @@ -0,0 +1,73 @@ +getId() ?? 'unknown'; + $sponsor = $subject->getSponsor(); + $sponsor_id = $sponsor ? ($sponsor->getId() ?? 'unknown') : 'unknown'; + $allowed_user = $subject->getAllowedUser(); + $user_email = $allowed_user ? ($allowed_user->getEmail() ?? 'Unknown User') : 'Unknown User'; + + switch ($this->event_type) { + case IAuditStrategy::EVENT_ENTITY_CREATION: + return sprintf( + "Sponsor User Info Grant (ID: %s) granting access to user '%s' for Sponsor %s created by user %s", + $id, + $user_email, + $sponsor_id, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_UPDATE: + $details = $this->buildChangeDetails($change_set); + return sprintf( + "Sponsor User Info Grant (ID: %s) for Sponsor %s updated: %s by user %s", + $id, + $sponsor_id, + $details, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_DELETION: + return sprintf( + "Sponsor User Info Grant (ID: %s) granting access to user '%s' for Sponsor %s deleted by user %s", + $id, + $user_email, + $sponsor_id, + $this->getUserInfo() + ); + } + } catch (\Exception $ex) { + Log::warning("SponsorUserInfoGrantAuditLogFormatter error: " . $ex->getMessage()); + } + + return null; + } +} diff --git a/app/Audit/ConcreteFormatters/SummitSponsorExtraQuestionTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitSponsorExtraQuestionTypeAuditLogFormatter.php new file mode 100644 index 000000000..a806013d2 --- /dev/null +++ b/app/Audit/ConcreteFormatters/SummitSponsorExtraQuestionTypeAuditLogFormatter.php @@ -0,0 +1,75 @@ +getId() ?? 'unknown'; + $label = $subject->getLabel() ?? 'Unknown Question'; + $question_type = $subject->getType() ?? 'Unknown Type'; + $sponsor = $subject->getSponsor(); + $sponsor_info = $sponsor ? (($sponsor->getCompany() ? $sponsor->getCompany()->getName() : 'Unknown Company') . " (ID: {$sponsor->getId()})") : 'Unknown Sponsor'; + + switch ($this->event_type) { + case IAuditStrategy::EVENT_ENTITY_CREATION: + return sprintf( + "Sponsor Extra Question '%s' (ID: %s) of type '%s' for Sponsor %s created by user %s", + $label, + $id, + $question_type, + $sponsor_info, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_UPDATE: + $details = $this->buildChangeDetails($change_set); + return sprintf( + "Sponsor Extra Question '%s' (ID: %s) for Sponsor %s updated: %s by user %s", + $label, + $id, + $sponsor_info, + $details, + $this->getUserInfo() + ); + + case IAuditStrategy::EVENT_ENTITY_DELETION: + return sprintf( + "Sponsor Extra Question '%s' (ID: %s) for Sponsor %s deleted by user %s", + $label, + $id, + $sponsor_info, + $this->getUserInfo() + ); + } + } catch (\Exception $ex) { + Log::warning("SummitSponsorExtraQuestionTypeAuditLogFormatter error: " . $ex->getMessage()); + } + + return null; + } +} diff --git a/tests/OpenTelemetry/Formatters/SponsorAdFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorAdFormatterTest.php new file mode 100644 index 000000000..a3d7a6e65 --- /dev/null +++ b/tests/OpenTelemetry/Formatters/SponsorAdFormatterTest.php @@ -0,0 +1,82 @@ +mockSubject = $this->createMockSubject(); + } + + protected function tearDown(): void + { + Mockery::close(); + parent::tearDown(); + } + + private function createMockSubject(): mixed + { + $mockCompany = Mockery::mock('models\main\Company'); + $mockCompany->shouldReceive('getName')->andReturn(self::SPONSOR_COMPANY); + + $mockSponsor = Mockery::mock('models\summit\Sponsor'); + $mockSponsor->shouldReceive('getId')->andReturn(self::SPONSOR_ID); + $mockSponsor->shouldReceive('getCompany')->andReturn($mockCompany); + + $mock = Mockery::mock('models\summit\SponsorAd'); + $mock->shouldReceive('getId')->andReturn(self::AD_ID); + $mock->shouldReceive('getText')->andReturn(self::AD_TEXT); + $mock->shouldReceive('getLink')->andReturn(self::AD_LINK); + $mock->shouldReceive('getOrder')->andReturn(self::AD_ORDER); + $mock->shouldReceive('getSponsor')->andReturn($mockSponsor); + + return $mock; + } + + public function testCreationAuditMessage(): void + { + $formatter = new SponsorAdAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('created', $result); + $this->assertStringContainsString(self::AD_TEXT, $result); + } + + public function testDeletionAuditMessage(): void + { + $formatter = new SponsorAdAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_DELETION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('deleted', $result); + } + + public function testFormatterReturnsNullForInvalidSubject(): void + { + $formatter = new SponsorAdAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format(new \stdClass(), []); + + $this->assertNull($result); + } +} diff --git a/tests/OpenTelemetry/Formatters/SponsorBadgeScanExtraQuestionAnswerFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorBadgeScanExtraQuestionAnswerFormatterTest.php new file mode 100644 index 000000000..17459cace --- /dev/null +++ b/tests/OpenTelemetry/Formatters/SponsorBadgeScanExtraQuestionAnswerFormatterTest.php @@ -0,0 +1,82 @@ +mockSubject = $this->createMockSubject(); + } + + protected function tearDown(): void + { + Mockery::close(); + parent::tearDown(); + } + + private function createMockSubject(): mixed + { + $mockSponsor = Mockery::mock('models\summit\Sponsor'); + $mockSponsor->shouldReceive('getId')->andReturn(self::SPONSOR_ID); + + $mockBadgeScan = Mockery::mock('models\summit\SponsorBadgeScan'); + $mockBadgeScan->shouldReceive('getSponsor')->andReturn($mockSponsor); + + $mockQuestion = Mockery::mock('App\Models\Foundation\Summit\ExtraQuestions\SummitSponsorExtraQuestionType'); + $mockQuestion->shouldReceive('getLabel')->andReturn(self::QUESTION_LABEL); + + $mock = Mockery::mock('models\summit\SponsorBadgeScanExtraQuestionAnswer'); + $mock->shouldReceive('getId')->andReturn(self::ANSWER_ID); + $mock->shouldReceive('getValue')->andReturn(self::ANSWER_VALUE); + $mock->shouldReceive('getQuestion')->andReturn($mockQuestion); + $mock->shouldReceive('getBadgeScan')->andReturn($mockBadgeScan); + + return $mock; + } + + public function testCreationAuditMessage(): void + { + $formatter = new SponsorBadgeScanExtraQuestionAnswerAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('created', $result); + $this->assertStringContainsString(self::QUESTION_LABEL, $result); + $this->assertStringContainsString(self::ANSWER_VALUE, $result); + } + + public function testDeletionAuditMessage(): void + { + $formatter = new SponsorBadgeScanExtraQuestionAnswerAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_DELETION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('deleted', $result); + } + + public function testFormatterReturnsNullForInvalidSubject(): void + { + $formatter = new SponsorBadgeScanExtraQuestionAnswerAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format(new \stdClass(), []); + + $this->assertNull($result); + } +} diff --git a/tests/OpenTelemetry/Formatters/SponsorBadgeScanFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorBadgeScanFormatterTest.php new file mode 100644 index 000000000..c3d4e8cbd --- /dev/null +++ b/tests/OpenTelemetry/Formatters/SponsorBadgeScanFormatterTest.php @@ -0,0 +1,86 @@ +mockSubject = $this->createMockSubject(); + } + + protected function tearDown(): void + { + Mockery::close(); + parent::tearDown(); + } + + private function createMockSubject(): mixed + { + $mockCompany = Mockery::mock('models\main\Company'); + $mockCompany->shouldReceive('getName')->andReturn(self::SPONSOR_COMPANY); + + $mockSponsor = Mockery::mock('models\summit\Sponsor'); + $mockSponsor->shouldReceive('getId')->andReturn(self::SPONSOR_ID); + $mockSponsor->shouldReceive('getCompany')->andReturn($mockCompany); + + $mockUser = Mockery::mock('models\main\Member'); + $mockUser->shouldReceive('getEmail')->andReturn(self::USER_EMAIL); + + $mockDate = new \DateTime('2024-02-09 12:00:00'); + + $mock = Mockery::mock('models\summit\SponsorBadgeScan'); + $mock->shouldReceive('getId')->andReturn(self::SCAN_ID); + $mock->shouldReceive('getQRCode')->andReturn(self::QR_CODE); + $mock->shouldReceive('getScanDate')->andReturn($mockDate); + $mock->shouldReceive('getSponsor')->andReturn($mockSponsor); + $mock->shouldReceive('getUser')->andReturn($mockUser); + + return $mock; + } + + public function testCreationAuditMessage(): void + { + $formatter = new SponsorBadgeScanAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('created', $result); + $this->assertStringContainsString(self::USER_EMAIL, $result); + } + + public function testDeletionAuditMessage(): void + { + $formatter = new SponsorBadgeScanAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_DELETION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('deleted', $result); + } + + public function testFormatterReturnsNullForInvalidSubject(): void + { + $formatter = new SponsorBadgeScanAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format(new \stdClass(), []); + + $this->assertNull($result); + } +} diff --git a/tests/OpenTelemetry/Formatters/SponsorMaterialFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorMaterialFormatterTest.php new file mode 100644 index 000000000..729ce8476 --- /dev/null +++ b/tests/OpenTelemetry/Formatters/SponsorMaterialFormatterTest.php @@ -0,0 +1,83 @@ +mockSubject = $this->createMockSubject(); + } + + protected function tearDown(): void + { + Mockery::close(); + parent::tearDown(); + } + + private function createMockSubject(): mixed + { + $mockCompany = Mockery::mock('models\main\Company'); + $mockCompany->shouldReceive('getName')->andReturn(self::SPONSOR_COMPANY); + + $mockSponsor = Mockery::mock('models\summit\Sponsor'); + $mockSponsor->shouldReceive('getId')->andReturn(self::SPONSOR_ID); + $mockSponsor->shouldReceive('getCompany')->andReturn($mockCompany); + + $mock = Mockery::mock('models\summit\SponsorMaterial'); + $mock->shouldReceive('getId')->andReturn(self::MATERIAL_ID); + $mock->shouldReceive('getName')->andReturn(self::MATERIAL_NAME); + $mock->shouldReceive('getType')->andReturn(self::MATERIAL_TYPE); + $mock->shouldReceive('getOrder')->andReturn(self::MATERIAL_ORDER); + $mock->shouldReceive('getSponsor')->andReturn($mockSponsor); + + return $mock; + } + + public function testCreationAuditMessage(): void + { + $formatter = new SponsorMaterialAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('created', $result); + $this->assertStringContainsString(self::MATERIAL_NAME, $result); + $this->assertStringContainsString(self::MATERIAL_TYPE, $result); + } + + public function testDeletionAuditMessage(): void + { + $formatter = new SponsorMaterialAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_DELETION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('deleted', $result); + } + + public function testFormatterReturnsNullForInvalidSubject(): void + { + $formatter = new SponsorMaterialAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format(new \stdClass(), []); + + $this->assertNull($result); + } +} diff --git a/tests/OpenTelemetry/Formatters/SponsorSocialNetworkFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorSocialNetworkFormatterTest.php new file mode 100644 index 000000000..5b8a0e9dc --- /dev/null +++ b/tests/OpenTelemetry/Formatters/SponsorSocialNetworkFormatterTest.php @@ -0,0 +1,81 @@ +mockSubject = $this->createMockSubject(); + } + + protected function tearDown(): void + { + Mockery::close(); + parent::tearDown(); + } + + private function createMockSubject(): mixed + { + $mockCompany = Mockery::mock('models\main\Company'); + $mockCompany->shouldReceive('getName')->andReturn(self::SPONSOR_COMPANY); + + $mockSponsor = Mockery::mock('models\summit\Sponsor'); + $mockSponsor->shouldReceive('getId')->andReturn(self::SPONSOR_ID); + $mockSponsor->shouldReceive('getCompany')->andReturn($mockCompany); + + $mock = Mockery::mock('models\summit\SponsorSocialNetwork'); + $mock->shouldReceive('getId')->andReturn(self::NETWORK_ID); + $mock->shouldReceive('getLink')->andReturn(self::NETWORK_LINK); + $mock->shouldReceive('getIconCSSClass')->andReturn(self::ICON_CSS); + $mock->shouldReceive('getSponsor')->andReturn($mockSponsor); + + return $mock; + } + + public function testCreationAuditMessage(): void + { + $formatter = new SponsorSocialNetworkAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('created', $result); + $this->assertStringContainsString(self::NETWORK_LINK, $result); + $this->assertStringContainsString(self::ICON_CSS, $result); + } + + public function testDeletionAuditMessage(): void + { + $formatter = new SponsorSocialNetworkAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_DELETION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('deleted', $result); + } + + public function testFormatterReturnsNullForInvalidSubject(): void + { + $formatter = new SponsorSocialNetworkAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format(new \stdClass(), []); + + $this->assertNull($result); + } +} diff --git a/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationDiscountCodeFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationDiscountCodeFormatterTest.php new file mode 100644 index 000000000..7e890e4b8 --- /dev/null +++ b/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationDiscountCodeFormatterTest.php @@ -0,0 +1,104 @@ +mockSubject = $this->createMockSubject(); + } + + protected function tearDown(): void + { + Mockery::close(); + parent::tearDown(); + } + + private function createMockSubject(): mixed + { + $mockSummit = Mockery::mock('models\summit\Summit'); + $mockSummit->shouldReceive('getName')->andReturn(self::SUMMIT_NAME); + + $mock = Mockery::mock('models\summit\SponsorSummitRegistrationDiscountCode'); + $mock->shouldReceive('getId')->andReturn(self::CODE_ID); + $mock->shouldReceive('getCode')->andReturn(self::CODE_VALUE); + $mock->shouldReceive('getSummit')->andReturn($mockSummit); + $mock->shouldReceive('getSponsorId')->andReturn(self::SPONSOR_ID); + $mock->shouldReceive('getRate')->andReturn(self::DISCOUNT_RATE); + $mock->shouldReceive('getAmount')->andReturn(0); + + return $mock; + } + + public function testSubjectCreationAuditMessage(): void + { + $formatter = new SponsorSummitRegistrationDiscountCodeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('created', $result); + $this->assertStringContainsString(self::CODE_VALUE, $result); + $this->assertStringContainsString((string)self::CODE_ID, $result); + $this->assertStringContainsString((string)self::SPONSOR_ID, $result); + $this->assertStringContainsString('rate', $result); + } + + public function testSubjectUpdateAuditMessage(): void + { + $formatter = new SponsorSummitRegistrationDiscountCodeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); + $formatter->setContext(AuditContextBuilder::default()->build()); + $changeSet = ['code' => [self::CODE_VALUE, self::NEW_CODE_VALUE]]; + + $result = $formatter->format($this->mockSubject, $changeSet); + + $this->assertNotNull($result); + $this->assertStringContainsString('updated', $result); + } + + public function testSubjectDeletionAuditMessage(): void + { + $formatter = new SponsorSummitRegistrationDiscountCodeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_DELETION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('deleted', $result); + } + + public function testFormatterReturnsNullForInvalidSubject(): void + { + $formatter = new SponsorSummitRegistrationDiscountCodeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format(new \stdClass(), []); + + $this->assertNull($result); + } + + public function testFormatterHandlesEmptyChangeSet(): void + { + $formatter = new SponsorSummitRegistrationDiscountCodeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('updated', $result); + } +} diff --git a/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationPromoCodeFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationPromoCodeFormatterTest.php new file mode 100644 index 000000000..f41fea90b --- /dev/null +++ b/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationPromoCodeFormatterTest.php @@ -0,0 +1,100 @@ +mockSubject = $this->createMockSubject(); + } + + protected function tearDown(): void + { + Mockery::close(); + parent::tearDown(); + } + + private function createMockSubject(): mixed + { + $mockSummit = Mockery::mock('models\summit\Summit'); + $mockSummit->shouldReceive('getName')->andReturn(self::SUMMIT_NAME); + + $mock = Mockery::mock('models\summit\SponsorSummitRegistrationPromoCode'); + $mock->shouldReceive('getId')->andReturn(self::CODE_ID); + $mock->shouldReceive('getCode')->andReturn(self::CODE_VALUE); + $mock->shouldReceive('getSummit')->andReturn($mockSummit); + $mock->shouldReceive('getSponsorId')->andReturn(self::SPONSOR_ID); + + return $mock; + } + + public function testSubjectCreationAuditMessage(): void + { + $formatter = new SponsorSummitRegistrationPromoCodeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('created', $result); + $this->assertStringContainsString(self::CODE_VALUE, $result); + $this->assertStringContainsString((string)self::CODE_ID, $result); + $this->assertStringContainsString((string)self::SPONSOR_ID, $result); + } + + public function testSubjectUpdateAuditMessage(): void + { + $formatter = new SponsorSummitRegistrationPromoCodeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); + $formatter->setContext(AuditContextBuilder::default()->build()); + $changeSet = ['code' => [self::CODE_VALUE, self::NEW_CODE_VALUE]]; + + $result = $formatter->format($this->mockSubject, $changeSet); + + $this->assertNotNull($result); + $this->assertStringContainsString('updated', $result); + } + + public function testSubjectDeletionAuditMessage(): void + { + $formatter = new SponsorSummitRegistrationPromoCodeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_DELETION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('deleted', $result); + } + + public function testFormatterReturnsNullForInvalidSubject(): void + { + $formatter = new SponsorSummitRegistrationPromoCodeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format(new \stdClass(), []); + + $this->assertNull($result); + } + + public function testFormatterHandlesEmptyChangeSet(): void + { + $formatter = new SponsorSummitRegistrationPromoCodeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('updated', $result); + } +} diff --git a/tests/OpenTelemetry/Formatters/SponsorUserInfoGrantFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorUserInfoGrantFormatterTest.php new file mode 100644 index 000000000..bb04eb759 --- /dev/null +++ b/tests/OpenTelemetry/Formatters/SponsorUserInfoGrantFormatterTest.php @@ -0,0 +1,81 @@ +mockSubject = $this->createMockSubject(); + } + + protected function tearDown(): void + { + Mockery::close(); + parent::tearDown(); + } + + private function createMockSubject(): mixed + { + $mockCompany = Mockery::mock('models\main\Company'); + $mockCompany->shouldReceive('getName')->andReturn(self::SPONSOR_COMPANY); + + $mockSponsor = Mockery::mock('models\summit\Sponsor'); + $mockSponsor->shouldReceive('getId')->andReturn(self::SPONSOR_ID); + $mockSponsor->shouldReceive('getCompany')->andReturn($mockCompany); + + $mockUser = Mockery::mock('models\main\Member'); + $mockUser->shouldReceive('getEmail')->andReturn(self::ALLOWED_USER_EMAIL); + + $mock = Mockery::mock('models\summit\SponsorUserInfoGrant'); + $mock->shouldReceive('getId')->andReturn(self::GRANT_ID); + $mock->shouldReceive('getSponsor')->andReturn($mockSponsor); + $mock->shouldReceive('getAllowedUser')->andReturn($mockUser); + + return $mock; + } + + public function testCreationAuditMessage(): void + { + $formatter = new SponsorUserInfoGrantAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('created', $result); + $this->assertStringContainsString(self::ALLOWED_USER_EMAIL, $result); + } + + public function testDeletionAuditMessage(): void + { + $formatter = new SponsorUserInfoGrantAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_DELETION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('deleted', $result); + } + + public function testFormatterReturnsNullForInvalidSubject(): void + { + $formatter = new SponsorUserInfoGrantAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format(new \stdClass(), []); + + $this->assertNull($result); + } +} diff --git a/tests/OpenTelemetry/Formatters/SummitSponsorExtraQuestionTypeAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitSponsorExtraQuestionTypeAuditLogFormatterTest.php new file mode 100644 index 000000000..e76b27234 --- /dev/null +++ b/tests/OpenTelemetry/Formatters/SummitSponsorExtraQuestionTypeAuditLogFormatterTest.php @@ -0,0 +1,107 @@ +mockSubject = $this->createMockSubject(); + } + + protected function tearDown(): void + { + Mockery::close(); + parent::tearDown(); + } + + private function createMockSubject(): mixed + { + $mockCompany = Mockery::mock('models\main\Company'); + $mockCompany->shouldReceive('getName')->andReturn(self::SPONSOR_COMPANY_NAME); + + $mockSponsor = Mockery::mock('models\summit\Sponsor'); + $mockSponsor->shouldReceive('getId')->andReturn(self::SPONSOR_ID); + $mockSponsor->shouldReceive('getCompany')->andReturn($mockCompany); + + $mock = Mockery::mock('App\Models\Foundation\Summit\ExtraQuestions\SummitSponsorExtraQuestionType'); + $mock->shouldReceive('getId')->andReturn(self::QUESTION_ID); + $mock->shouldReceive('getLabel')->andReturn(self::QUESTION_LABEL); + $mock->shouldReceive('getType')->andReturn(self::QUESTION_TYPE); + $mock->shouldReceive('getSponsor')->andReturn($mockSponsor); + + return $mock; + } + + public function testSubjectCreationAuditMessage(): void + { + $formatter = new SummitSponsorExtraQuestionTypeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('created', $result); + $this->assertStringContainsString(self::QUESTION_LABEL, $result); + $this->assertStringContainsString((string)self::QUESTION_ID, $result); + $this->assertStringContainsString(self::QUESTION_TYPE, $result); + $this->assertStringContainsString((string)self::SPONSOR_ID, $result); + $this->assertStringContainsString(self::SPONSOR_COMPANY_NAME, $result); + } + + public function testSubjectUpdateAuditMessage(): void + { + $formatter = new SummitSponsorExtraQuestionTypeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); + $formatter->setContext(AuditContextBuilder::default()->build()); + $changeSet = ['label' => [self::QUESTION_LABEL, self::NEW_QUESTION_LABEL]]; + + $result = $formatter->format($this->mockSubject, $changeSet); + + $this->assertNotNull($result); + $this->assertStringContainsString('updated', $result); + } + + public function testSubjectDeletionAuditMessage(): void + { + $formatter = new SummitSponsorExtraQuestionTypeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_DELETION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('deleted', $result); + } + + public function testFormatterReturnsNullForInvalidSubject(): void + { + $formatter = new SummitSponsorExtraQuestionTypeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_CREATION); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format(new \stdClass(), []); + + $this->assertNull($result); + } + + public function testFormatterHandlesEmptyChangeSet(): void + { + $formatter = new SummitSponsorExtraQuestionTypeAuditLogFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); + $formatter->setContext(AuditContextBuilder::default()->build()); + $result = $formatter->format($this->mockSubject, []); + + $this->assertNotNull($result); + $this->assertStringContainsString('updated', $result); + } +} From 893af028a1c7c3044193b0c87755d91d85c76f3e Mon Sep 17 00:00:00 2001 From: Jose Andres Tejerina Date: Thu, 12 Feb 2026 16:06:28 -0300 Subject: [PATCH 2/2] feat: add new audit log for sponsors --- config/audit_log.php | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/config/audit_log.php b/config/audit_log.php index cd204dd5e..c9637e9cd 100644 --- a/config/audit_log.php +++ b/config/audit_log.php @@ -228,5 +228,41 @@ 'enabled' => true, 'strategy' => \App\Audit\ConcreteFormatters\PresentationAttendeeVoteAuditLogFormatter::class, ], + \models\summit\SponsorAd::class => [ + 'enabled' => true, + 'strategy' => \App\Audit\ConcreteFormatters\SponsorAdAuditLogFormatter::class, + ], + \models\summit\SponsorBadgeScan::class => [ + 'enabled' => true, + 'strategy' => \App\Audit\ConcreteFormatters\SponsorBadgeScanAuditLogFormatter::class, + ], + \models\summit\SponsorBadgeScanExtraQuestionAnswer::class => [ + 'enabled' => true, + 'strategy' => \App\Audit\ConcreteFormatters\SponsorBadgeScanExtraQuestionAnswerAuditLogFormatter::class, + ], + \models\summit\SponsorMaterial::class => [ + 'enabled' => true, + 'strategy' => \App\Audit\ConcreteFormatters\SponsorMaterialAuditLogFormatter::class, + ], + \models\summit\SponsorSocialNetwork::class => [ + 'enabled' => true, + 'strategy' => \App\Audit\ConcreteFormatters\SponsorSocialNetworkAuditLogFormatter::class, + ], + \models\summit\SponsorSummitRegistrationDiscountCode::class => [ + 'enabled' => true, + 'strategy' => \App\Audit\ConcreteFormatters\SponsorSummitRegistrationDiscountCodeAuditLogFormatter::class, + ], + \models\summit\SponsorSummitRegistrationPromoCode::class => [ + 'enabled' => true, + 'strategy' => \App\Audit\ConcreteFormatters\SponsorSummitRegistrationPromoCodeAuditLogFormatter::class, + ], + \models\summit\SponsorUserInfoGrant::class => [ + 'enabled' => true, + 'strategy' => \App\Audit\ConcreteFormatters\SponsorUserInfoGrantAuditLogFormatter::class, + ], + \App\Models\Foundation\Summit\ExtraQuestions\SummitSponsorExtraQuestionType::class => [ + 'enabled' => true, + 'strategy' => \App\Audit\ConcreteFormatters\SummitSponsorExtraQuestionTypeAuditLogFormatter::class, + ], ] ];