Skip to content

Commit c2edc6f

Browse files
feat: add new fields on PrePaidSummitRegistrationDiscountCodeAuditLogFormatter
1 parent 2db0afa commit c2edc6f

2 files changed

Lines changed: 147 additions & 26 deletions

File tree

app/Audit/ConcreteFormatters/PrePaidSummitRegistrationDiscountCodeAuditLogFormatter.php

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,30 @@
2222

2323
class PrePaidSummitRegistrationDiscountCodeAuditLogFormatter extends AbstractAuditLogFormatter
2424
{
25+
26+
private function buildDiscountDetails($subject): string
27+
{
28+
$details = [];
29+
30+
$rate = $subject->getRate();
31+
$amount = $subject->getAmount();
32+
$quantity_available = $subject->getQuantityAvailable();
33+
34+
if ($rate > 0) {
35+
$details[] = sprintf("rate: %.2f%%", $rate);
36+
}
37+
38+
if ($amount > 0) {
39+
$details[] = sprintf("amount: $%.2f", $amount);
40+
}
41+
42+
if ($quantity_available > 0) {
43+
$details[] = sprintf("quantity: %d", $quantity_available);
44+
}
45+
46+
return implode(", ", $details);
47+
}
48+
2549
public function format($subject, array $change_set): ?string
2650
{
2751
if (!$subject instanceof PrePaidSummitRegistrationDiscountCode) {
@@ -33,34 +57,38 @@ public function format($subject, array $change_set): ?string
3357
$id = $subject->getId() ?? 'unknown';
3458
$summit = $subject->getSummit();
3559
$summit_name = $summit ? ($summit->getName() ?? 'Unknown Summit') : 'Unknown Summit';
60+
$discount_details = $this->buildDiscountDetails($subject);
3661

3762
switch ($this->event_type) {
3863
case IAuditStrategy::EVENT_ENTITY_CREATION:
3964
return sprintf(
40-
"Pre-Paid Discount Code '%s' (%d) created for Summit '%s' by user %s",
65+
"Pre-Paid Discount Code '%s' (%d) created for Summit '%s' with %s by user %s",
4166
$code,
4267
$id,
4368
$summit_name,
69+
$discount_details,
4470
$this->getUserInfo()
4571
);
4672

4773
case IAuditStrategy::EVENT_ENTITY_UPDATE:
4874
$change_details = $this->buildChangeDetails($change_set);
4975
return sprintf(
50-
"Pre-Paid Discount Code '%s' (%d) for Summit '%s' updated: %s by user %s",
76+
"Pre-Paid Discount Code '%s' (%d) for Summit '%s' updated: %s (current: %s) by user %s",
5177
$code,
5278
$id,
5379
$summit_name,
5480
$change_details,
81+
$discount_details,
5582
$this->getUserInfo()
5683
);
5784

5885
case IAuditStrategy::EVENT_ENTITY_DELETION:
5986
return sprintf(
60-
"Pre-Paid Discount Code '%s' (%d) for Summit '%s' was deleted by user %s",
87+
"Pre-Paid Discount Code '%s' (%d) for Summit '%s' with %s was deleted by user %s",
6188
$code,
6289
$id,
6390
$summit_name,
91+
$discount_details,
6492
$this->getUserInfo()
6593
);
6694
}

tests/OpenTelemetry/Formatters/PrePaidSummitRegistrationDiscountCodeAuditLogFormatterTest.php

Lines changed: 116 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,49 @@ class PrePaidSummitRegistrationDiscountCodeAuditLogFormatterTest extends TestCas
3131
private const MOCK_ID = 1;
3232
private const SUMMIT_NAME = 'Test Summit';
3333

34+
private const DISCOUNT_CODE_RATE_EARLY = 'EARLY2024';
35+
private const DISCOUNT_CODE_AMOUNT = 'DISCOUNT25';
36+
private const DISCOUNT_CODE_UPDATE = 'SUMMER24';
37+
private const DISCOUNT_CODE_DELETE = 'VIP2024';
38+
private const DISCOUNT_CODE_EXPIRED = 'EXPIRED';
39+
40+
private const RATE_EARLY = 15;
41+
private const RATE_UPDATE_OLD = 15;
42+
private const RATE_UPDATE_NEW = 20;
43+
private const RATE_HIGH = 50;
44+
private const RATE_EXPIRED = 10;
45+
46+
private const AMOUNT_DISCOUNT = 25.00;
47+
private const AMOUNT_ZERO = 0;
48+
49+
private const QUANTITY_EARLY = 50;
50+
private const QUANTITY_AMOUNT = 100;
51+
private const QUANTITY_UPDATE_OLD = 100;
52+
private const QUANTITY_UPDATE_NEW = 75;
53+
private const QUANTITY_HIGH = 10;
54+
private const QUANTITY_NONE = 0;
55+
56+
private const CREATOR_FIRST_1 = 'Alice';
57+
private const CREATOR_LAST_1 = 'Brown';
58+
private const CREATOR_FIRST_2 = 'Bob';
59+
private const CREATOR_LAST_2 = 'Davis';
60+
private const CREATOR_FIRST_3 = 'Carol';
61+
private const CREATOR_LAST_3 = 'Evans';
62+
private const CREATOR_FIRST_4 = 'David';
63+
private const CREATOR_LAST_4 = 'Frank';
64+
private const CREATOR_FIRST_5 = 'Eve';
65+
private const CREATOR_LAST_5 = 'Green';
66+
67+
private const EVENT_CREATED = 'created';
68+
private const EVENT_UPDATED = 'updated';
69+
private const EVENT_DELETED = 'deleted';
70+
private const EVENT_CURRENT = 'current:';
71+
72+
private const EXPECTED_RATE_FORMAT = 'rate: %.2f%%';
73+
private const EXPECTED_AMOUNT_FORMAT = 'amount: $%.2f';
74+
private const EXPECTED_QUANTITY_FORMAT = 'quantity: %d';
75+
private const EXPECTED_ID_FORMAT = '(%d)';
76+
3477
private PrePaidSummitRegistrationDiscountCodeAuditLogFormatter $formatter_creation;
3578
private PrePaidSummitRegistrationDiscountCodeAuditLogFormatter $formatter_update;
3679
private PrePaidSummitRegistrationDiscountCodeAuditLogFormatter $formatter_deletion;
@@ -60,71 +103,121 @@ protected function tearDown(): void
60103

61104
public function testFormatCreationEventWithRate(): void
62105
{
63-
$code = $this->createMockCode('EARLY2024', 0.15, 0, 50, true, 'Alice', 'Brown');
106+
$code = $this->createMockCode(
107+
self::DISCOUNT_CODE_RATE_EARLY,
108+
self::RATE_EARLY,
109+
self::AMOUNT_ZERO,
110+
self::QUANTITY_EARLY,
111+
true,
112+
self::CREATOR_FIRST_1,
113+
self::CREATOR_LAST_1
114+
);
64115

65116
$this->formatter_creation->setContext($this->audit_context);
66117
$result = $this->formatter_creation->format($code, []);
67118

68119
$this->assertNotNull($result);
69-
$this->assertStringContainsString("EARLY2024", $result);
70-
$this->assertStringContainsString("(1)", $result);
71-
$this->assertStringContainsString("created", $result);
72-
$this->assertStringContainsString("Test Summit", $result);
120+
$this->assertStringContainsString(self::DISCOUNT_CODE_RATE_EARLY, $result);
121+
$this->assertStringContainsString(sprintf(self::EXPECTED_ID_FORMAT, self::MOCK_ID), $result);
122+
$this->assertStringContainsString(self::EVENT_CREATED, $result);
123+
$this->assertStringContainsString(self::SUMMIT_NAME, $result);
124+
$this->assertStringContainsString(sprintf(self::EXPECTED_RATE_FORMAT, self::RATE_EARLY), $result);
125+
$this->assertStringContainsString(sprintf(self::EXPECTED_QUANTITY_FORMAT, self::QUANTITY_EARLY), $result);
73126
}
74127

75128
public function testFormatCreationEventWithAmount(): void
76129
{
77-
$code = $this->createMockCode('DISCOUNT25', 0, 25.00, 100, true, 'Bob', 'Davis');
130+
$code = $this->createMockCode(
131+
self::DISCOUNT_CODE_AMOUNT,
132+
self::AMOUNT_ZERO,
133+
self::AMOUNT_DISCOUNT,
134+
self::QUANTITY_AMOUNT,
135+
true,
136+
self::CREATOR_FIRST_2,
137+
self::CREATOR_LAST_2
138+
);
78139

79140
$this->formatter_creation->setContext($this->audit_context);
80141
$result = $this->formatter_creation->format($code, []);
81142

82143
$this->assertNotNull($result);
83-
$this->assertStringContainsString("DISCOUNT25", $result);
84-
$this->assertStringContainsString("(1)", $result);
85-
$this->assertStringContainsString("created", $result);
144+
$this->assertStringContainsString(self::DISCOUNT_CODE_AMOUNT, $result);
145+
$this->assertStringContainsString(sprintf(self::EXPECTED_ID_FORMAT, self::MOCK_ID), $result);
146+
$this->assertStringContainsString(self::EVENT_CREATED, $result);
147+
$this->assertStringContainsString(sprintf(self::EXPECTED_AMOUNT_FORMAT, self::AMOUNT_DISCOUNT), $result);
148+
$this->assertStringContainsString(sprintf(self::EXPECTED_QUANTITY_FORMAT, self::QUANTITY_AMOUNT), $result);
86149
}
87150

88151
public function testFormatUpdateEvent(): void
89152
{
90-
$code = $this->createMockCode('SUMMER24', 0.20, 0, 75, true, 'Carol', 'Evans');
153+
$code = $this->createMockCode(
154+
self::DISCOUNT_CODE_UPDATE,
155+
self::RATE_UPDATE_NEW,
156+
self::AMOUNT_ZERO,
157+
self::QUANTITY_UPDATE_NEW,
158+
true,
159+
self::CREATOR_FIRST_3,
160+
self::CREATOR_LAST_3
161+
);
91162

92163
$this->formatter_update->setContext($this->audit_context);
93164
$result = $this->formatter_update->format($code, [
94-
'rate' => [0.15, 0.20],
95-
'quantity_available' => [100, 75]
165+
'rate' => [self::RATE_UPDATE_OLD, self::RATE_UPDATE_NEW],
166+
'quantity_available' => [self::QUANTITY_UPDATE_OLD, self::QUANTITY_UPDATE_NEW]
96167
]);
97168

98169
$this->assertNotNull($result);
99-
$this->assertStringContainsString("SUMMER24", $result);
100-
$this->assertStringContainsString("(1)", $result);
101-
$this->assertStringContainsString("updated", $result);
170+
$this->assertStringContainsString(self::DISCOUNT_CODE_UPDATE, $result);
171+
$this->assertStringContainsString(sprintf(self::EXPECTED_ID_FORMAT, self::MOCK_ID), $result);
172+
$this->assertStringContainsString(self::EVENT_UPDATED, $result);
173+
$this->assertStringContainsString(sprintf(self::EXPECTED_RATE_FORMAT, self::RATE_UPDATE_NEW), $result);
174+
$this->assertStringContainsString(sprintf(self::EXPECTED_QUANTITY_FORMAT, self::QUANTITY_UPDATE_NEW), $result);
175+
$this->assertStringContainsString(self::EVENT_CURRENT, $result);
102176
}
103177

104178
public function testFormatDeletionEvent(): void
105179
{
106-
$code = $this->createMockCode('VIP2024', 0.50, 0, 10, false, 'David', 'Frank');
180+
$code = $this->createMockCode(
181+
self::DISCOUNT_CODE_DELETE,
182+
self::RATE_HIGH,
183+
self::AMOUNT_ZERO,
184+
self::QUANTITY_HIGH,
185+
false,
186+
self::CREATOR_FIRST_4,
187+
self::CREATOR_LAST_4
188+
);
107189

108190
$this->formatter_deletion->setContext($this->audit_context);
109191
$result = $this->formatter_deletion->format($code, []);
110192

111193
$this->assertNotNull($result);
112-
$this->assertStringContainsString("VIP2024", $result);
113-
$this->assertStringContainsString("(1)", $result);
114-
$this->assertStringContainsString("deleted", $result);
194+
$this->assertStringContainsString(self::DISCOUNT_CODE_DELETE, $result);
195+
$this->assertStringContainsString(sprintf(self::EXPECTED_ID_FORMAT, self::MOCK_ID), $result);
196+
$this->assertStringContainsString(self::EVENT_DELETED, $result);
197+
$this->assertStringContainsString(sprintf(self::EXPECTED_RATE_FORMAT, self::RATE_HIGH), $result);
198+
$this->assertStringContainsString(sprintf(self::EXPECTED_QUANTITY_FORMAT, self::QUANTITY_HIGH), $result);
115199
}
116200

117201
public function testFormatInactiveCode(): void
118202
{
119-
$code = $this->createMockCode('EXPIRED', 0.10, 0, 0, false, 'Eve', 'Green');
203+
$code = $this->createMockCode(
204+
self::DISCOUNT_CODE_EXPIRED,
205+
self::RATE_EXPIRED,
206+
self::AMOUNT_ZERO,
207+
self::QUANTITY_NONE,
208+
false,
209+
self::CREATOR_FIRST_5,
210+
self::CREATOR_LAST_5
211+
);
120212

121213
$this->formatter_creation->setContext($this->audit_context);
122214
$result = $this->formatter_creation->format($code, []);
123215

124216
$this->assertNotNull($result);
125-
$this->assertStringContainsString("EXPIRED", $result);
126-
$this->assertStringContainsString("(1)", $result);
127-
$this->assertStringContainsString("created", $result);
217+
$this->assertStringContainsString(self::DISCOUNT_CODE_EXPIRED, $result);
218+
$this->assertStringContainsString(sprintf(self::EXPECTED_ID_FORMAT, self::MOCK_ID), $result);
219+
$this->assertStringContainsString(self::EVENT_CREATED, $result);
220+
$this->assertStringContainsString(sprintf(self::EXPECTED_RATE_FORMAT, self::RATE_EXPIRED), $result);
128221
}
129222

130223
public function testFormatInvalidSubject(): void

0 commit comments

Comments
 (0)