Skip to content

Commit

Permalink
Add base64 encoder (#28)
Browse files Browse the repository at this point in the history
  • Loading branch information
RikudouSage committed Apr 27, 2023
1 parent 868ecc0 commit 915e127
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
21 changes: 21 additions & 0 deletions src/Encoder/Base64ItemEncoder.php
@@ -0,0 +1,21 @@
<?php

namespace Rikudou\DynamoDbCache\Encoder;

final class Base64ItemEncoder implements CacheItemEncoderInterface
{
public function __construct(
private CacheItemEncoderInterface $encoder,
) {
}

public function encode(mixed $input): string
{
return base64_encode($this->encoder->encode($input));
}

public function decode(string $input): mixed
{
return $this->encoder->decode(base64_decode($input));
}
}
50 changes: 50 additions & 0 deletions tests/Encoder/Base64ItemEncoderTest.php
@@ -0,0 +1,50 @@
<?php

namespace Rikudou\Tests\DynamoDbCache\Encoder;

use Rikudou\DynamoDbCache\Encoder\Base64ItemEncoder;
use PHPUnit\Framework\TestCase;
use Rikudou\DynamoDbCache\Encoder\CacheItemEncoderInterface;
use Rikudou\DynamoDbCache\Encoder\JsonItemEncoder;
use Rikudou\DynamoDbCache\Encoder\SerializeItemEncoder;
use stdClass;

class TestClass {
public string $test = '1';
private int $test2 = 10;
}

class Base64ItemEncoderTest extends TestCase
{
/**
* @dataProvider encodeItems
*/
public function testEncode(mixed $item)
{
/** @var CacheItemEncoderInterface[] $encoders */
$encoders = [new JsonItemEncoder(), new SerializeItemEncoder()];
foreach ($encoders as $encoder) {
$base64encoder = new Base64ItemEncoder($encoder);

self::assertSame(
$encoder->encode($item),
base64_decode($base64encoder->encode($item)),
);

$encodedOriginal = $encoder->encode($item);
$encodedBase64 = $base64encoder->encode($item);

self::assertEquals($encoder->decode($encodedOriginal), $base64encoder->decode($encodedBase64));
}
}

public function encodeItems(): iterable
{
yield [1];
yield ['test'];
yield [3.5];
yield [['test']];
yield [new stdClass()];
yield [new TestClass()];
}
}

0 comments on commit 915e127

Please sign in to comment.