diff --git a/psalm-baseline.xml b/psalm-baseline.xml
index 7475689f..19d94ff7 100644
--- a/psalm-baseline.xml
+++ b/psalm-baseline.xml
@@ -1,9 +1,2 @@
-
-
-
- ArrayAccess
- Iterator
-
-
-
+
diff --git a/src/Postmark/Models/CaseInsensitiveArray.php b/src/Postmark/Models/CaseInsensitiveArray.php
index e6108bde..6c7b9596 100644
--- a/src/Postmark/Models/CaseInsensitiveArray.php
+++ b/src/Postmark/Models/CaseInsensitiveArray.php
@@ -20,12 +20,17 @@
* CaseInsensitiveArray allows accessing elements with mixed-case keys.
* This allows access to the array to be very forgiving. (i.e. If you access something
* with the wrong CaSe, it'll still find the correct element)
+ *
+ * @implements ArrayAccess
+ * @implements Iterator
*/
class CaseInsensitiveArray implements ArrayAccess, Iterator
{
/** @var array */
private array $data;
private int $pointer = 0;
+ /** @var array */
+ private array $payload;
private function normaliseOffset(string $offset): string
{
@@ -39,9 +44,20 @@ private function normaliseOffset(string $offset): string
*/
public function __construct(array $initialArray = [])
{
+ $this->payload = $initialArray;
$this->data = array_change_key_case($initialArray, CASE_LOWER);
}
+ /**
+ * Provides a way of accessing the initial payload as returned by the server with key casing preserved
+ *
+ * @return array
+ */
+ public function getPayload(): array
+ {
+ return $this->payload;
+ }
+
/** @param array-key|null $offset */
public function offsetSet($offset, mixed $value): void
{
diff --git a/tests/Unit/Models/CaseInsensitiveArrayTest.php b/tests/Unit/Models/CaseInsensitiveArrayTest.php
index 6bfc257b..8ff2f6ae 100644
--- a/tests/Unit/Models/CaseInsensitiveArrayTest.php
+++ b/tests/Unit/Models/CaseInsensitiveArrayTest.php
@@ -61,4 +61,30 @@ public function testKeysCanBeUnsetInCaseInsensitiveManner(): void
unset($data['fOo']);
self::assertArrayNotHasKey('foo', $data);
}
+
+ public function testThatTheInitialPayloadCanBeAccessed(): void
+ {
+ $payload = [
+ 'Foo' => 'foo',
+ 'bar' => 'bar',
+ 'bAz' => 'baz',
+ 'BING' => 'bing',
+ ];
+
+ $data = new CaseInsensitiveArray($payload);
+
+ self::assertSame($payload, $data->getPayload());
+ }
+
+ public function testThatTheInitialPayloadWillIncludeNestedArrays(): void
+ {
+ $payload = [
+ 'SomeScalar' => 'foo',
+ 'NestedArray' => ['OtherValue' => 'Bar'],
+ ];
+
+ $data = new CaseInsensitiveArray($payload);
+
+ self::assertSame($payload, $data->getPayload());
+ }
}