Skip to content

Commit

Permalink
feat: name changes and new resolver for date format
Browse files Browse the repository at this point in the history
  • Loading branch information
NiclasNorin committed Feb 5, 2025
1 parent 86bcefa commit eaf617b
Show file tree
Hide file tree
Showing 17 changed files with 181 additions and 37 deletions.
8 changes: 4 additions & 4 deletions library/Helper/Post.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
use Municipio\Integrations\Component\ImageResolver;
use ComponentLibrary\Integrations\Image\Image as ImageComponentContract;
use Municipio\Helper\Term\Term;
use Municipio\PostObject\Date\ArchiveDateSettingResolver;
use Municipio\PostObject\Date\ArchiveDateSourceResolver;
use Municipio\PostObject\Decorators\BackwardsCompatiblePostObject;
use Municipio\PostObject\Decorators\IconResolvingPostObject;
use Municipio\PostObject\Decorators\PostObjectFromOtherBlog;
Expand All @@ -23,7 +23,7 @@
use Municipio\PostObject\Icon\Resolvers\TermIconResolver;
use Municipio\PostObject\PostObject;
use Municipio\PostObject\PostObjectInterface;
use Municipio\PostObject\Date\CachedArchiveDateSettingResolver;
use Municipio\PostObject\Date\CachedArchiveDateSourceResolver;
use Municipio\PostObject\Date\CachedTimestampResolver;
use Municipio\PostObject\Date\TimestampResolver;
use Municipio\PostObject\Decorators\PostObjectArchiveDateFormat;
Expand Down Expand Up @@ -167,8 +167,8 @@ private static function convertWpPostToPostObject(WP_Post $post, string $cacheGr
$postObject = new PostObjectFromWpPost(new PostObject($wpService), $post, $wpService);
$postObject = new PostObjectWithSeoRedirect($postObject, $wpService);

$archiveDateSettingResolver = new ArchiveDateSettingResolver($postObject, $wpService);
$archiveDateSettingResolver = new CachedArchiveDateSettingResolver($postObject, $wpService, $archiveDateSettingResolver);
$archiveDateSettingResolver = new ArchiveDateSourceResolver($postObject, $wpService);
$archiveDateSettingResolver = new CachedArchiveDateSourceResolver($postObject, $wpService, $archiveDateSettingResolver);

$postObject = new PostObjectArchiveDateFormat($postObject, $archiveDateSettingResolver);

Expand Down
22 changes: 22 additions & 0 deletions library/PostObject/Date/ArchiveDateFormatResolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace Municipio\PostObject\Date;

use Municipio\PostObject\PostObjectInterface;
use WpService\Contracts\GetThemeMod;

class ArchiveDateFormatResolver implements ArchiveDateFormatResolverInterface
{
public function __construct(
private PostObjectInterface $postObject,
private GetThemeMod $wpService
) {
}

public function resolve(): string
{
$dateFormat = $this->wpService->getThemeMod('archive_' . $this->postObject->getPostType() . '_date_format', 'date-time');

return $dateFormat;
}
}
38 changes: 38 additions & 0 deletions library/PostObject/Date/ArchiveDateFormatResolver.test.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

namespace Municipio\PostObject\Date;

use Municipio\PostObject\PostObjectInterface;
use PHPUnit\Framework\TestCase;
use WpService\Implementations\FakeWpService;

class ArchiveDateFormatResolverTest extends TestCase
{
/**
* @testdox class can be instantiated
* @runInSeparateProcess
*/
public function testClassCanBeInstantiated()
{
$this->assertInstanceOf(
ArchiveDateFormatResolver::class,
new ArchiveDateFormatResolver($this->createMock(PostObjectInterface::class), new FakeWpService())
);
}

/**
* @testdox resolve() returns archive post date setting
* @runInSeparateProcess
*/
public function testResolveReturnsFoundArchiveSetting()
{
$postObject = $this->createMock(PostObjectInterface::class);
$wpService = new FakeWpService(['getThemeMod' => 'date-time']);

$resolver = new ArchiveDateSourceResolver($postObject, $wpService);

$result = $resolver->resolve();

$this->assertEquals('date-time', $result);
}
}
11 changes: 11 additions & 0 deletions library/PostObject/Date/ArchiveDateFormatResolverInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

namespace Municipio\PostObject\Date;

interface ArchiveDateFormatResolverInterface
{
/**
* Resolve the archive date format.
*/
public function resolve(): string;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
use WpService\Contracts\GetThemeMod;

/**
* ArchiveDateSettingResolver class.
* ArchiveDateSourceResolver class.
*/
class ArchiveDateSettingResolver implements ArchiveDateSettingResolverInterface
class ArchiveDateSourceResolver implements ArchiveDateSourceResolverInterface
{
/**
* Constructor.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
use PHPUnit\Framework\TestCase;
use WpService\Implementations\FakeWpService;

class ArchiveDateSettingResolverTest extends TestCase
class ArchiveDateSsourceResolverTest extends TestCase
{
/**
* @testdox class can be instantiated
Expand All @@ -15,8 +15,8 @@ class ArchiveDateSettingResolverTest extends TestCase
public function testClassCanBeInstantiated()
{
$this->assertInstanceOf(
ArchiveDateSettingResolver::class,
new ArchiveDateSettingResolver($this->createMock(PostObjectInterface::class), new FakeWpService())
ArchiveDateSourceResolver::class,
new ArchiveDateSourceResolver($this->createMock(PostObjectInterface::class), new FakeWpService())
);
}

Expand All @@ -29,12 +29,10 @@ public function testResolveReturnsFoundArchiveSetting()
$postObject = $this->createMock(PostObjectInterface::class);
$wpService = new FakeWpService(['getThemeMod' => 'metaKey']);

$resolver = new ArchiveDateSettingResolver($postObject, $wpService);
$resolver = new ArchiveDateSourceResolver($postObject, $wpService);

$result = $resolver->resolve();

$this->assertEquals('metaKey', $result);
}

// TODO: How do i check default value?
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
namespace Municipio\PostObject\Date;

/**
* ArchiveDateSettingResolverInterface interface.
* ArchiveDateSourceResolverInterface interface.
*/
interface ArchiveDateSettingResolverInterface
interface ArchiveDateSourceResolverInterface
{
/**
* Resolve the archive date setting.
Expand Down
28 changes: 28 additions & 0 deletions library/PostObject/Date/CachedArchiveDateFormatResolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace Municipio\PostObject\Date;

use Municipio\PostObject\PostObjectInterface;
use Municipio\PostObject\Date\ArchiveDateFormatResolverInterface;

class CachedArchiveDateFormatResolver
{
private static array $cache = [];

public function __construct(
private PostObjectInterface $postObject,
private ArchiveDateFormatResolverInterface $innerResolver
) {
}

public function resolve(): string
{
$cacheKey = $this->postObject->getBlogId() . '_' . $this->postObject->getPostType();

if (array_key_exists($cacheKey, self::$cache)) {
return self::$cache[$cacheKey];
}

return self::$cache[$cacheKey] = $this->innerResolver->resolve();
}
}
45 changes: 45 additions & 0 deletions library/PostObject/Date/CachedArchiveDateFormatResolver.test.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php

namespace Municipio\PostObject\Date;

use Municipio\PostObject\PostObjectInterface;
use PHPUnit\Framework\TestCase;
use WpService\Implementations\FakeWpService;

class CachedArchiveDateFormatResolverTest extends TestCase
{
/**
* @testdox class can be instantiated
* @runInSeparateProcess
*/
public function testClassCanBeInstantiated()
{
$this->assertInstanceOf(
CachedArchiveDateFormatResolver::class,
new CachedArchiveDateFormatResolver(
$this->createMock(PostObjectInterface::class),
$this->createMock(ArchiveDateFormatResolverInterface::class)
)
);
}

/**
* @testdox resolve() caches result from inner resolver
* @runInSeparateProcess
*/
public function testResolveCachesResultFromInnerResolver()
{
$postObject = $this->createMock(PostObjectInterface::class);
$postObject->method('getPostType')->willReturn('post_type');
$postObject->method('getBlogId')->willReturn(1);
$innerResolver = $this->createMock(ArchiveDateFormatResolverInterface::class);
$innerResolver->expects($this->exactly(1))->method('resolve')->willReturn('date');

$resolver = new CachedArchiveDateFormatResolver($postObject, $innerResolver);

$result = $resolver->resolve();
$result = $resolver->resolve();

$this->assertEquals('date', $result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
use WpService\Contracts\GetThemeMod;

/**
* CachedArchiveDateSettingResolver class.
* CachedArchiveDateSourceResolver class.
*/
class CachedArchiveDateSettingResolver implements ArchiveDateSettingResolverInterface
class CachedArchiveDateSourceResolver implements ArchiveDateSourceResolverInterface
{
private static array $cache = [];

Expand All @@ -18,7 +18,7 @@ class CachedArchiveDateSettingResolver implements ArchiveDateSettingResolverInte
public function __construct(
private PostObjectInterface $postObject,
private GetThemeMod $wpService,
private ArchiveDateSettingResolverInterface $innerResolver
private ArchiveDateSourceResolverInterface $innerResolver
) {
}

Expand All @@ -32,6 +32,7 @@ public function resolve(): string
if (array_key_exists($cacheKey, self::$cache)) {
return self::$cache[$cacheKey];
}

return self::$cache[$cacheKey] = (string) $this->innerResolver->resolve();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
use PHPUnit\Framework\TestCase;
use WpService\Implementations\FakeWpService;

class CachedArchiveDateSettingResolverTest extends TestCase
class CachedArchiveDateSourceResolverTest extends TestCase
{
/**
* @testdox class can be instantiated
Expand All @@ -15,11 +15,11 @@ class CachedArchiveDateSettingResolverTest extends TestCase
public function testClassCanBeInstantiated()
{
$this->assertInstanceOf(
CachedArchiveDateSettingResolver::class,
new CachedArchiveDateSettingResolver(
CachedArchiveDateSourceResolver::class,
new CachedArchiveDateSourceResolver(
$this->createMock(PostObjectInterface::class),
new FakeWpService(),
$this->createMock(ArchiveDateSettingResolverInterface::class)
$this->createMock(ArchiveDateSourceResolverInterface::class)
)
);
}
Expand All @@ -33,10 +33,10 @@ public function testResolveCachesResultFromInnerResolver()
$postObject = $this->createMock(PostObjectInterface::class);
$postObject->method('getPostType')->willReturn('post_type');
$postObject->method('getBlogId')->willReturn(1);
$innerResolver = $this->createMock(ArchiveDateSettingResolverInterface::class);
$innerResolver = $this->createMock(ArchiveDateSourceResolverInterface::class);
$innerResolver->expects($this->exactly(1))->method('resolve')->willReturn('metaKey');

$resolver = new CachedArchiveDateSettingResolver($postObject, new FakeWpService(), $innerResolver);
$resolver = new CachedArchiveDateSourceResolver($postObject, new FakeWpService(), $innerResolver);

$result = $resolver->resolve();
$result = $resolver->resolve();
Expand Down
4 changes: 2 additions & 2 deletions library/PostObject/Date/TimestampResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

use Municipio\PostObject\PostObjectInterface;
use WpService\Contracts\GetPostMeta;
use Municipio\PostObject\Date\ArchiveDateSettingResolverInterface;
use Municipio\PostObject\Date\ArchiveDateSourceResolverInterface;

/**
* TimestampResolver class.
Expand All @@ -22,7 +22,7 @@ class TimestampResolver implements TimestampResolverInterface
public function __construct(
private PostObjectInterface $postObject,
private GetPostMeta $wpService,
private ArchiveDateSettingResolverInterface $archiveDateSetting
private ArchiveDateSourceResolverInterface $archiveDateSetting
) {
}

Expand Down
10 changes: 5 additions & 5 deletions library/PostObject/Date/TimestampResolver.test.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public function testClassCanBeInstantiated()
new TimestampResolver(
$this->createMock(PostObjectInterface::class),
new FakeWpService(),
$this->createMock(ArchiveDateSettingResolverInterface::class)
$this->createMock(ArchiveDateSourceResolverInterface::class)
)
);
}
Expand All @@ -31,7 +31,7 @@ public function testClassCanBeInstantiated()
public function testResolvesMetaKeyValueAndReturnUnix()
{
$postObject = $this->createMock(PostObjectInterface::class);
$archiveDateSetting = $this->createMock(ArchiveDateSettingResolverInterface::class);
$archiveDateSetting = $this->createMock(ArchiveDateSourceResolverInterface::class);

$resolver = new TimestampResolver($postObject, new FakeWpService(['getPostMeta' => '10 September 2000']), $archiveDateSetting);

Expand All @@ -48,7 +48,7 @@ public function testResolvesMetaKeyValueAndReturnPostDatePublished()
{
$postObject = $this->createMock(PostObjectInterface::class);
$postObject->method('getPublishedTime')->willReturn(123);
$archiveDateSetting = $this->createMock(ArchiveDateSettingResolverInterface::class);
$archiveDateSetting = $this->createMock(ArchiveDateSourceResolverInterface::class);
$archiveDateSetting->method('resolve')->willReturn('post_date');

$resolver = new TimestampResolver($postObject, new FakeWpService(), $archiveDateSetting);
Expand All @@ -66,7 +66,7 @@ public function testResolvesMetaKeyValueAndReturnPostDateModified()
{
$postObject = $this->createMock(PostObjectInterface::class);
$postObject->method('getModifiedTime')->willReturn(123);
$archiveDateSetting = $this->createMock(ArchiveDateSettingResolverInterface::class);
$archiveDateSetting = $this->createMock(ArchiveDateSourceResolverInterface::class);
$archiveDateSetting->method('resolve')->willReturn('post_modified');

$resolver = new TimestampResolver($postObject, new FakeWpService(), $archiveDateSetting);
Expand All @@ -83,7 +83,7 @@ public function testResolvesMetaKeyValueAndReturnPostDateModified()
public function testReturnsZeroIfUnableToConvertToUnix()
{
$postObject = $this->createMock(PostObjectInterface::class);
$archiveDateSetting = $this->createMock(ArchiveDateSettingResolverInterface::class);
$archiveDateSetting = $this->createMock(ArchiveDateSourceResolverInterface::class);

$resolver = new TimestampResolver($postObject, new FakeWpService(), $archiveDateSetting);

Expand Down
5 changes: 3 additions & 2 deletions library/PostObject/Decorators/PostObjectArchiveDateFormat.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

use Municipio\PostObject\Icon\IconInterface;
use Municipio\PostObject\PostObjectInterface;
use Municipio\PostObject\Date\ArchiveDateSettingResolverInterface;
use Municipio\PostObject\Date\ArchiveDateSourceResolverInterface;

/**
* PostObjectWithSeoRedirect class.
Expand All @@ -18,7 +18,7 @@ class PostObjectArchiveDateFormat implements PostObjectInterface
*/
public function __construct(
private PostObjectInterface $postObject,
private ArchiveDateSettingResolverInterface $dateSettingResolver
private ArchiveDateSourceResolverInterface $dateSettingResolver
) {
}

Expand Down Expand Up @@ -113,6 +113,7 @@ public function getArchiveDateTimestamp(): int
*/
public function getArchiveDateFormat(): string
{
echo '<pre>' . print_r( $this->dateSettingResolver->resolve(), true ) . '</pre>';
return $this->dateSettingResolver->resolve();
}
}
Loading

0 comments on commit eaf617b

Please sign in to comment.