From 6a6d3eb24975fc7984dd1a80516aa94d5f68c700 Mon Sep 17 00:00:00 2001 From: Jose Andres Tejerina Date: Tue, 19 May 2026 12:09:30 -0300 Subject: [PATCH 1/2] fix: reduces update logs that contain no actual changes --- app/Audit/AbstractAuditLogFormatter.php | 53 ++++++++- app/Audit/AuditLogOtlpStrategy.php | 11 +- ...AbstractAuditLogFormatterDateNoiseTest.php | 108 ++++++++++++++++++ ...itLogFormatterHasMeaningfulChangesTest.php | 100 ++++++++++++++++ ...uditLogOtlpStrategyNoOpSuppressionTest.php | 93 +++++++++++++++ 5 files changed, 362 insertions(+), 3 deletions(-) create mode 100644 tests/Unit/Audit/AbstractAuditLogFormatterDateNoiseTest.php create mode 100644 tests/Unit/Audit/AbstractAuditLogFormatterHasMeaningfulChangesTest.php create mode 100644 tests/Unit/Audit/AuditLogOtlpStrategyNoOpSuppressionTest.php diff --git a/app/Audit/AbstractAuditLogFormatter.php b/app/Audit/AbstractAuditLogFormatter.php index 005d34575..86e88d0a9 100644 --- a/app/Audit/AbstractAuditLogFormatter.php +++ b/app/Audit/AbstractAuditLogFormatter.php @@ -22,6 +22,7 @@ abstract class AbstractAuditLogFormatter implements IAuditLogFormatter { protected ?AuditContext $ctx = null; protected string $event_type; + public const NO_CHANGES_REGISTERED_MESSAGE = 'properties without changes registered'; public function __construct(string $event_type) { @@ -178,21 +179,71 @@ protected function buildChangeDetails(array $change_set): string } if (empty($changed_fields)) { - return 'properties without changes registered'; + return self::NO_CHANGES_REGISTERED_MESSAGE; } $fields_summary = count($changed_fields) . ' field(s) modified: '; return $fields_summary . implode(' | ', $changed_fields); } + + final public function hasMeaningfulChanges(array $change_set): bool + { + $ignored_fields = $this->getIgnoredFields(); + + foreach ($change_set as $prop_name => $change_values) { + if (in_array($prop_name, $ignored_fields)) { + continue; + } + + $old_value = $change_values[0] ?? null; + $new_value = $change_values[1] ?? null; + + if ($this->formatFieldChange($prop_name, $old_value, $new_value) !== null) { + return true; + } + } + + return false; + } + protected function formatFieldChange(string $prop_name, $old_value, $new_value): ?string { + if ($this->valuesAreEffectivelyEqual($old_value, $new_value)) { + return null; + } + $old_display = $this->formatChangeValue($old_value); $new_display = $this->formatChangeValue($new_value); return sprintf("Property \"%s\" has changed from \"%s\" to \"%s\"", $prop_name, $old_display, $new_display); } + protected function valuesAreEffectivelyEqual($old_value, $new_value): bool + { + if ($old_value === $new_value) { + return true; + } + + if ($old_value instanceof \DateTimeInterface && $new_value instanceof \DateTimeInterface) { + if ($old_value->getTimestamp() === $new_value->getTimestamp()) { + return true; + } + + try { + return $old_value->format('U.u') === $new_value->format('U.u'); + } catch (\Throwable $e) { + return false; + } + } + + if ((is_scalar($old_value) || is_null($old_value)) && (is_scalar($new_value) || is_null($new_value))) { + return $this->formatChangeValue($old_value) === $this->formatChangeValue($new_value); + } + + return false; + } + /** * Format detailed message for many-to-many collection changes */ diff --git a/app/Audit/AuditLogOtlpStrategy.php b/app/Audit/AuditLogOtlpStrategy.php index 1da61a7d8..757994dab 100644 --- a/app/Audit/AuditLogOtlpStrategy.php +++ b/app/Audit/AuditLogOtlpStrategy.php @@ -50,7 +50,7 @@ public function audit($subject, array $change_set, string $event_type, AuditCon return; } Log::debug("AuditLogOtlpStrategy::audit", ['subject' => $subject, 'change_set' => $change_set, 'event_type' => $event_type]); - try { + try { $entity = $this->resolveAuditableEntity($subject); if (is_null($entity)) { Log::warning("AuditLogOtlpStrategy::audit subject not found"); @@ -62,6 +62,13 @@ public function audit($subject, array $change_set, string $event_type, AuditCon Log::warning("AuditLogOtlpStrategy::audit formatter not found"); return; } + if ($event_type === IAuditStrategy::EVENT_ENTITY_UPDATE + && !$formatter->hasMeaningfulChanges($change_set)) { + Log::debug("AuditLogOtlpStrategy::audit skipping no-op entity update", [ + 'subject_class' => is_object($subject) ? get_class($subject) : gettype($subject), + ]); + return; + } $description = $formatter->format($subject, $change_set); if(is_null($description)){ Log::warning("AuditLogOtlpStrategy::audit description is empty"); @@ -76,7 +83,7 @@ public function audit($subject, array $change_set, string $event_type, AuditCon job: $job, ); Log::debug("AuditLogOtlpStrategy::audit entry sent to OTEL", ["user_id" => $ctx->userId, "user_email" => $ctx->userEmail]); - + } catch (\Exception $ex) { Log::error('OTEL audit logging error: ' . $ex->getMessage(), [ 'exception' => $ex, diff --git a/tests/Unit/Audit/AbstractAuditLogFormatterDateNoiseTest.php b/tests/Unit/Audit/AbstractAuditLogFormatterDateNoiseTest.php new file mode 100644 index 000000000..4b5a3ee6a --- /dev/null +++ b/tests/Unit/Audit/AbstractAuditLogFormatterDateNoiseTest.php @@ -0,0 +1,108 @@ +publicBuildChangeDetails([ + 'submission_begin_date' => [$oldUtc, $newLocalSameSecond], + ]); + + $this->assertSame('properties without changes registered', $details); + $this->assertFalse($formatter->hasMeaningfulChanges([ + 'submission_begin_date' => [$oldUtc, $newLocalSameSecond], + ])); + } + + public function testBuildChangeDetailsIgnoresMultipleDateFieldsWithSameInstant(): void + { + $formatter = new ExposingAuditFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); + + $old = new DateTime('2025-07-02 07:00:00', new DateTimeZone('UTC')); + $newSame = new DateTime('2025-07-02 07:00:00', new DateTimeZone('UTC')); + + $details = $formatter->publicBuildChangeDetails([ + 'submission_begin_date' => [$old, $newSame], + 'submission_end_date' => [$old, $newSame], + 'selection_begin_date' => [$old, $newSame], + 'selection_end_date' => [$old, $newSame], + ]); + + $this->assertSame('properties without changes registered', $details); + } + + public function testBuildChangeDetailsStillShowsRealDateTimeChange(): void + { + $formatter = new ExposingAuditFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); + + $old = new DateTime('2026-01-02 03:04:05', new DateTimeZone('UTC')); + $new = new DateTime('2026-01-02 03:04:06', new DateTimeZone('UTC')); + + $details = $formatter->publicBuildChangeDetails([ + 'submission_begin_date' => [$old, $new], + ]); + + $this->assertStringContainsString('submission_begin_date', $details); + $this->assertStringContainsString('03:04:05', $details); + $this->assertStringContainsString('03:04:06', $details); + $this->assertTrue($formatter->hasMeaningfulChanges([ + 'submission_begin_date' => [$old, $new], + ])); + } + + public function testBuildChangeDetailsKeepsOtherNonDateChanges(): void + { + $formatter = new ExposingAuditFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); + + $oldUtc = new DateTime('2026-01-02 03:04:05', new DateTimeZone('UTC')); + $newLocalSameSecond = new DateTime('2026-01-02 00:04:05', new DateTimeZone('America/Argentina/Buenos_Aires')); + + $details = $formatter->publicBuildChangeDetails([ + 'submission_begin_date' => [$oldUtc, $newLocalSameSecond], + 'name' => ['Old', 'New'], + ]); + + $this->assertStringContainsString('1 field(s) modified', $details); + $this->assertStringContainsString('Property "name" has changed', $details); + $this->assertStringNotContainsString('submission_begin_date', $details); + } +} + +final class ExposingAuditFormatter extends AbstractAuditLogFormatter +{ + public function publicBuildChangeDetails(array $change_set): string + { + return $this->buildChangeDetails($change_set); + } + + public function format(mixed $subject, array $change_set): ?string + { + return null; + } +} diff --git a/tests/Unit/Audit/AbstractAuditLogFormatterHasMeaningfulChangesTest.php b/tests/Unit/Audit/AbstractAuditLogFormatterHasMeaningfulChangesTest.php new file mode 100644 index 000000000..a8e5e39fb --- /dev/null +++ b/tests/Unit/Audit/AbstractAuditLogFormatterHasMeaningfulChangesTest.php @@ -0,0 +1,100 @@ +assertFalse($formatter->hasMeaningfulChanges($changeSet)); + $this->assertSame(AbstractAuditLogFormatter::NO_CHANGES_REGISTERED_MESSAGE, $formatter->publicBuildChangeDetails($changeSet)); + } + + /** + * @dataProvider provideMeaningfulChangeSets + */ + public function testHasMeaningfulChangesReturnsTrueForRealChanges(array $changeSet): void + { + $formatter = new ExposingMeaningfulAuditFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); + $this->assertTrue($formatter->hasMeaningfulChanges($changeSet)); + $this->assertNotSame(AbstractAuditLogFormatter::NO_CHANGES_REGISTERED_MESSAGE, $formatter->publicBuildChangeDetails($changeSet)); + } + + public static function provideNoOpChangeSets(): array + { + $dtUtc = new DateTimeImmutable('2026-01-02 03:04:05', new DateTimeZone('UTC')); + $dtSameInstantOtherTz = new DateTimeImmutable('2026-01-02 00:04:05', new DateTimeZone('America/Argentina/Buenos_Aires')); + + return [ + 'same-string' => [[ + 'name' => ['abc', 'abc'], + ]], + 'same-bool' => [[ + 'is_enabled' => [true, true], + ]], + 'same-null' => [[ + 'submission_lock_down_presentation_status_date' => [null, null], + ]], + 'datetime-same-instant-different-tz' => [[ + 'submission_begin_date' => [$dtUtc, $dtSameInstantOtherTz], + ]], + ]; + } + + public static function provideMeaningfulChangeSets(): array + { + $dt1 = new DateTimeImmutable('2026-01-02 03:04:05', new DateTimeZone('UTC')); + $dt2 = new DateTimeImmutable('2026-01-02 03:04:06', new DateTimeZone('UTC')); + + return [ + 'string-changed' => [[ + 'name' => ['abc', 'def'], + ]], + 'bool-changed' => [[ + 'is_hidden' => [false, true], + ]], + 'null-to-value' => [[ + 'max_submission_allowed_per_user' => [null, 3], + ]], + 'datetime-changed' => [[ + 'submission_begin_date' => [$dt1, $dt2], + ]], + ]; + } +} + +final class ExposingMeaningfulAuditFormatter extends AbstractAuditLogFormatter +{ + public function publicBuildChangeDetails(array $change_set): string + { + return $this->buildChangeDetails($change_set); + } + + public function format(mixed $subject, array $change_set): ?string + { + return null; + } +} diff --git a/tests/Unit/Audit/AuditLogOtlpStrategyNoOpSuppressionTest.php b/tests/Unit/Audit/AuditLogOtlpStrategyNoOpSuppressionTest.php new file mode 100644 index 000000000..578466c95 --- /dev/null +++ b/tests/Unit/Audit/AuditLogOtlpStrategyNoOpSuppressionTest.php @@ -0,0 +1,93 @@ +audit( + subject: (object) ['id' => 1], + change_set: ['submission_begin_date' => [$dtUtc, $dtSameInstantOtherTz]], + event_type: IAuditStrategy::EVENT_ENTITY_UPDATE, + ctx: new AuditContext() + ); + + Bus::assertNotDispatched(EmitAuditLogJob::class); + } + + public function testAuditDispatchesWhenMeaningfulChangesExist(): void + { + Bus::fake(); + Config::set('opentelemetry.enabled', true); + + $formatterFactory = new class implements IAuditLogFormatterFactory { + public function make(AuditContext $ctx, mixed $subject, string $event_type): ?\App\Audit\IAuditLogFormatter + { + return new class($event_type) extends AbstractAuditLogFormatter { + public function format(mixed $subject, array $change_set): ?string + { + return 'ok'; + } + }; + } + }; + + $strategy = new AuditLogOtlpStrategy($formatterFactory); + + $strategy->audit( + subject: (object) ['id' => 1], + change_set: ['name' => ['a', 'b']], + event_type: IAuditStrategy::EVENT_ENTITY_UPDATE, + ctx: new AuditContext() + ); + + Bus::assertDispatched(EmitAuditLogJob::class); + } +} + From aabffc55a8880b0dfba51b6a03d77f05acd92246 Mon Sep 17 00:00:00 2001 From: Jose Andres Tejerina Date: Tue, 26 May 2026 18:05:14 -0300 Subject: [PATCH 2/2] fix: formatters now return a null description if there are no actual changes --- app/Audit/AbstractAuditLogFormatter.php | 25 +--- app/Audit/AuditLogOtlpStrategy.php | 7 -- .../AffiliationAuditLogFormatter.php | 3 + ...PlanExtraQuestionTypeAuditLogFormatter.php | 3 + .../CompanyAuditLogFormatter.php | 3 + ...xtraQuestionTypeValueAuditLogFormatter.php | 1 + .../FeaturedSpeakerAuditLogFormatter.php | 3 + .../FileAuditLogFormatter.php | 3 + ...istrationDiscountCodeAuditLogFormatter.php | 3 + ...sentationAttendeeVoteAuditLogFormatter.php | 3 + .../PresentationCategoryAuditLogFormatter.php | 3 + ...entationCategoryGroupAuditLogFormatter.php | 3 + .../BasePresentationAuditLogFormatter.php | 2 +- ...resentationActionTypeAuditLogFormatter.php | 3 + .../PresentationEventApiAuditLogFormatter.php | 8 +- .../PresentationLinkAuditLogFormatter.php | 3 + ...esentationMediaUploadAuditLogFormatter.php | 3 + .../PresentationSlideAuditLogFormatter.php | 3 + .../PresentationSpeakerAuditLogFormatter.php | 3 + ...ssistanceConfirmationAuditLogFormatter.php | 3 + ...resentationSubmissionAuditLogFormatter.php | 8 +- ...nTrackChairRatingTypeAuditLogFormatter.php | 3 + ...onTrackChairScoreTypeAuditLogFormatter.php | 3 + ...ntationUserSubmissionAuditLogFormatter.php | 3 + .../PresentationVideoAuditLogFormatter.php | 3 + .../PresentationTypeAuditLogFormatter.php | 3 + .../RSVPAuditLogFormatter.php | 3 + .../RSVPInvitationAuditLogFormatter.php | 3 + .../RSVPQuestionTemplateAuditLogFormatter.php | 3 + .../RSVPTemplateAuditLogFormatter.php | 3 + ...dSummitLocationBannerAuditLogFormatter.php | 3 + ...ePresentationQuestionAuditLogFormatter.php | 3 + ...dPresentationQuestionAuditLogFormatter.php | 3 + .../SelectionPlanAuditLogFormatter.php | 3 + .../SpeakerAssistanceAuditLogFormatter.php | 3 + ...erRegistrationRequestAuditLogFormatter.php | 3 + .../SponsorAdAuditLogFormatter.php | 3 + .../SponsorAuditLogFormatter.php | 3 + .../SponsorBadgeScanAuditLogFormatter.php | 3 + ...anExtraQuestionAnswerAuditLogFormatter.php | 3 + .../SponsorMaterialAuditLogFormatter.php | 3 + .../SponsorSocialNetworkAuditLogFormatter.php | 3 + ...istrationDiscountCodeAuditLogFormatter.php | 3 + ...RegistrationPromoCodeAuditLogFormatter.php | 3 + .../SponsorUserInfoGrantAuditLogFormatter.php | 3 + .../SubmissionInvitationAuditLogFormatter.php | 3 + ...SummitAccessLevelTypeAuditLogFormatter.php | 3 + .../SummitAirportAuditLogFormatter.php | 3 + .../SummitAttendeeAuditLogFormatter.php | 3 + .../SummitAttendeeBadgeAuditLogFormatter.php | 3 + .../SummitAttendeeNoteAuditLogFormatter.php | 3 + .../SummitAttendeeTicketAuditLogFormatter.php | 3 + ...mmitAttendeeTicketTaxAuditLogFormatter.php | 3 + .../SummitAuditLogFormatter.php | 3 + ...ummitBadgeFeatureTypeAuditLogFormatter.php | 3 + .../SummitBadgeTypeAuditLogFormatter.php | 3 + .../SummitBadgeViewTypeAuditLogFormatter.php | 3 + ...enueRoomAttributeTypeAuditLogFormatter.php | 3 + ...nueRoomAttributeValueAuditLogFormatter.php | 3 + ...mmitBookableVenueRoomAuditLogFormatter.php | 3 + ...EventAttendanceMetricAuditLogFormatter.php | 3 + .../SummitEventAuditLogFormatter.php | 3 + .../SummitEventTypeAuditLogFormatter.php | 3 + ...ummitExternalLocationAuditLogFormatter.php | 3 + ...mitGeoLocatedLocationAuditLogFormatter.php | 3 + .../SummitHotelAuditLogFormatter.php | 3 + .../SummitLocationBannerAuditLogFormatter.php | 3 + .../SummitLocationImageAuditLogFormatter.php | 3 + ...SummitMediaUploadTypeAuditLogFormatter.php | 3 + .../SummitMemberScheduleAuditLogFormatter.php | 3 + .../SummitMetricAuditLogFormatter.php | 3 + .../SummitOrderAuditLogFormatter.php | 3 + ...rderExtraQuestionTypeAuditLogFormatter.php | 3 + ...itPresentationCommentAuditLogFormatter.php | 3 + ...heduleAllowedLocationAuditLogFormatter.php | 3 + ...ummitRefundPolicyTypeAuditLogFormatter.php | 3 + ...istrationFeedMetadataAuditLogFormatter.php | 3 + ...tSelectedPresentationAuditLogFormatter.php | 3 + ...ectedPresentationListAuditLogFormatter.php | 3 + ...nsorExtraQuestionTypeAuditLogFormatter.php | 3 + ...ummitSponsorshipAddOnAuditLogFormatter.php | 3 + .../SummitSponsorshipAuditLogFormatter.php | 3 + .../SummitTaxTypeAuditLogFormatter.php | 3 + .../SummitTicketTypeAuditLogFormatter.php | 3 + .../SummitTrackChairAuditLogFormatter.php | 3 + .../SummitVenueAuditLogFormatter.php | 3 + .../SummitVenueFloorAuditLogFormatter.php | 3 + .../SummitVenueRoomAuditLogFormatter.php | 3 + ...QuestionTypeValueAuditLogFormatterTest.php | 5 +- .../Formatters/FileAuditLogFormatterTest.php | 5 +- ...ationDiscountCodeAuditLogFormatterTest.php | 4 +- ...mitLocationBannerAuditLogFormatterTest.php | 5 +- .../Formatters/SponsorAdFormatterTest.php | 5 +- ...geScanExtraQuestionAnswerFormatterTest.php | 5 +- .../SponsorBadgeScanFormatterTest.php | 5 +- .../Formatters/SponsorFormatterTest.php | 5 +- .../SponsorMaterialFormatterTest.php | 5 +- .../SponsorSocialNetworkFormatterTest.php | 5 +- ...tRegistrationDiscountCodeFormatterTest.php | 5 +- ...mmitRegistrationPromoCodeFormatterTest.php | 5 +- .../SponsorUserInfoGrantFormatterTest.php | 5 +- ...itAccessLevelTypeAuditLogFormatterTest.php | 6 +- ...mmitAttendeeBadgeAuditLogFormatterTest.php | 5 +- ...ummitAttendeeNoteAuditLogFormatterTest.php | 5 +- ...mitAttendeeTicketAuditLogFormatterTest.php | 5 +- ...tBadgeFeatureTypeAuditLogFormatterTest.php | 6 +- .../SummitBadgeTypeAuditLogFormatterTest.php | 6 +- ...mmitBadgeViewTypeAuditLogFormatterTest.php | 6 +- ...BookableVenueRoomAuditLogFormatterTest.php | 5 +- .../SummitEventTypeFormatterTest.php | 5 +- ...mitLocationBannerAuditLogFormatterTest.php | 5 +- ...mmitLocationImageAuditLogFormatterTest.php | 5 +- .../SummitOrderAuditLogFormatterTest.php | 5 +- ...ExtraQuestionTypeAuditLogFormatterTest.php | 5 +- ...tRefundPolicyTypeAuditLogFormatterTest.php | 4 +- ...ExtraQuestionTypeAuditLogFormatterTest.php | 5 +- .../SummitTaxTypeAuditLogFormatterTest.php | 4 +- .../SummitTicketTypeAuditLogFormatterTest.php | 4 +- .../SummitVenueFloorAuditLogFormatterTest.php | 5 +- ...AbstractAuditLogFormatterDateNoiseTest.php | 108 ------------------ ...itLogFormatterHasMeaningfulChangesTest.php | 100 ---------------- ...uditLogOtlpStrategyNoOpSuppressionTest.php | 93 --------------- ...ExtraQuestionTypeAuditLogFormatterTest.php | 8 +- 123 files changed, 326 insertions(+), 435 deletions(-) delete mode 100644 tests/Unit/Audit/AbstractAuditLogFormatterDateNoiseTest.php delete mode 100644 tests/Unit/Audit/AbstractAuditLogFormatterHasMeaningfulChangesTest.php delete mode 100644 tests/Unit/Audit/AuditLogOtlpStrategyNoOpSuppressionTest.php diff --git a/app/Audit/AbstractAuditLogFormatter.php b/app/Audit/AbstractAuditLogFormatter.php index 86e88d0a9..a7620692a 100644 --- a/app/Audit/AbstractAuditLogFormatter.php +++ b/app/Audit/AbstractAuditLogFormatter.php @@ -22,7 +22,6 @@ abstract class AbstractAuditLogFormatter implements IAuditLogFormatter { protected ?AuditContext $ctx = null; protected string $event_type; - public const NO_CHANGES_REGISTERED_MESSAGE = 'properties without changes registered'; public function __construct(string $event_type) { @@ -159,7 +158,7 @@ protected function formatChangeValue($value): string } - protected function buildChangeDetails(array $change_set): string + protected function buildChangeDetails(array $change_set): ?string { $changed_fields = []; $ignored_fields = $this->getIgnoredFields(); @@ -179,7 +178,7 @@ protected function buildChangeDetails(array $change_set): string } if (empty($changed_fields)) { - return self::NO_CHANGES_REGISTERED_MESSAGE; + return null; } $fields_summary = count($changed_fields) . ' field(s) modified: '; @@ -187,26 +186,6 @@ protected function buildChangeDetails(array $change_set): string } - final public function hasMeaningfulChanges(array $change_set): bool - { - $ignored_fields = $this->getIgnoredFields(); - - foreach ($change_set as $prop_name => $change_values) { - if (in_array($prop_name, $ignored_fields)) { - continue; - } - - $old_value = $change_values[0] ?? null; - $new_value = $change_values[1] ?? null; - - if ($this->formatFieldChange($prop_name, $old_value, $new_value) !== null) { - return true; - } - } - - return false; - } - protected function formatFieldChange(string $prop_name, $old_value, $new_value): ?string { if ($this->valuesAreEffectivelyEqual($old_value, $new_value)) { diff --git a/app/Audit/AuditLogOtlpStrategy.php b/app/Audit/AuditLogOtlpStrategy.php index 757994dab..0a2f3da3c 100644 --- a/app/Audit/AuditLogOtlpStrategy.php +++ b/app/Audit/AuditLogOtlpStrategy.php @@ -62,13 +62,6 @@ public function audit($subject, array $change_set, string $event_type, AuditCon Log::warning("AuditLogOtlpStrategy::audit formatter not found"); return; } - if ($event_type === IAuditStrategy::EVENT_ENTITY_UPDATE - && !$formatter->hasMeaningfulChanges($change_set)) { - Log::debug("AuditLogOtlpStrategy::audit skipping no-op entity update", [ - 'subject_class' => is_object($subject) ? get_class($subject) : gettype($subject), - ]); - return; - } $description = $formatter->format($subject, $change_set); if(is_null($description)){ Log::warning("AuditLogOtlpStrategy::audit description is empty"); diff --git a/app/Audit/ConcreteFormatters/AffiliationAuditLogFormatter.php b/app/Audit/ConcreteFormatters/AffiliationAuditLogFormatter.php index bfc8f5144..f2fe7aadd 100644 --- a/app/Audit/ConcreteFormatters/AffiliationAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/AffiliationAuditLogFormatter.php @@ -40,6 +40,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf("Affiliation (%s) for '%s' (%s) updated: %s by user %s", $id, $owner_name, $job_title, $details, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_DELETION: diff --git a/app/Audit/ConcreteFormatters/AssignedSelectionPlanExtraQuestionTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/AssignedSelectionPlanExtraQuestionTypeAuditLogFormatter.php index 10d093106..54e8a0823 100644 --- a/app/Audit/ConcreteFormatters/AssignedSelectionPlanExtraQuestionTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/AssignedSelectionPlanExtraQuestionTypeAuditLogFormatter.php @@ -53,6 +53,9 @@ public function format($subject, array $change_set): ?string $question_type = $subject->getQuestionType(); $question_label = $question_type ? ($question_type->getLabel() ?? 'Unknown Question') : 'Unknown Question'; $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Assigned Selection Plan Extra Question (%s) '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/CompanyAuditLogFormatter.php b/app/Audit/ConcreteFormatters/CompanyAuditLogFormatter.php index 6491b16a3..be2fed56e 100644 --- a/app/Audit/ConcreteFormatters/CompanyAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/CompanyAuditLogFormatter.php @@ -49,6 +49,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Company '%s' (%d) updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/ExtraQuestionTypeValueAuditLogFormatter.php b/app/Audit/ConcreteFormatters/ExtraQuestionTypeValueAuditLogFormatter.php index 20db9203a..905890de7 100644 --- a/app/Audit/ConcreteFormatters/ExtraQuestionTypeValueAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/ExtraQuestionTypeValueAuditLogFormatter.php @@ -39,6 +39,7 @@ public function format($subject, array $change_set): ?string return sprintf("Extra Question Value '%s' (%s) for Question '%s' created by user %s", $label, $id, $question_label, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) return null; return sprintf("Extra Question Value '%s' (%s) for Question '%s' updated: %s by user %s", $label, $id, $question_label, $details, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_DELETION: return sprintf("Extra Question Value '%s' (%s) for Question '%s' deleted by user %s", $label, $id, $question_label, $this->getUserInfo()); diff --git a/app/Audit/ConcreteFormatters/FeaturedSpeakerAuditLogFormatter.php b/app/Audit/ConcreteFormatters/FeaturedSpeakerAuditLogFormatter.php index e4c2fabbe..fecae227c 100644 --- a/app/Audit/ConcreteFormatters/FeaturedSpeakerAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/FeaturedSpeakerAuditLogFormatter.php @@ -53,6 +53,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Featured speaker '%s' (%s) updated: %s by user %s", $speaker_name, diff --git a/app/Audit/ConcreteFormatters/FileAuditLogFormatter.php b/app/Audit/ConcreteFormatters/FileAuditLogFormatter.php index 18983e0b1..d769e924a 100644 --- a/app/Audit/ConcreteFormatters/FileAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/FileAuditLogFormatter.php @@ -45,6 +45,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "File '%s' (%s) (%d) updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/PrePaidSummitRegistrationDiscountCodeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PrePaidSummitRegistrationDiscountCodeAuditLogFormatter.php index 5a3d76ed9..a3eadb1c1 100644 --- a/app/Audit/ConcreteFormatters/PrePaidSummitRegistrationDiscountCodeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PrePaidSummitRegistrationDiscountCodeAuditLogFormatter.php @@ -72,6 +72,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Pre-Paid Discount Code '%s' (%d) for Summit '%s' updated: %s (current: %s) by user %s", $code, diff --git a/app/Audit/ConcreteFormatters/PresentationAttendeeVoteAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationAttendeeVoteAuditLogFormatter.php index f38d67379..e0d00eb26 100644 --- a/app/Audit/ConcreteFormatters/PresentationAttendeeVoteAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationAttendeeVoteAuditLogFormatter.php @@ -38,6 +38,9 @@ public function format($subject, array $change_set): ?string return sprintf("Presentation Attendee Vote (%s) for '%s' created by user %s", $id, $title, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf("Presentation Attendee Vote (%s) for '%s' updated: %s by user %s", $id, $title, $details, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_DELETION: return sprintf("Presentation Attendee Vote (%s) for '%s' deleted by user %s", $id, $title, $this->getUserInfo()); diff --git a/app/Audit/ConcreteFormatters/PresentationCategoryAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationCategoryAuditLogFormatter.php index d161d51c5..c51a87ba5 100644 --- a/app/Audit/ConcreteFormatters/PresentationCategoryAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationCategoryAuditLogFormatter.php @@ -48,6 +48,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Presentation Category '%s' (%s) (%d) for Summit '%s' updated: %s by user %s", $title, diff --git a/app/Audit/ConcreteFormatters/PresentationCategoryGroupAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationCategoryGroupAuditLogFormatter.php index 4ea4de910..c3cba8e25 100644 --- a/app/Audit/ConcreteFormatters/PresentationCategoryGroupAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationCategoryGroupAuditLogFormatter.php @@ -50,6 +50,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Track Group (PresentationCategoryGroup) '%s' (%s) for Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/PresentationFormatters/BasePresentationAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationFormatters/BasePresentationAuditLogFormatter.php index 2a388e326..0b5b25568 100644 --- a/app/Audit/ConcreteFormatters/PresentationFormatters/BasePresentationAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationFormatters/BasePresentationAuditLogFormatter.php @@ -76,7 +76,7 @@ public function format(mixed $subject, array $change_set): ?string abstract protected function formatCreation(array $data): string; - abstract protected function formatUpdate(array $data, array $change_set): string; + abstract protected function formatUpdate(array $data, array $change_set): ?string; abstract protected function formatDeletion(array $data): string; } diff --git a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationActionTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationActionTypeAuditLogFormatter.php index 53d5933ae..a28d571e2 100644 --- a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationActionTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationActionTypeAuditLogFormatter.php @@ -47,6 +47,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Presentation Action Type '%s' (%d) for Summit '%s' updated: %s by user %s", $label, diff --git a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationEventApiAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationEventApiAuditLogFormatter.php index 70efffb60..375b85008 100644 --- a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationEventApiAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationEventApiAuditLogFormatter.php @@ -30,13 +30,17 @@ protected function formatCreation(array $data): string ); } - protected function formatUpdate(array $data, array $change_set): string + protected function formatUpdate(array $data, array $change_set): ?string { + $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Presentation '%s' (%s) updated: %s by user %s", $data['title'], $data['id'], - $this->buildChangeDetails($change_set), + $change_details, $this->getUserInfo() ); } diff --git a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationLinkAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationLinkAuditLogFormatter.php index a3a87cfbb..6adb24b51 100644 --- a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationLinkAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationLinkAuditLogFormatter.php @@ -49,6 +49,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Presentation Link '%s' (%d) for presentation '%s' updated: %s by user %s", $title, diff --git a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationMediaUploadAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationMediaUploadAuditLogFormatter.php index 0ed1b8099..a832a2df9 100644 --- a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationMediaUploadAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationMediaUploadAuditLogFormatter.php @@ -50,6 +50,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Presentation Media Upload '%s' (%d) for presentation '%s' updated: %s by user %s", $title, diff --git a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSlideAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSlideAuditLogFormatter.php index 8f298f87c..38f1c51c6 100644 --- a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSlideAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSlideAuditLogFormatter.php @@ -47,6 +47,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Presentation Slide '%s' (%d) for presentation '%s' updated: %s by user %s", $title, diff --git a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSpeakerAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSpeakerAuditLogFormatter.php index f772d130e..c2d45f4f5 100644 --- a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSpeakerAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSpeakerAuditLogFormatter.php @@ -47,6 +47,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Speaker '%s' (%s) updated: %s by user %s", $full_name, diff --git a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSpeakerSummitAssistanceConfirmationAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSpeakerSummitAssistanceConfirmationAuditLogFormatter.php index 48a58fdba..697999eb8 100644 --- a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSpeakerSummitAssistanceConfirmationAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSpeakerSummitAssistanceConfirmationAuditLogFormatter.php @@ -51,6 +51,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Speaker Assistance Confirmation (%d) for '%s' on Summit '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSubmissionAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSubmissionAuditLogFormatter.php index 813dcb48a..c8bac36a2 100644 --- a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSubmissionAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationSubmissionAuditLogFormatter.php @@ -30,13 +30,17 @@ protected function formatCreation(array $data): string ); } - protected function formatUpdate(array $data, array $change_set): string + protected function formatUpdate(array $data, array $change_set): ?string { + $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Presentation '%s' (%s) updated: %s by user %s", $data['title'], $data['id'], - $this->buildChangeDetails($change_set), + $change_details, $this->getUserInfo() ); } diff --git a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationTrackChairRatingTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationTrackChairRatingTypeAuditLogFormatter.php index b87576d68..7c1df4399 100644 --- a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationTrackChairRatingTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationTrackChairRatingTypeAuditLogFormatter.php @@ -44,6 +44,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Track Chair Rating Type '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationTrackChairScoreTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationTrackChairScoreTypeAuditLogFormatter.php index 7dae84e8e..e52e98a84 100644 --- a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationTrackChairScoreTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationTrackChairScoreTypeAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Score Type '%s' updated: %s by user %s", $label, diff --git a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationUserSubmissionAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationUserSubmissionAuditLogFormatter.php index 1c17a3e32..5d589b394 100644 --- a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationUserSubmissionAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationUserSubmissionAuditLogFormatter.php @@ -40,6 +40,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Presentation '%s' (%d) updated: %s by user %s", $title, diff --git a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationVideoAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationVideoAuditLogFormatter.php index 0b911c767..f3b649bea 100644 --- a/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationVideoAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationFormatters/PresentationVideoAuditLogFormatter.php @@ -49,6 +49,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Presentation Video '%s' (%d) for presentation '%s' updated: %s by user %s", $title, diff --git a/app/Audit/ConcreteFormatters/PresentationTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/PresentationTypeAuditLogFormatter.php index 5ff8b051b..2010326a1 100644 --- a/app/Audit/ConcreteFormatters/PresentationTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/PresentationTypeAuditLogFormatter.php @@ -50,6 +50,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Presentation Type '%s' (%d) for Summit '%s' updated: %s by user %s", $type_name, diff --git a/app/Audit/ConcreteFormatters/RSVPAuditLogFormatter.php b/app/Audit/ConcreteFormatters/RSVPAuditLogFormatter.php index 883a0930e..627d60c44 100644 --- a/app/Audit/ConcreteFormatters/RSVPAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/RSVPAuditLogFormatter.php @@ -56,6 +56,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "RSVP (ID: %s) for event '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/RSVPInvitationAuditLogFormatter.php b/app/Audit/ConcreteFormatters/RSVPInvitationAuditLogFormatter.php index 345080bba..94fcf2e8c 100644 --- a/app/Audit/ConcreteFormatters/RSVPInvitationAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/RSVPInvitationAuditLogFormatter.php @@ -48,6 +48,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "RSVP invitation (ID: %s) for attendee '%s' to event '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/RSVPQuestionTemplateAuditLogFormatter.php b/app/Audit/ConcreteFormatters/RSVPQuestionTemplateAuditLogFormatter.php index 8b1709491..3b85017e9 100644 --- a/app/Audit/ConcreteFormatters/RSVPQuestionTemplateAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/RSVPQuestionTemplateAuditLogFormatter.php @@ -52,6 +52,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "%s question '%s' (ID: %s) in RSVP template (ID: %s) updated: %s by user %s", $className, diff --git a/app/Audit/ConcreteFormatters/RSVPTemplateAuditLogFormatter.php b/app/Audit/ConcreteFormatters/RSVPTemplateAuditLogFormatter.php index 086b77638..b32299f75 100644 --- a/app/Audit/ConcreteFormatters/RSVPTemplateAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/RSVPTemplateAuditLogFormatter.php @@ -55,6 +55,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "RSVP Template '%s' (%d) for Summit '%s' updated: %s by user %s", $title, diff --git a/app/Audit/ConcreteFormatters/ScheduledSummitLocationBannerAuditLogFormatter.php b/app/Audit/ConcreteFormatters/ScheduledSummitLocationBannerAuditLogFormatter.php index 0cad8a791..d26d9da6b 100644 --- a/app/Audit/ConcreteFormatters/ScheduledSummitLocationBannerAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/ScheduledSummitLocationBannerAuditLogFormatter.php @@ -50,6 +50,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Scheduled Location Banner '%s' (%d) for Location '%s' in Summit '%s' updated: %s by user %s", $title, diff --git a/app/Audit/ConcreteFormatters/SelectionPlanAllowedEditablePresentationQuestionAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SelectionPlanAllowedEditablePresentationQuestionAuditLogFormatter.php index 306b8d595..4ec90d734 100644 --- a/app/Audit/ConcreteFormatters/SelectionPlanAllowedEditablePresentationQuestionAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SelectionPlanAllowedEditablePresentationQuestionAuditLogFormatter.php @@ -48,6 +48,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Selection Plan Allowed Editable Presentation Question (%s) type '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SelectionPlanAllowedPresentationQuestionAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SelectionPlanAllowedPresentationQuestionAuditLogFormatter.php index 79256eb34..a8c1972d5 100644 --- a/app/Audit/ConcreteFormatters/SelectionPlanAllowedPresentationQuestionAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SelectionPlanAllowedPresentationQuestionAuditLogFormatter.php @@ -48,6 +48,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Selection Plan Allowed Presentation Question (%s) type '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SelectionPlanAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SelectionPlanAuditLogFormatter.php index 07be883a7..429debb02 100644 --- a/app/Audit/ConcreteFormatters/SelectionPlanAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SelectionPlanAuditLogFormatter.php @@ -64,6 +64,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Selection Plan '%s' (%d) for Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SpeakerAssistanceAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SpeakerAssistanceAuditLogFormatter.php index c46827e55..1137e0343 100644 --- a/app/Audit/ConcreteFormatters/SpeakerAssistanceAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SpeakerAssistanceAuditLogFormatter.php @@ -57,6 +57,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Speaker assistance for '%s' (%s) on Summit '%s' updated: %s by user %s", $speaker_name, diff --git a/app/Audit/ConcreteFormatters/SpeakerRegistrationRequestAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SpeakerRegistrationRequestAuditLogFormatter.php index 4a3f263cb..7804439cb 100644 --- a/app/Audit/ConcreteFormatters/SpeakerRegistrationRequestAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SpeakerRegistrationRequestAuditLogFormatter.php @@ -45,6 +45,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Speaker registration request for '%s' updated: %s by user %s", $email, diff --git a/app/Audit/ConcreteFormatters/SponsorAdAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorAdAuditLogFormatter.php index d71deb701..2b6d3f0ff 100644 --- a/app/Audit/ConcreteFormatters/SponsorAdAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SponsorAdAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf( "Sponsor Ad '%s' for Sponsor %s updated: %s by user %s", $text, diff --git a/app/Audit/ConcreteFormatters/SponsorAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorAuditLogFormatter.php index 65be986e6..d77759fee 100644 --- a/app/Audit/ConcreteFormatters/SponsorAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SponsorAuditLogFormatter.php @@ -49,6 +49,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Sponsor (%d) for Company '%s' in Summit '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SponsorBadgeScanAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorBadgeScanAuditLogFormatter.php index 73bb47c8e..e32c7d643 100644 --- a/app/Audit/ConcreteFormatters/SponsorBadgeScanAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SponsorBadgeScanAuditLogFormatter.php @@ -50,6 +50,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf( "Sponsor Badge Scan (ID: %s) for Sponsor %s updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SponsorBadgeScanExtraQuestionAnswerAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorBadgeScanExtraQuestionAnswerAuditLogFormatter.php index 10f9de76c..92df7c8f4 100644 --- a/app/Audit/ConcreteFormatters/SponsorBadgeScanExtraQuestionAnswerAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SponsorBadgeScanExtraQuestionAnswerAuditLogFormatter.php @@ -49,6 +49,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf( "Sponsor Badge Scan Extra Question Answer (ID: %s) for question '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SponsorMaterialAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorMaterialAuditLogFormatter.php index e1032b48d..3ab635a12 100644 --- a/app/Audit/ConcreteFormatters/SponsorMaterialAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SponsorMaterialAuditLogFormatter.php @@ -50,6 +50,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf( "Sponsor Material (ID: %s) '%s' for Sponsor %s updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SponsorSocialNetworkAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorSocialNetworkAuditLogFormatter.php index 8410cd7b3..8919fe62d 100644 --- a/app/Audit/ConcreteFormatters/SponsorSocialNetworkAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SponsorSocialNetworkAuditLogFormatter.php @@ -48,6 +48,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf( "Sponsor Social Network (ID: %s) for Sponsor %s updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SponsorSummitRegistrationDiscountCodeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorSummitRegistrationDiscountCodeAuditLogFormatter.php index 0fb6dd04d..ff8e19131 100644 --- a/app/Audit/ConcreteFormatters/SponsorSummitRegistrationDiscountCodeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SponsorSummitRegistrationDiscountCodeAuditLogFormatter.php @@ -68,6 +68,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf( "Sponsor Registration Discount Code '%s' (ID: %s) in Summit '%s' updated: %s (current: %s) by user %s", $code, diff --git a/app/Audit/ConcreteFormatters/SponsorSummitRegistrationPromoCodeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorSummitRegistrationPromoCodeAuditLogFormatter.php index abbe1b366..b6d2387fc 100644 --- a/app/Audit/ConcreteFormatters/SponsorSummitRegistrationPromoCodeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SponsorSummitRegistrationPromoCodeAuditLogFormatter.php @@ -48,6 +48,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf( "Sponsor Registration Promo Code '%s' (ID: %s) in Summit '%s' updated: %s by user %s", $code, diff --git a/app/Audit/ConcreteFormatters/SponsorUserInfoGrantAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SponsorUserInfoGrantAuditLogFormatter.php index dbb9c04c3..b2b34a1e7 100644 --- a/app/Audit/ConcreteFormatters/SponsorUserInfoGrantAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SponsorUserInfoGrantAuditLogFormatter.php @@ -47,6 +47,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf( "Sponsor User Info Grant (ID: %s) for Sponsor %s updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SubmissionInvitationAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SubmissionInvitationAuditLogFormatter.php index ef8d4e316..9793c4b25 100644 --- a/app/Audit/ConcreteFormatters/SubmissionInvitationAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SubmissionInvitationAuditLogFormatter.php @@ -53,6 +53,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Submission invitation for '%s' (%s) updated: %s by user %s", $email, diff --git a/app/Audit/ConcreteFormatters/SummitAccessLevelTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitAccessLevelTypeAuditLogFormatter.php index 82623fcc4..8c25d09bf 100644 --- a/app/Audit/ConcreteFormatters/SummitAccessLevelTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitAccessLevelTypeAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Access Level Type '%s' (%s) in Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitAirportAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitAirportAuditLogFormatter.php index d42c0f950..6f99b1ebf 100644 --- a/app/Audit/ConcreteFormatters/SummitAirportAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitAirportAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Summit Airport '%s' (%d) for Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitAttendeeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitAttendeeAuditLogFormatter.php index 3e2a04297..2d3cc1abd 100644 --- a/app/Audit/ConcreteFormatters/SummitAttendeeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitAttendeeAuditLogFormatter.php @@ -38,6 +38,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf("Attendee (%s) '%s' updated: %s by user %s", $id, $name, $details, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_DELETION: diff --git a/app/Audit/ConcreteFormatters/SummitAttendeeBadgeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitAttendeeBadgeAuditLogFormatter.php index 41d919d03..780d3f5de 100644 --- a/app/Audit/ConcreteFormatters/SummitAttendeeBadgeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitAttendeeBadgeAuditLogFormatter.php @@ -39,6 +39,9 @@ public function format($subject, array $change_set): ?string return sprintf("Attendee Badge (%s) for '%s' created by user %s", $id, $owner_name, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf("Attendee Badge (%s) for '%s' updated: %s by user %s", $id, $owner_name, $details, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_DELETION: return sprintf("Attendee Badge (%s) for '%s' deleted by user %s", $id, $owner_name, $this->getUserInfo()); diff --git a/app/Audit/ConcreteFormatters/SummitAttendeeNoteAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitAttendeeNoteAuditLogFormatter.php index 20ada397e..3923d962b 100644 --- a/app/Audit/ConcreteFormatters/SummitAttendeeNoteAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitAttendeeNoteAuditLogFormatter.php @@ -38,6 +38,9 @@ public function format($subject, array $change_set): ?string return sprintf("Attendee Note (%s) for '%s' created by user %s", $id, $owner_name, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf("Attendee Note (%s) for '%s' updated: %s by user %s", $id, $owner_name, $details, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_DELETION: return sprintf("Attendee Note (%s) for '%s' deleted by user %s", $id, $owner_name, $this->getUserInfo()); diff --git a/app/Audit/ConcreteFormatters/SummitAttendeeTicketAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitAttendeeTicketAuditLogFormatter.php index f3298f8e1..082b89670 100644 --- a/app/Audit/ConcreteFormatters/SummitAttendeeTicketAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitAttendeeTicketAuditLogFormatter.php @@ -38,6 +38,9 @@ public function format($subject, array $change_set): ?string return sprintf("Attendee Ticket (%s) for '%s' created by user %s", $id, $owner_name, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf("Attendee Ticket (%s) for '%s' updated: %s by user %s", $id, $owner_name, $details, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_DELETION: return sprintf("Attendee Ticket (%s) for '%s' deleted by user %s", $id, $owner_name, $this->getUserInfo()); diff --git a/app/Audit/ConcreteFormatters/SummitAttendeeTicketTaxAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitAttendeeTicketTaxAuditLogFormatter.php index 680f380f4..be9a66f1a 100644 --- a/app/Audit/ConcreteFormatters/SummitAttendeeTicketTaxAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitAttendeeTicketTaxAuditLogFormatter.php @@ -41,6 +41,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf("Attendee Ticket Tax (%s) '%s' for ticket %s updated: %s by user %s", $id, $tax_name, $ticket_id, $details, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_DELETION: diff --git a/app/Audit/ConcreteFormatters/SummitAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitAuditLogFormatter.php index 7d4b0b10f..4a3dec4ab 100644 --- a/app/Audit/ConcreteFormatters/SummitAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitAuditLogFormatter.php @@ -43,6 +43,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Summit '%s' (%d) updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitBadgeFeatureTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitBadgeFeatureTypeAuditLogFormatter.php index 2f6515528..ee3631afc 100644 --- a/app/Audit/ConcreteFormatters/SummitBadgeFeatureTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitBadgeFeatureTypeAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Badge Feature Type '%s' (%s) in Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitBadgeTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitBadgeTypeAuditLogFormatter.php index ab85cdf60..130fe320c 100644 --- a/app/Audit/ConcreteFormatters/SummitBadgeTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitBadgeTypeAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Badge Type '%s' (%s) in Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitBadgeViewTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitBadgeViewTypeAuditLogFormatter.php index a0811acf7..112f42ca3 100644 --- a/app/Audit/ConcreteFormatters/SummitBadgeViewTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitBadgeViewTypeAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Badge View Type '%s' (%s) in Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitBookableVenueRoomAttributeTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitBookableVenueRoomAttributeTypeAuditLogFormatter.php index 2596e30c2..9e3424d3e 100644 --- a/app/Audit/ConcreteFormatters/SummitBookableVenueRoomAttributeTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitBookableVenueRoomAttributeTypeAuditLogFormatter.php @@ -45,6 +45,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Summit Bookable Venue Room Attribute Type (%s) '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SummitBookableVenueRoomAttributeValueAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitBookableVenueRoomAttributeValueAuditLogFormatter.php index 81561ad31..78023d31b 100644 --- a/app/Audit/ConcreteFormatters/SummitBookableVenueRoomAttributeValueAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitBookableVenueRoomAttributeValueAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Summit Bookable Venue Room Attribute Value (%d) '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SummitBookableVenueRoomAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitBookableVenueRoomAuditLogFormatter.php index a303b548c..10240ce78 100644 --- a/app/Audit/ConcreteFormatters/SummitBookableVenueRoomAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitBookableVenueRoomAuditLogFormatter.php @@ -51,6 +51,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Bookable Venue Room '%s' (%d) in Venue '%s' for Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitEventAttendanceMetricAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitEventAttendanceMetricAuditLogFormatter.php index 93a597d40..d93c8f067 100644 --- a/app/Audit/ConcreteFormatters/SummitEventAttendanceMetricAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitEventAttendanceMetricAuditLogFormatter.php @@ -50,6 +50,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Attendance Metric (%d) for event '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SummitEventAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitEventAuditLogFormatter.php index 63f197c9d..760f660fe 100644 --- a/app/Audit/ConcreteFormatters/SummitEventAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitEventAuditLogFormatter.php @@ -47,6 +47,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Summit Event '%s' (%d) for Summit '%s' updated: %s by user %s", $title, diff --git a/app/Audit/ConcreteFormatters/SummitEventTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitEventTypeAuditLogFormatter.php index 087d9b614..5225b70cd 100644 --- a/app/Audit/ConcreteFormatters/SummitEventTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitEventTypeAuditLogFormatter.php @@ -53,6 +53,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Event Type '%s' (%d) for Summit '%s' updated: %s by user %s", $type, diff --git a/app/Audit/ConcreteFormatters/SummitExternalLocationAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitExternalLocationAuditLogFormatter.php index 7c8ce6103..ef92cf191 100644 --- a/app/Audit/ConcreteFormatters/SummitExternalLocationAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitExternalLocationAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "External Location '%s' (%d) for Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitGeoLocatedLocationAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitGeoLocatedLocationAuditLogFormatter.php index 2f52254b1..08796ced0 100644 --- a/app/Audit/ConcreteFormatters/SummitGeoLocatedLocationAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitGeoLocatedLocationAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Geo-Located Location '%s' (%d) for Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitHotelAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitHotelAuditLogFormatter.php index 203d05df8..82328aeec 100644 --- a/app/Audit/ConcreteFormatters/SummitHotelAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitHotelAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Summit Hotel '%s' (%d) for Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitLocationBannerAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitLocationBannerAuditLogFormatter.php index 97992b291..69f8b194e 100644 --- a/app/Audit/ConcreteFormatters/SummitLocationBannerAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitLocationBannerAuditLogFormatter.php @@ -50,6 +50,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Location Banner '%s' (%d) for Location '%s' in Summit '%s' updated: %s by user %s", $title, diff --git a/app/Audit/ConcreteFormatters/SummitLocationImageAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitLocationImageAuditLogFormatter.php index 63d34d581..59a61586c 100644 --- a/app/Audit/ConcreteFormatters/SummitLocationImageAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitLocationImageAuditLogFormatter.php @@ -50,6 +50,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Location Image '%s' (%d) for Location '%s' in Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitMediaUploadTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitMediaUploadTypeAuditLogFormatter.php index 76c4da7fa..8d3ab86b3 100644 --- a/app/Audit/ConcreteFormatters/SummitMediaUploadTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitMediaUploadTypeAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Media Upload Type '%s' (%d) for Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitMemberScheduleAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitMemberScheduleAuditLogFormatter.php index d9c45a969..40e1e8c48 100644 --- a/app/Audit/ConcreteFormatters/SummitMemberScheduleAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitMemberScheduleAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Activity '%s' (%s) in user custom schedule updated: %s by user %s", $event_title, diff --git a/app/Audit/ConcreteFormatters/SummitMetricAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitMetricAuditLogFormatter.php index 413847097..f77026556 100644 --- a/app/Audit/ConcreteFormatters/SummitMetricAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitMetricAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Summit Metric Type '%s' (%d) for Summit '%s' updated: %s by user %s", $type, diff --git a/app/Audit/ConcreteFormatters/SummitOrderAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitOrderAuditLogFormatter.php index 0640a3489..c664edcb8 100644 --- a/app/Audit/ConcreteFormatters/SummitOrderAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitOrderAuditLogFormatter.php @@ -42,6 +42,9 @@ public function format($subject, array $change_set): ?string return sprintf("Order '%s' (%s) created for '%s' in Summit '%s' with status '%s' by user %s", $order_number, $id, $owner_email, $summit_name, $status, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf("Order '%s' (%s) in Summit '%s' updated: %s by user %s", $order_number, $id, $summit_name, $details, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_DELETION: return sprintf("Order '%s' (%s) in Summit '%s' deleted by user %s", $order_number, $id, $summit_name, $this->getUserInfo()); diff --git a/app/Audit/ConcreteFormatters/SummitOrderExtraQuestionTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitOrderExtraQuestionTypeAuditLogFormatter.php index fa3d22aa3..2e69fdb35 100644 --- a/app/Audit/ConcreteFormatters/SummitOrderExtraQuestionTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitOrderExtraQuestionTypeAuditLogFormatter.php @@ -40,6 +40,9 @@ public function format($subject, array $change_set): ?string return sprintf("Order Extra Question '%s' (%s) of type '%s' created in Summit '%s' by user %s", $label, $id, $question_type, $summit_name, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf("Order Extra Question '%s' (%s) in Summit '%s' updated: %s by user %s", $label, $id, $summit_name, $details, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_DELETION: return sprintf("Order Extra Question '%s' (%s) in Summit '%s' deleted by user %s", $label, $id, $summit_name, $this->getUserInfo()); diff --git a/app/Audit/ConcreteFormatters/SummitPresentationCommentAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitPresentationCommentAuditLogFormatter.php index db473e23f..c214f8c79 100644 --- a/app/Audit/ConcreteFormatters/SummitPresentationCommentAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitPresentationCommentAuditLogFormatter.php @@ -47,6 +47,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Presentation Comment (%d) on '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SummitProposedScheduleAllowedLocationAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitProposedScheduleAllowedLocationAuditLogFormatter.php index 2870e3ec2..c9a45cbd3 100644 --- a/app/Audit/ConcreteFormatters/SummitProposedScheduleAllowedLocationAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitProposedScheduleAllowedLocationAuditLogFormatter.php @@ -47,6 +47,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Proposed Schedule Allowed Location (%d) Track '%s' Location '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SummitRefundPolicyTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitRefundPolicyTypeAuditLogFormatter.php index 52c9e9fe3..348f2bc78 100644 --- a/app/Audit/ConcreteFormatters/SummitRefundPolicyTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitRefundPolicyTypeAuditLogFormatter.php @@ -50,6 +50,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Refund Policy '%s' (%d) for Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitRegistrationFeedMetadataAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitRegistrationFeedMetadataAuditLogFormatter.php index 325c91320..f37088413 100644 --- a/app/Audit/ConcreteFormatters/SummitRegistrationFeedMetadataAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitRegistrationFeedMetadataAuditLogFormatter.php @@ -48,6 +48,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $key = $subject->getKey() ?? 'Unknown Key'; $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Summit Registration Feed Metadata (%s) key '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SummitSelectedPresentationAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitSelectedPresentationAuditLogFormatter.php index cbadfbb4a..0afccfd09 100644 --- a/app/Audit/ConcreteFormatters/SummitSelectedPresentationAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitSelectedPresentationAuditLogFormatter.php @@ -49,6 +49,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Selected Presentation (%d) '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SummitSelectedPresentationListAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitSelectedPresentationListAuditLogFormatter.php index 34c889bb6..4eca5172c 100644 --- a/app/Audit/ConcreteFormatters/SummitSelectedPresentationListAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitSelectedPresentationListAuditLogFormatter.php @@ -51,6 +51,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Selected Presentation List (%d) '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SummitSponsorExtraQuestionTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitSponsorExtraQuestionTypeAuditLogFormatter.php index a806013d2..ee5105f55 100644 --- a/app/Audit/ConcreteFormatters/SummitSponsorExtraQuestionTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitSponsorExtraQuestionTypeAuditLogFormatter.php @@ -48,6 +48,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf( "Sponsor Extra Question '%s' (ID: %s) for Sponsor %s updated: %s by user %s", $label, diff --git a/app/Audit/ConcreteFormatters/SummitSponsorshipAddOnAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitSponsorshipAddOnAuditLogFormatter.php index 7bdaa4c49..836760c55 100644 --- a/app/Audit/ConcreteFormatters/SummitSponsorshipAddOnAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitSponsorshipAddOnAuditLogFormatter.php @@ -39,6 +39,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $details = $this->buildChangeDetails($change_set); + if ($details === null) { + return null; + } return sprintf("Sponsorship Add-On (%s) '%s' (%s) updated: %s by user %s", $id, $name, $type, $details, $this->getUserInfo()); case IAuditStrategy::EVENT_ENTITY_DELETION: diff --git a/app/Audit/ConcreteFormatters/SummitSponsorshipAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitSponsorshipAuditLogFormatter.php index 280f0e224..f5a3ffcd8 100644 --- a/app/Audit/ConcreteFormatters/SummitSponsorshipAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitSponsorshipAuditLogFormatter.php @@ -47,6 +47,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Summit Sponsorship (%d) for Sponsor '%s' Type '%s' updated: %s by user %s", $id, diff --git a/app/Audit/ConcreteFormatters/SummitTaxTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitTaxTypeAuditLogFormatter.php index aa73435b9..fdc949ad5 100644 --- a/app/Audit/ConcreteFormatters/SummitTaxTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitTaxTypeAuditLogFormatter.php @@ -50,6 +50,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Tax Type '%s' (%d) for Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitTicketTypeAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitTicketTypeAuditLogFormatter.php index 830f5c4f9..d25c19308 100644 --- a/app/Audit/ConcreteFormatters/SummitTicketTypeAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitTicketTypeAuditLogFormatter.php @@ -54,6 +54,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Ticket Type '%s' (%d) for Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitTrackChairAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitTrackChairAuditLogFormatter.php index 07780e471..11cd255c1 100644 --- a/app/Audit/ConcreteFormatters/SummitTrackChairAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitTrackChairAuditLogFormatter.php @@ -50,6 +50,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Track Chair '%s' updated: %s by user %s", $member_name, diff --git a/app/Audit/ConcreteFormatters/SummitVenueAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitVenueAuditLogFormatter.php index 4ac585993..8934e2e17 100644 --- a/app/Audit/ConcreteFormatters/SummitVenueAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitVenueAuditLogFormatter.php @@ -46,6 +46,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Summit Venue '%s' (%d) for Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitVenueFloorAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitVenueFloorAuditLogFormatter.php index 31a7a90c1..f9c38bff3 100644 --- a/app/Audit/ConcreteFormatters/SummitVenueFloorAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitVenueFloorAuditLogFormatter.php @@ -52,6 +52,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Venue Floor '%s' (Floor #%d) (%d) in Venue '%s' for Summit '%s' updated: %s by user %s", $name, diff --git a/app/Audit/ConcreteFormatters/SummitVenueRoomAuditLogFormatter.php b/app/Audit/ConcreteFormatters/SummitVenueRoomAuditLogFormatter.php index 061e53a0c..e4fc0f7f6 100644 --- a/app/Audit/ConcreteFormatters/SummitVenueRoomAuditLogFormatter.php +++ b/app/Audit/ConcreteFormatters/SummitVenueRoomAuditLogFormatter.php @@ -51,6 +51,9 @@ public function format($subject, array $change_set): ?string case IAuditStrategy::EVENT_ENTITY_UPDATE: $change_details = $this->buildChangeDetails($change_set); + if ($change_details === null) { + return null; + } return sprintf( "Venue Room '%s' (%d) in Venue '%s' for Summit '%s' updated: %s by user %s", $name, diff --git a/tests/OpenTelemetry/Formatters/ExtraQuestionTypeValueAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/ExtraQuestionTypeValueAuditLogFormatterTest.php index 23e2e671e..73a093b69 100644 --- a/tests/OpenTelemetry/Formatters/ExtraQuestionTypeValueAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/ExtraQuestionTypeValueAuditLogFormatterTest.php @@ -93,7 +93,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/FileAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/FileAuditLogFormatterTest.php index 12a2fd817..d9160c2a8 100644 --- a/tests/OpenTelemetry/Formatters/FileAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/FileAuditLogFormatterTest.php @@ -98,9 +98,8 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} public function testPropertiesExist(): void { diff --git a/tests/OpenTelemetry/Formatters/PrePaidSummitRegistrationDiscountCodeAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/PrePaidSummitRegistrationDiscountCodeAuditLogFormatterTest.php index 082cb2388..64c8e0994 100644 --- a/tests/OpenTelemetry/Formatters/PrePaidSummitRegistrationDiscountCodeAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/PrePaidSummitRegistrationDiscountCodeAuditLogFormatterTest.php @@ -221,7 +221,7 @@ public function testFormatterHandlesEmptyChangeSet(): void $code = $this->createMockCode("Empty", 0, 0, 0); $result = $this->formatter_update->format($code, []); - $this->assertStringContainsString("properties without changes registered", $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/ScheduledSummitLocationBannerAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/ScheduledSummitLocationBannerAuditLogFormatterTest.php index ffb12774a..0fbb95bf5 100644 --- a/tests/OpenTelemetry/Formatters/ScheduledSummitLocationBannerAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/ScheduledSummitLocationBannerAuditLogFormatterTest.php @@ -106,9 +106,8 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} public function testPropertiesExist(): void { diff --git a/tests/OpenTelemetry/Formatters/SponsorAdFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorAdFormatterTest.php index cdbe79b8c..a86ae8423 100644 --- a/tests/OpenTelemetry/Formatters/SponsorAdFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SponsorAdFormatterTest.php @@ -101,7 +101,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SponsorBadgeScanExtraQuestionAnswerFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorBadgeScanExtraQuestionAnswerFormatterTest.php index ee5a9bf2c..22f43cf27 100644 --- a/tests/OpenTelemetry/Formatters/SponsorBadgeScanExtraQuestionAnswerFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SponsorBadgeScanExtraQuestionAnswerFormatterTest.php @@ -100,7 +100,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SponsorBadgeScanFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorBadgeScanFormatterTest.php index 947964d46..a9f151a61 100644 --- a/tests/OpenTelemetry/Formatters/SponsorBadgeScanFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SponsorBadgeScanFormatterTest.php @@ -106,7 +106,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SponsorFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorFormatterTest.php index d9aea8453..8c10f5219 100644 --- a/tests/OpenTelemetry/Formatters/SponsorFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SponsorFormatterTest.php @@ -99,7 +99,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SponsorMaterialFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorMaterialFormatterTest.php index 8e86cae39..96fdb3f6e 100644 --- a/tests/OpenTelemetry/Formatters/SponsorMaterialFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SponsorMaterialFormatterTest.php @@ -102,7 +102,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SponsorSocialNetworkFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorSocialNetworkFormatterTest.php index 6fd5fb14e..5184c1598 100644 --- a/tests/OpenTelemetry/Formatters/SponsorSocialNetworkFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SponsorSocialNetworkFormatterTest.php @@ -100,7 +100,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationDiscountCodeFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationDiscountCodeFormatterTest.php index a2df204a6..6aaf79dd7 100644 --- a/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationDiscountCodeFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationDiscountCodeFormatterTest.php @@ -101,7 +101,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationPromoCodeFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationPromoCodeFormatterTest.php index f41fea90b..8ea689a29 100644 --- a/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationPromoCodeFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SponsorSummitRegistrationPromoCodeFormatterTest.php @@ -94,7 +94,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SponsorUserInfoGrantFormatterTest.php b/tests/OpenTelemetry/Formatters/SponsorUserInfoGrantFormatterTest.php index 9f6a7c747..168dd94d2 100644 --- a/tests/OpenTelemetry/Formatters/SponsorUserInfoGrantFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SponsorUserInfoGrantFormatterTest.php @@ -101,7 +101,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SummitAccessLevelTypeAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitAccessLevelTypeAuditLogFormatterTest.php index 72292c652..b09f2ce3f 100644 --- a/tests/OpenTelemetry/Formatters/SummitAccessLevelTypeAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitAccessLevelTypeAuditLogFormatterTest.php @@ -117,10 +117,8 @@ public function testFormatterHandlesEmptyChangeSet(): void $this->formatter_update->setContext($this->audit_context); $result = $this->formatter_update->format($access_level, []); - $this->assertNotNull($result); - $this->assertStringContainsString("Test Access", $result); - $this->assertStringContainsString("updated", $result); - } + $this->assertNull($result); +} public function testPropertiesExist(): void { diff --git a/tests/OpenTelemetry/Formatters/SummitAttendeeBadgeAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitAttendeeBadgeAuditLogFormatterTest.php index 5d98b7f9d..5f1690a26 100644 --- a/tests/OpenTelemetry/Formatters/SummitAttendeeBadgeAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitAttendeeBadgeAuditLogFormatterTest.php @@ -106,7 +106,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SummitAttendeeNoteAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitAttendeeNoteAuditLogFormatterTest.php index 8a045faf1..d214fb91e 100644 --- a/tests/OpenTelemetry/Formatters/SummitAttendeeNoteAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitAttendeeNoteAuditLogFormatterTest.php @@ -101,7 +101,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SummitAttendeeTicketAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitAttendeeTicketAuditLogFormatterTest.php index 00b8dd80a..cc50b5d8c 100644 --- a/tests/OpenTelemetry/Formatters/SummitAttendeeTicketAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitAttendeeTicketAuditLogFormatterTest.php @@ -113,7 +113,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SummitBadgeFeatureTypeAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitBadgeFeatureTypeAuditLogFormatterTest.php index 11291829d..c175223ea 100644 --- a/tests/OpenTelemetry/Formatters/SummitBadgeFeatureTypeAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitBadgeFeatureTypeAuditLogFormatterTest.php @@ -119,10 +119,8 @@ public function testFormatterHandlesEmptyChangeSet(): void $this->formatter_update->setContext($this->audit_context); $result = $this->formatter_update->format($badge_feature, []); - $this->assertNotNull($result); - $this->assertStringContainsString("Test Feature", $result); - $this->assertStringContainsString("updated", $result); - } + $this->assertNull($result); +} public function testPropertiesExist(): void { diff --git a/tests/OpenTelemetry/Formatters/SummitBadgeTypeAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitBadgeTypeAuditLogFormatterTest.php index 1965773ff..413c234eb 100644 --- a/tests/OpenTelemetry/Formatters/SummitBadgeTypeAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitBadgeTypeAuditLogFormatterTest.php @@ -120,10 +120,8 @@ public function testFormatterHandlesEmptyChangeSet(): void $this->formatter_update->setContext($this->audit_context); $result = $this->formatter_update->format($badge_type, []); - $this->assertNotNull($result); - $this->assertStringContainsString("Test Badge Type", $result); - $this->assertStringContainsString("updated", $result); - } + $this->assertNull($result); +} public function testPropertiesExist(): void { diff --git a/tests/OpenTelemetry/Formatters/SummitBadgeViewTypeAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitBadgeViewTypeAuditLogFormatterTest.php index 781f390a0..0f294b0fa 100644 --- a/tests/OpenTelemetry/Formatters/SummitBadgeViewTypeAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitBadgeViewTypeAuditLogFormatterTest.php @@ -119,10 +119,8 @@ public function testFormatterHandlesEmptyChangeSet(): void $this->formatter_update->setContext($this->audit_context); $result = $this->formatter_update->format($badge_view, []); - $this->assertNotNull($result); - $this->assertStringContainsString("Test Badge", $result); - $this->assertStringContainsString("updated", $result); - } + $this->assertNull($result); +} public function testPropertiesExist(): void { diff --git a/tests/OpenTelemetry/Formatters/SummitBookableVenueRoomAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitBookableVenueRoomAuditLogFormatterTest.php index c592698c0..89e9f1d25 100644 --- a/tests/OpenTelemetry/Formatters/SummitBookableVenueRoomAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitBookableVenueRoomAuditLogFormatterTest.php @@ -105,9 +105,8 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} public function testPropertiesExist(): void { diff --git a/tests/OpenTelemetry/Formatters/SummitEventTypeFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitEventTypeFormatterTest.php index a131fd8c0..2c8cc9b19 100644 --- a/tests/OpenTelemetry/Formatters/SummitEventTypeFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitEventTypeFormatterTest.php @@ -102,9 +102,8 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} public function testFormatterHandlesNullCompanyAndSummit(): void { diff --git a/tests/OpenTelemetry/Formatters/SummitLocationBannerAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitLocationBannerAuditLogFormatterTest.php index 7a6b829d1..3b01e448f 100644 --- a/tests/OpenTelemetry/Formatters/SummitLocationBannerAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitLocationBannerAuditLogFormatterTest.php @@ -104,9 +104,8 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} public function testPropertiesExist(): void { diff --git a/tests/OpenTelemetry/Formatters/SummitLocationImageAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitLocationImageAuditLogFormatterTest.php index 4887772f8..2a53d8969 100644 --- a/tests/OpenTelemetry/Formatters/SummitLocationImageAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitLocationImageAuditLogFormatterTest.php @@ -104,9 +104,8 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} public function testPropertiesExist(): void { diff --git a/tests/OpenTelemetry/Formatters/SummitOrderAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitOrderAuditLogFormatterTest.php index 139bd4598..f42cc7ab6 100644 --- a/tests/OpenTelemetry/Formatters/SummitOrderAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitOrderAuditLogFormatterTest.php @@ -99,7 +99,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SummitOrderExtraQuestionTypeAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitOrderExtraQuestionTypeAuditLogFormatterTest.php index c5ba74a4b..fc8c9522b 100644 --- a/tests/OpenTelemetry/Formatters/SummitOrderExtraQuestionTypeAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitOrderExtraQuestionTypeAuditLogFormatterTest.php @@ -94,7 +94,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SummitRefundPolicyTypeAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitRefundPolicyTypeAuditLogFormatterTest.php index 3caa8bb10..db4e4510f 100644 --- a/tests/OpenTelemetry/Formatters/SummitRefundPolicyTypeAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitRefundPolicyTypeAuditLogFormatterTest.php @@ -122,7 +122,7 @@ public function testFormatterHandlesEmptyChangeSet(): void $result = $this->formatter_update->format($policy, []); - $this->assertStringContainsString("properties without changes registered", $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SummitSponsorExtraQuestionTypeAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitSponsorExtraQuestionTypeAuditLogFormatterTest.php index e76b27234..d8c532727 100644 --- a/tests/OpenTelemetry/Formatters/SummitSponsorExtraQuestionTypeAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitSponsorExtraQuestionTypeAuditLogFormatterTest.php @@ -101,7 +101,6 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SummitTaxTypeAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitTaxTypeAuditLogFormatterTest.php index 5ff9653d4..f92b5705a 100644 --- a/tests/OpenTelemetry/Formatters/SummitTaxTypeAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitTaxTypeAuditLogFormatterTest.php @@ -136,7 +136,7 @@ public function testFormatterHandlesEmptyChangeSet(): void $code = $this->createMockTax('Empty Tax', 'EMPTY', 10.0); $result = $this->formatter_update->format($code, []); - $this->assertStringContainsString("properties without changes registered", $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SummitTicketTypeAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitTicketTypeAuditLogFormatterTest.php index 2108ec80d..440d218c9 100644 --- a/tests/OpenTelemetry/Formatters/SummitTicketTypeAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitTicketTypeAuditLogFormatterTest.php @@ -142,7 +142,7 @@ public function testFormatterHandlesEmptyChangeSet(): void $ticket_type = $this->createMockTicketType('Empty Ticket', 0.0, 'USD', 0, 0); $result = $this->formatter_update->format($ticket_type, []); - $this->assertStringContainsString("properties without changes registered", $result); - } + $this->assertNull($result); +} } diff --git a/tests/OpenTelemetry/Formatters/SummitVenueFloorAuditLogFormatterTest.php b/tests/OpenTelemetry/Formatters/SummitVenueFloorAuditLogFormatterTest.php index 3c6d3a7bf..02d9798cb 100644 --- a/tests/OpenTelemetry/Formatters/SummitVenueFloorAuditLogFormatterTest.php +++ b/tests/OpenTelemetry/Formatters/SummitVenueFloorAuditLogFormatterTest.php @@ -105,9 +105,8 @@ public function testFormatterHandlesEmptyChangeSet(): void $formatter->setContext(AuditContextBuilder::default()->build()); $result = $formatter->format($this->mockSubject, []); - $this->assertNotNull($result); - $this->assertStringContainsString('updated', $result); - } + $this->assertNull($result); +} public function testPropertiesExist(): void { diff --git a/tests/Unit/Audit/AbstractAuditLogFormatterDateNoiseTest.php b/tests/Unit/Audit/AbstractAuditLogFormatterDateNoiseTest.php deleted file mode 100644 index 4b5a3ee6a..000000000 --- a/tests/Unit/Audit/AbstractAuditLogFormatterDateNoiseTest.php +++ /dev/null @@ -1,108 +0,0 @@ -publicBuildChangeDetails([ - 'submission_begin_date' => [$oldUtc, $newLocalSameSecond], - ]); - - $this->assertSame('properties without changes registered', $details); - $this->assertFalse($formatter->hasMeaningfulChanges([ - 'submission_begin_date' => [$oldUtc, $newLocalSameSecond], - ])); - } - - public function testBuildChangeDetailsIgnoresMultipleDateFieldsWithSameInstant(): void - { - $formatter = new ExposingAuditFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); - - $old = new DateTime('2025-07-02 07:00:00', new DateTimeZone('UTC')); - $newSame = new DateTime('2025-07-02 07:00:00', new DateTimeZone('UTC')); - - $details = $formatter->publicBuildChangeDetails([ - 'submission_begin_date' => [$old, $newSame], - 'submission_end_date' => [$old, $newSame], - 'selection_begin_date' => [$old, $newSame], - 'selection_end_date' => [$old, $newSame], - ]); - - $this->assertSame('properties without changes registered', $details); - } - - public function testBuildChangeDetailsStillShowsRealDateTimeChange(): void - { - $formatter = new ExposingAuditFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); - - $old = new DateTime('2026-01-02 03:04:05', new DateTimeZone('UTC')); - $new = new DateTime('2026-01-02 03:04:06', new DateTimeZone('UTC')); - - $details = $formatter->publicBuildChangeDetails([ - 'submission_begin_date' => [$old, $new], - ]); - - $this->assertStringContainsString('submission_begin_date', $details); - $this->assertStringContainsString('03:04:05', $details); - $this->assertStringContainsString('03:04:06', $details); - $this->assertTrue($formatter->hasMeaningfulChanges([ - 'submission_begin_date' => [$old, $new], - ])); - } - - public function testBuildChangeDetailsKeepsOtherNonDateChanges(): void - { - $formatter = new ExposingAuditFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); - - $oldUtc = new DateTime('2026-01-02 03:04:05', new DateTimeZone('UTC')); - $newLocalSameSecond = new DateTime('2026-01-02 00:04:05', new DateTimeZone('America/Argentina/Buenos_Aires')); - - $details = $formatter->publicBuildChangeDetails([ - 'submission_begin_date' => [$oldUtc, $newLocalSameSecond], - 'name' => ['Old', 'New'], - ]); - - $this->assertStringContainsString('1 field(s) modified', $details); - $this->assertStringContainsString('Property "name" has changed', $details); - $this->assertStringNotContainsString('submission_begin_date', $details); - } -} - -final class ExposingAuditFormatter extends AbstractAuditLogFormatter -{ - public function publicBuildChangeDetails(array $change_set): string - { - return $this->buildChangeDetails($change_set); - } - - public function format(mixed $subject, array $change_set): ?string - { - return null; - } -} diff --git a/tests/Unit/Audit/AbstractAuditLogFormatterHasMeaningfulChangesTest.php b/tests/Unit/Audit/AbstractAuditLogFormatterHasMeaningfulChangesTest.php deleted file mode 100644 index a8e5e39fb..000000000 --- a/tests/Unit/Audit/AbstractAuditLogFormatterHasMeaningfulChangesTest.php +++ /dev/null @@ -1,100 +0,0 @@ -assertFalse($formatter->hasMeaningfulChanges($changeSet)); - $this->assertSame(AbstractAuditLogFormatter::NO_CHANGES_REGISTERED_MESSAGE, $formatter->publicBuildChangeDetails($changeSet)); - } - - /** - * @dataProvider provideMeaningfulChangeSets - */ - public function testHasMeaningfulChangesReturnsTrueForRealChanges(array $changeSet): void - { - $formatter = new ExposingMeaningfulAuditFormatter(IAuditStrategy::EVENT_ENTITY_UPDATE); - $this->assertTrue($formatter->hasMeaningfulChanges($changeSet)); - $this->assertNotSame(AbstractAuditLogFormatter::NO_CHANGES_REGISTERED_MESSAGE, $formatter->publicBuildChangeDetails($changeSet)); - } - - public static function provideNoOpChangeSets(): array - { - $dtUtc = new DateTimeImmutable('2026-01-02 03:04:05', new DateTimeZone('UTC')); - $dtSameInstantOtherTz = new DateTimeImmutable('2026-01-02 00:04:05', new DateTimeZone('America/Argentina/Buenos_Aires')); - - return [ - 'same-string' => [[ - 'name' => ['abc', 'abc'], - ]], - 'same-bool' => [[ - 'is_enabled' => [true, true], - ]], - 'same-null' => [[ - 'submission_lock_down_presentation_status_date' => [null, null], - ]], - 'datetime-same-instant-different-tz' => [[ - 'submission_begin_date' => [$dtUtc, $dtSameInstantOtherTz], - ]], - ]; - } - - public static function provideMeaningfulChangeSets(): array - { - $dt1 = new DateTimeImmutable('2026-01-02 03:04:05', new DateTimeZone('UTC')); - $dt2 = new DateTimeImmutable('2026-01-02 03:04:06', new DateTimeZone('UTC')); - - return [ - 'string-changed' => [[ - 'name' => ['abc', 'def'], - ]], - 'bool-changed' => [[ - 'is_hidden' => [false, true], - ]], - 'null-to-value' => [[ - 'max_submission_allowed_per_user' => [null, 3], - ]], - 'datetime-changed' => [[ - 'submission_begin_date' => [$dt1, $dt2], - ]], - ]; - } -} - -final class ExposingMeaningfulAuditFormatter extends AbstractAuditLogFormatter -{ - public function publicBuildChangeDetails(array $change_set): string - { - return $this->buildChangeDetails($change_set); - } - - public function format(mixed $subject, array $change_set): ?string - { - return null; - } -} diff --git a/tests/Unit/Audit/AuditLogOtlpStrategyNoOpSuppressionTest.php b/tests/Unit/Audit/AuditLogOtlpStrategyNoOpSuppressionTest.php deleted file mode 100644 index 578466c95..000000000 --- a/tests/Unit/Audit/AuditLogOtlpStrategyNoOpSuppressionTest.php +++ /dev/null @@ -1,93 +0,0 @@ -audit( - subject: (object) ['id' => 1], - change_set: ['submission_begin_date' => [$dtUtc, $dtSameInstantOtherTz]], - event_type: IAuditStrategy::EVENT_ENTITY_UPDATE, - ctx: new AuditContext() - ); - - Bus::assertNotDispatched(EmitAuditLogJob::class); - } - - public function testAuditDispatchesWhenMeaningfulChangesExist(): void - { - Bus::fake(); - Config::set('opentelemetry.enabled', true); - - $formatterFactory = new class implements IAuditLogFormatterFactory { - public function make(AuditContext $ctx, mixed $subject, string $event_type): ?\App\Audit\IAuditLogFormatter - { - return new class($event_type) extends AbstractAuditLogFormatter { - public function format(mixed $subject, array $change_set): ?string - { - return 'ok'; - } - }; - } - }; - - $strategy = new AuditLogOtlpStrategy($formatterFactory); - - $strategy->audit( - subject: (object) ['id' => 1], - change_set: ['name' => ['a', 'b']], - event_type: IAuditStrategy::EVENT_ENTITY_UPDATE, - ctx: new AuditContext() - ); - - Bus::assertDispatched(EmitAuditLogJob::class); - } -} - diff --git a/tests/Unit/Audit/SummitSponsorExtraQuestionTypeAuditLogFormatterTest.php b/tests/Unit/Audit/SummitSponsorExtraQuestionTypeAuditLogFormatterTest.php index c50aa12b8..e16ac418b 100644 --- a/tests/Unit/Audit/SummitSponsorExtraQuestionTypeAuditLogFormatterTest.php +++ b/tests/Unit/Audit/SummitSponsorExtraQuestionTypeAuditLogFormatterTest.php @@ -145,8 +145,7 @@ public function test_deletion_format_does_not_crash_when_sponsor_is_cleared(): v } /** - * The audit formatter is also invoked on updates; ensure the same - * null-safe path is taken there. + * On update with no meaningful changes, formatter should return null. */ public function test_update_format_does_not_crash_when_sponsor_is_cleared(): void { @@ -157,10 +156,7 @@ public function test_update_format_does_not_crash_when_sponsor_is_cleared(): voi $result = $formatter->format($question, []); - self::assertIsString($result); - self::assertStringContainsString(self::LABEL, $result); - self::assertStringContainsString('Unknown Sponsor', $result); - self::assertStringContainsString('updated', $result); + self::assertNull($result); } /**