Skip to content

Commit 133388c

Browse files
andrestejerina97matiasperrone-exo
authored andcommitted
feat: add new fields on PrePaidSummitRegistrationDiscountCodeAuditLogFormatter
1 parent 1fe4d74 commit 133388c

4 files changed

Lines changed: 132 additions & 53 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
}

app/Audit/ConcreteFormatters/SummitTicketTypeAuditLogFormatter.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ public function format($subject, array $change_set): ?string
4545
$name,
4646
$id,
4747
$summit_name,
48-
($cost !== null ? $cost : 'N/A'),
48+
$cost,
4949
$currency,
50-
($quantity_available !== null ? $quantity_available : 'N/A'),
50+
$quantity_available,
5151
$audience,
5252
$this->getUserInfo()
5353
);
@@ -70,10 +70,10 @@ public function format($subject, array $change_set): ?string
7070
$name,
7171
$id,
7272
$summit_name,
73-
($cost !== null ? $cost : 'N/A'),
73+
$cost,
7474
$currency,
75-
($quantity_sold !== null ? $quantity_sold : 'N/A'),
76-
($quantity_available !== null ? $quantity_available : 'N/A'),
75+
$quantity_sold,
76+
$quantity_available,
7777
$this->getUserInfo()
7878
);
7979
}

tests/OpenTelemetry/Formatters/PrePaidSummitRegistrationDiscountCodeAuditLogFormatterTest.php

Lines changed: 91 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,38 @@ 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 EVENT_CREATED = 'created';
57+
private const EVENT_UPDATED = 'updated';
58+
private const EVENT_DELETED = 'deleted';
59+
private const EVENT_CURRENT = 'current:';
60+
61+
private const EXPECTED_RATE_FORMAT = 'rate: %.2f%%';
62+
private const EXPECTED_AMOUNT_FORMAT = 'amount: $%.2f';
63+
private const EXPECTED_QUANTITY_FORMAT = 'quantity: %d';
64+
private const EXPECTED_ID_FORMAT = '(%d)';
65+
3466
private PrePaidSummitRegistrationDiscountCodeAuditLogFormatter $formatter_creation;
3567
private PrePaidSummitRegistrationDiscountCodeAuditLogFormatter $formatter_update;
3668
private PrePaidSummitRegistrationDiscountCodeAuditLogFormatter $formatter_deletion;
@@ -60,71 +92,106 @@ protected function tearDown(): void
6092

6193
public function testFormatCreationEventWithRate(): void
6294
{
63-
$code = $this->createMockCode('EARLY2024', 0.15, 0, 50, true, 'Alice', 'Brown');
95+
$code = $this->createMockCode(
96+
self::DISCOUNT_CODE_RATE_EARLY,
97+
self::RATE_EARLY,
98+
self::AMOUNT_ZERO,
99+
self::QUANTITY_EARLY
100+
);
64101

65102
$this->formatter_creation->setContext($this->audit_context);
66103
$result = $this->formatter_creation->format($code, []);
67104

68105
$this->assertNotNull($result);
69-
$this->assertStringContainsString("EARLY2024", $result);
70-
$this->assertStringContainsString("(1)", $result);
71-
$this->assertStringContainsString("created", $result);
72-
$this->assertStringContainsString("Test Summit", $result);
106+
$this->assertStringContainsString(self::DISCOUNT_CODE_RATE_EARLY, $result);
107+
$this->assertStringContainsString(sprintf(self::EXPECTED_ID_FORMAT, self::MOCK_ID), $result);
108+
$this->assertStringContainsString(self::EVENT_CREATED, $result);
109+
$this->assertStringContainsString(self::SUMMIT_NAME, $result);
110+
$this->assertStringContainsString(sprintf(self::EXPECTED_RATE_FORMAT, self::RATE_EARLY), $result);
111+
$this->assertStringContainsString(sprintf(self::EXPECTED_QUANTITY_FORMAT, self::QUANTITY_EARLY), $result);
73112
}
74113

75114
public function testFormatCreationEventWithAmount(): void
76115
{
77-
$code = $this->createMockCode('DISCOUNT25', 0, 25.00, 100, true, 'Bob', 'Davis');
116+
$code = $this->createMockCode(
117+
self::DISCOUNT_CODE_AMOUNT,
118+
self::AMOUNT_ZERO,
119+
self::AMOUNT_DISCOUNT,
120+
self::QUANTITY_AMOUNT
121+
);
78122

79123
$this->formatter_creation->setContext($this->audit_context);
80124
$result = $this->formatter_creation->format($code, []);
81125

82126
$this->assertNotNull($result);
83-
$this->assertStringContainsString("DISCOUNT25", $result);
84-
$this->assertStringContainsString("(1)", $result);
85-
$this->assertStringContainsString("created", $result);
127+
$this->assertStringContainsString(self::DISCOUNT_CODE_AMOUNT, $result);
128+
$this->assertStringContainsString(sprintf(self::EXPECTED_ID_FORMAT, self::MOCK_ID), $result);
129+
$this->assertStringContainsString(self::EVENT_CREATED, $result);
130+
$this->assertStringContainsString(sprintf(self::EXPECTED_AMOUNT_FORMAT, self::AMOUNT_DISCOUNT), $result);
131+
$this->assertStringContainsString(sprintf(self::EXPECTED_QUANTITY_FORMAT, self::QUANTITY_AMOUNT), $result);
86132
}
87133

88134
public function testFormatUpdateEvent(): void
89135
{
90-
$code = $this->createMockCode('SUMMER24', 0.20, 0, 75, true, 'Carol', 'Evans');
136+
$code = $this->createMockCode(
137+
self::DISCOUNT_CODE_UPDATE,
138+
self::RATE_UPDATE_NEW,
139+
self::AMOUNT_ZERO,
140+
self::QUANTITY_UPDATE_NEW
141+
);
91142

92143
$this->formatter_update->setContext($this->audit_context);
93144
$result = $this->formatter_update->format($code, [
94-
'rate' => [0.15, 0.20],
95-
'quantity_available' => [100, 75]
145+
'rate' => [self::RATE_UPDATE_OLD, self::RATE_UPDATE_NEW],
146+
'quantity_available' => [self::QUANTITY_UPDATE_OLD, self::QUANTITY_UPDATE_NEW]
96147
]);
97148

98149
$this->assertNotNull($result);
99-
$this->assertStringContainsString("SUMMER24", $result);
100-
$this->assertStringContainsString("(1)", $result);
101-
$this->assertStringContainsString("updated", $result);
150+
$this->assertStringContainsString(self::DISCOUNT_CODE_UPDATE, $result);
151+
$this->assertStringContainsString(sprintf(self::EXPECTED_ID_FORMAT, self::MOCK_ID), $result);
152+
$this->assertStringContainsString(self::EVENT_UPDATED, $result);
153+
$this->assertStringContainsString(sprintf(self::EXPECTED_RATE_FORMAT, self::RATE_UPDATE_NEW), $result);
154+
$this->assertStringContainsString(sprintf(self::EXPECTED_QUANTITY_FORMAT, self::QUANTITY_UPDATE_NEW), $result);
155+
$this->assertStringContainsString(self::EVENT_CURRENT, $result);
102156
}
103157

104158
public function testFormatDeletionEvent(): void
105159
{
106-
$code = $this->createMockCode('VIP2024', 0.50, 0, 10, false, 'David', 'Frank');
160+
$code = $this->createMockCode(
161+
self::DISCOUNT_CODE_DELETE,
162+
self::RATE_HIGH,
163+
self::AMOUNT_ZERO,
164+
self::QUANTITY_HIGH
165+
);
107166

108167
$this->formatter_deletion->setContext($this->audit_context);
109168
$result = $this->formatter_deletion->format($code, []);
110169

111170
$this->assertNotNull($result);
112-
$this->assertStringContainsString("VIP2024", $result);
113-
$this->assertStringContainsString("(1)", $result);
114-
$this->assertStringContainsString("deleted", $result);
171+
$this->assertStringContainsString(self::DISCOUNT_CODE_DELETE, $result);
172+
$this->assertStringContainsString(sprintf(self::EXPECTED_ID_FORMAT, self::MOCK_ID), $result);
173+
$this->assertStringContainsString(self::EVENT_DELETED, $result);
174+
$this->assertStringContainsString(sprintf(self::EXPECTED_RATE_FORMAT, self::RATE_HIGH), $result);
175+
$this->assertStringContainsString(sprintf(self::EXPECTED_QUANTITY_FORMAT, self::QUANTITY_HIGH), $result);
115176
}
116177

117178
public function testFormatInactiveCode(): void
118179
{
119-
$code = $this->createMockCode('EXPIRED', 0.10, 0, 0, false, 'Eve', 'Green');
180+
$code = $this->createMockCode(
181+
self::DISCOUNT_CODE_EXPIRED,
182+
self::RATE_EXPIRED,
183+
self::AMOUNT_ZERO,
184+
self::QUANTITY_NONE
185+
);
120186

121187
$this->formatter_creation->setContext($this->audit_context);
122188
$result = $this->formatter_creation->format($code, []);
123189

124190
$this->assertNotNull($result);
125-
$this->assertStringContainsString("EXPIRED", $result);
126-
$this->assertStringContainsString("(1)", $result);
127-
$this->assertStringContainsString("created", $result);
191+
$this->assertStringContainsString(self::DISCOUNT_CODE_EXPIRED, $result);
192+
$this->assertStringContainsString(sprintf(self::EXPECTED_ID_FORMAT, self::MOCK_ID), $result);
193+
$this->assertStringContainsString(self::EVENT_CREATED, $result);
194+
$this->assertStringContainsString(sprintf(self::EXPECTED_RATE_FORMAT, self::RATE_EXPIRED), $result);
128195
}
129196

130197
public function testFormatInvalidSubject(): void
@@ -140,23 +207,14 @@ private function createMockCode(
140207
string $code,
141208
float $rate,
142209
float $amount,
143-
int $quantity_available,
144-
bool $is_active,
145-
string $creator_first,
146-
string $creator_last
210+
int $quantity_available
147211
): object {
148212
$mock = Mockery::mock(PrePaidSummitRegistrationDiscountCode::class);
149213
$mock->shouldReceive('getCode')->andReturn($code);
150214
$mock->shouldReceive('getId')->andReturn(self::MOCK_ID);
151215
$mock->shouldReceive('getRate')->andReturn($rate);
152216
$mock->shouldReceive('getAmount')->andReturn($amount);
153217
$mock->shouldReceive('getQuantityAvailable')->andReturn($quantity_available);
154-
$mock->shouldReceive('isLive')->andReturn($is_active);
155-
156-
$creator = Mockery::mock(\models\main\Member::class);
157-
$creator->shouldReceive('getFirstName')->andReturn($creator_first);
158-
$creator->shouldReceive('getLastName')->andReturn($creator_last);
159-
$mock->shouldReceive('getCreatedBy')->andReturn($creator);
160218

161219
$summit = Mockery::mock(\models\summit\Summit::class);
162220
$summit->shouldReceive('getName')->andReturn(self::SUMMIT_NAME);

tests/OpenTelemetry/Formatters/SummitTaxTypeAuditLogFormatterTest.php

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
use App\Audit\ConcreteFormatters\SummitTaxTypeAuditLogFormatter;
2020
use App\Audit\Interfaces\IAuditStrategy;
2121
use models\summit\SummitTaxType;
22-
use Doctrine\Common\Collections\ArrayCollection;
2322
use Mockery;
2423
use Tests\TestCase;
2524

@@ -61,7 +60,7 @@ protected function tearDown(): void
6160

6261
public function testFormatCreationEvent(): void
6362
{
64-
$tax = $this->createMockTax('VAT', 'VAT-001', 21.0, 5);
63+
$tax = $this->createMockTax('VAT', 'VAT-001', 21.0);
6564

6665
$this->formatter_creation->setContext($this->audit_context);
6766
$result = $this->formatter_creation->format($tax, []);
@@ -74,7 +73,7 @@ public function testFormatCreationEvent(): void
7473

7574
public function testFormatUpdateEvent(): void
7675
{
77-
$tax = $this->createMockTax('Sales Tax', 'ST-002', 8.0, 3);
76+
$tax = $this->createMockTax('Sales Tax', 'ST-002', 8.0);
7877

7978
$this->formatter_update->setContext($this->audit_context);
8079
$result = $this->formatter_update->format($tax, [
@@ -89,7 +88,7 @@ public function testFormatUpdateEvent(): void
8988

9089
public function testFormatDeletionEvent(): void
9190
{
92-
$tax = $this->createMockTax('GST', 'GST-CA', 5.0, 2);
91+
$tax = $this->createMockTax('GST', 'GST-CA', 5.0);
9392

9493
$this->formatter_deletion->setContext($this->audit_context);
9594
$result = $this->formatter_deletion->format($tax, []);
@@ -102,7 +101,7 @@ public function testFormatDeletionEvent(): void
102101

103102
public function testFormatWithoutTicketTypes(): void
104103
{
105-
$tax = $this->createMockTax('Empty Tax', 'EMPTY', 10.0, 0);
104+
$tax = $this->createMockTax('Empty Tax', 'EMPTY', 10.0);
106105

107106
$this->formatter_creation->setContext($this->audit_context);
108107
$result = $this->formatter_creation->format($tax, []);
@@ -121,20 +120,14 @@ public function testFormatInvalidSubject(): void
121120
$this->assertNull($result);
122121
}
123122

124-
private function createMockTax(string $name, string $tax_id, float $rate, int $ticket_count): object
123+
private function createMockTax(string $name, string $tax_id, $rate): object
125124
{
126125
$mock = Mockery::mock(SummitTaxType::class);
127126
$mock->shouldReceive('getName')->andReturn($name);
128127
$mock->shouldReceive('getId')->andReturn(self::MOCK_ID);
129128
$mock->shouldReceive('getTaxId')->andReturn($tax_id);
130129
$mock->shouldReceive('getRate')->andReturn($rate);
131130

132-
$tickets = new ArrayCollection();
133-
for ($i = 0; $i < $ticket_count; $i++) {
134-
$tickets->add(Mockery::mock(\models\summit\SummitTicketType::class));
135-
}
136-
$mock->shouldReceive('getTicketTypes')->andReturn($tickets);
137-
138131
$summit = Mockery::mock(\models\summit\Summit::class);
139132
$summit->shouldReceive('getName')->andReturn(self::SUMMIT_NAME);
140133
$mock->shouldReceive('getSummit')->andReturn($summit);

0 commit comments

Comments
 (0)