Skip to content

Commit b785dc2

Browse files
authored
feat: post object date format (#1316)
* feat: post object date format * feat: name changes and new resolver for date format * feat: done and working * fix: corrected test * chore: lint
1 parent f491d9d commit b785dc2

25 files changed

+438
-43
lines changed

library/Helper/Post.php

+16-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
use Municipio\Integrations\Component\ImageResolver;
99
use ComponentLibrary\Integrations\Image\Image as ImageComponentContract;
1010
use Municipio\Helper\Term\Term;
11-
use Municipio\PostObject\Date\ArchiveDateSettingResolver;
11+
use Municipio\PostObject\Date\ArchiveDateFormatResolver;
12+
use Municipio\PostObject\Date\ArchiveDateSourceResolver;
13+
use Municipio\PostObject\Date\CachedArchiveDateFormatResolver;
1214
use Municipio\PostObject\Decorators\BackwardsCompatiblePostObject;
1315
use Municipio\PostObject\Decorators\IconResolvingPostObject;
1416
use Municipio\PostObject\Decorators\PostObjectFromOtherBlog;
@@ -23,9 +25,10 @@
2325
use Municipio\PostObject\Icon\Resolvers\TermIconResolver;
2426
use Municipio\PostObject\PostObject;
2527
use Municipio\PostObject\PostObjectInterface;
26-
use Municipio\PostObject\Date\CachedArchiveDateSettingResolver;
28+
use Municipio\PostObject\Date\CachedArchiveDateSourceResolver;
2729
use Municipio\PostObject\Date\CachedTimestampResolver;
2830
use Municipio\PostObject\Date\TimestampResolver;
31+
use Municipio\PostObject\Decorators\PostObjectArchiveDateFormat;
2932
use Municipio\PostObject\Decorators\PostObjectArchiveDateTimestamp;
3033

3134
/**
@@ -166,11 +169,17 @@ private static function convertWpPostToPostObject(WP_Post $post, string $cacheGr
166169
$postObject = new PostObjectFromWpPost(new PostObject($wpService), $post, $wpService);
167170
$postObject = new PostObjectWithSeoRedirect($postObject, $wpService);
168171

169-
$archiveDateSettingResolver = new ArchiveDateSettingResolver($postObject, $wpService);
170-
$archiveDateSettingResolver = new CachedArchiveDateSettingResolver($postObject, $wpService, $archiveDateSettingResolver);
171-
$timestampResolver = new TimestampResolver($postObject, $wpService, $archiveDateSettingResolver);
172-
$timestampResolver = new CachedTimestampResolver($postObject, $wpService, $timestampResolver);
173-
$postObject = new PostObjectArchiveDateTimestamp($postObject, $wpService, $timestampResolver);
172+
$archiveDateFormatResolver = new ArchiveDateFormatResolver($postObject, $wpService);
173+
$archiveDateFormatResolver = new CachedArchiveDateFormatResolver($postObject, $archiveDateFormatResolver);
174+
$postObject = new PostObjectArchiveDateFormat($postObject, $archiveDateFormatResolver);
175+
176+
$archiveDateSourceResolver = new ArchiveDateSourceResolver($postObject, $wpService);
177+
$archiveDateSourceResolver = new CachedArchiveDateSourceResolver($postObject, $archiveDateSourceResolver);
178+
179+
$timestampResolver = new TimestampResolver($postObject, $wpService, $archiveDateSourceResolver);
180+
$timestampResolver = new CachedTimestampResolver($postObject, $wpService, $timestampResolver);
181+
182+
$postObject = new PostObjectArchiveDateTimestamp($postObject, $timestampResolver);
174183

175184
$iconResolver = new TermIconResolver($postObject, $wpService, new Term($wpService, AcfService::get()), new NullIconResolver());
176185
$iconResolver = new PostIconResolver($postObject, $acfService, $iconResolver);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace Municipio\PostObject\Date;
4+
5+
use Municipio\PostObject\PostObjectInterface;
6+
use WpService\Contracts\GetThemeMod;
7+
8+
/**
9+
* ArchiveDateFormatResolver class.
10+
*/
11+
class ArchiveDateFormatResolver implements ArchiveDateFormatResolverInterface
12+
{
13+
/**
14+
* Constructor.
15+
*/
16+
public function __construct(
17+
private PostObjectInterface $postObject,
18+
private GetThemeMod $wpService
19+
) {
20+
}
21+
22+
/**
23+
* Resolve the archive date format setting.
24+
*/
25+
public function resolve(): string
26+
{
27+
$dateFormat = $this->wpService->getThemeMod('archive_' . $this->postObject->getPostType() . '_date_format', 'date-time');
28+
29+
return $dateFormat;
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace Municipio\PostObject\Date;
4+
5+
use Municipio\PostObject\PostObjectInterface;
6+
use PHPUnit\Framework\TestCase;
7+
use WpService\Implementations\FakeWpService;
8+
9+
class ArchiveDateFormatResolverTest extends TestCase
10+
{
11+
/**
12+
* @testdox class can be instantiated
13+
* @runInSeparateProcess
14+
*/
15+
public function testClassCanBeInstantiated()
16+
{
17+
$this->assertInstanceOf(
18+
ArchiveDateFormatResolver::class,
19+
new ArchiveDateFormatResolver($this->createMock(PostObjectInterface::class), new FakeWpService())
20+
);
21+
}
22+
23+
/**
24+
* @testdox resolve() returns archive post date setting
25+
* @runInSeparateProcess
26+
*/
27+
public function testResolveReturnsFoundArchiveSetting()
28+
{
29+
$postObject = $this->createMock(PostObjectInterface::class);
30+
$wpService = new FakeWpService(['getThemeMod' => 'date-time']);
31+
32+
$resolver = new ArchiveDateFormatResolver($postObject, $wpService);
33+
34+
$result = $resolver->resolve();
35+
36+
$this->assertEquals('date-time', $result);
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Municipio\PostObject\Date;
4+
5+
interface ArchiveDateFormatResolverInterface
6+
{
7+
/**
8+
* Resolve the archive date format.
9+
*/
10+
public function resolve(): string;
11+
}

library/PostObject/Date/ArchiveDateSettingResolver.php library/PostObject/Date/ArchiveDateSourceResolver.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
use WpService\Contracts\GetThemeMod;
77

88
/**
9-
* ArchiveDateSettingResolver class.
9+
* ArchiveDateSourceResolver class.
1010
*/
11-
class ArchiveDateSettingResolver implements ArchiveDateSettingResolverInterface
11+
class ArchiveDateSourceResolver implements ArchiveDateSourceResolverInterface
1212
{
1313
/**
1414
* Constructor.

library/PostObject/Date/ArchiveDateSettingResolver.test.php library/PostObject/Date/ArchiveDateSourceResolver.test.php

+4-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use PHPUnit\Framework\TestCase;
77
use WpService\Implementations\FakeWpService;
88

9-
class ArchiveDateSettingResolverTest extends TestCase
9+
class ArchiveDateSsourceResolverTest extends TestCase
1010
{
1111
/**
1212
* @testdox class can be instantiated
@@ -15,8 +15,8 @@ class ArchiveDateSettingResolverTest extends TestCase
1515
public function testClassCanBeInstantiated()
1616
{
1717
$this->assertInstanceOf(
18-
ArchiveDateSettingResolver::class,
19-
new ArchiveDateSettingResolver($this->createMock(PostObjectInterface::class), new FakeWpService())
18+
ArchiveDateSourceResolver::class,
19+
new ArchiveDateSourceResolver($this->createMock(PostObjectInterface::class), new FakeWpService())
2020
);
2121
}
2222

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

32-
$resolver = new ArchiveDateSettingResolver($postObject, $wpService);
32+
$resolver = new ArchiveDateSourceResolver($postObject, $wpService);
3333

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

3636
$this->assertEquals('metaKey', $result);
3737
}
38-
39-
// TODO: How do i check default value?
4038
}

library/PostObject/Date/ArchiveDateSettingResolverInterface.php library/PostObject/Date/ArchiveDateSourceResolverInterface.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
namespace Municipio\PostObject\Date;
44

55
/**
6-
* ArchiveDateSettingResolverInterface interface.
6+
* ArchiveDateSourceResolverInterface interface.
77
*/
8-
interface ArchiveDateSettingResolverInterface
8+
interface ArchiveDateSourceResolverInterface
99
{
1010
/**
1111
* Resolve the archive date setting.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace Municipio\PostObject\Date;
4+
5+
use Municipio\PostObject\PostObjectInterface;
6+
use Municipio\PostObject\Date\ArchiveDateFormatResolverInterface;
7+
8+
/**
9+
* CachedArchiveDateFormatResolver class.
10+
*/
11+
class CachedArchiveDateFormatResolver implements ArchiveDateFormatResolverInterface
12+
{
13+
private static array $cache = [];
14+
15+
/**
16+
* Constructor.
17+
*/
18+
public function __construct(
19+
private PostObjectInterface $postObject,
20+
private ArchiveDateFormatResolverInterface $innerResolver
21+
) {
22+
}
23+
24+
/**
25+
* Resolve the archive date format setting.
26+
*/
27+
public function resolve(): string
28+
{
29+
$cacheKey = $this->postObject->getBlogId() . '_' . $this->postObject->getPostType();
30+
31+
if (array_key_exists($cacheKey, self::$cache)) {
32+
return self::$cache[$cacheKey];
33+
}
34+
35+
return self::$cache[$cacheKey] = $this->innerResolver->resolve();
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
namespace Municipio\PostObject\Date;
4+
5+
use Municipio\PostObject\PostObjectInterface;
6+
use PHPUnit\Framework\TestCase;
7+
use WpService\Implementations\FakeWpService;
8+
9+
class CachedArchiveDateFormatResolverTest extends TestCase
10+
{
11+
/**
12+
* @testdox class can be instantiated
13+
* @runInSeparateProcess
14+
*/
15+
public function testClassCanBeInstantiated()
16+
{
17+
$this->assertInstanceOf(
18+
CachedArchiveDateFormatResolver::class,
19+
new CachedArchiveDateFormatResolver(
20+
$this->createMock(PostObjectInterface::class),
21+
$this->createMock(ArchiveDateFormatResolverInterface::class)
22+
)
23+
);
24+
}
25+
26+
/**
27+
* @testdox resolve() caches result from inner resolver
28+
* @runInSeparateProcess
29+
*/
30+
public function testResolveCachesResultFromInnerResolver()
31+
{
32+
$postObject = $this->createMock(PostObjectInterface::class);
33+
$postObject->method('getPostType')->willReturn('post_type');
34+
$postObject->method('getBlogId')->willReturn(1);
35+
$innerResolver = $this->createMock(ArchiveDateFormatResolverInterface::class);
36+
$innerResolver->expects($this->exactly(1))->method('resolve')->willReturn('date');
37+
38+
$resolver = new CachedArchiveDateFormatResolver($postObject, $innerResolver);
39+
40+
$result = $resolver->resolve();
41+
$result = $resolver->resolve();
42+
43+
$this->assertEquals('date', $result);
44+
}
45+
}

library/PostObject/Date/CachedArchiveDateSettingResolver.php library/PostObject/Date/CachedArchiveDateSourceResolver.php

+4-5
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@
33
namespace Municipio\PostObject\Date;
44

55
use Municipio\PostObject\PostObjectInterface;
6-
use WpService\Contracts\GetThemeMod;
76

87
/**
9-
* CachedArchiveDateSettingResolver class.
8+
* CachedArchiveDateSourceResolver class.
109
*/
11-
class CachedArchiveDateSettingResolver implements ArchiveDateSettingResolverInterface
10+
class CachedArchiveDateSourceResolver implements ArchiveDateSourceResolverInterface
1211
{
1312
private static array $cache = [];
1413

@@ -17,8 +16,7 @@ class CachedArchiveDateSettingResolver implements ArchiveDateSettingResolverInte
1716
*/
1817
public function __construct(
1918
private PostObjectInterface $postObject,
20-
private GetThemeMod $wpService,
21-
private ArchiveDateSettingResolverInterface $innerResolver
19+
private ArchiveDateSourceResolverInterface $innerResolver
2220
) {
2321
}
2422

@@ -32,6 +30,7 @@ public function resolve(): string
3230
if (array_key_exists($cacheKey, self::$cache)) {
3331
return self::$cache[$cacheKey];
3432
}
33+
3534
return self::$cache[$cacheKey] = (string) $this->innerResolver->resolve();
3635
}
3736
}

library/PostObject/Date/CachedArchiveDateSettingResolver.test.php library/PostObject/Date/CachedArchiveDateSourceResolver.test.php

+6-8
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44

55
use Municipio\PostObject\PostObjectInterface;
66
use PHPUnit\Framework\TestCase;
7-
use WpService\Implementations\FakeWpService;
87

9-
class CachedArchiveDateSettingResolverTest extends TestCase
8+
class CachedArchiveDateSourceResolverTest extends TestCase
109
{
1110
/**
1211
* @testdox class can be instantiated
@@ -15,11 +14,10 @@ class CachedArchiveDateSettingResolverTest extends TestCase
1514
public function testClassCanBeInstantiated()
1615
{
1716
$this->assertInstanceOf(
18-
CachedArchiveDateSettingResolver::class,
19-
new CachedArchiveDateSettingResolver(
17+
CachedArchiveDateSourceResolver::class,
18+
new CachedArchiveDateSourceResolver(
2019
$this->createMock(PostObjectInterface::class),
21-
new FakeWpService(),
22-
$this->createMock(ArchiveDateSettingResolverInterface::class)
20+
$this->createMock(ArchiveDateSourceResolverInterface::class)
2321
)
2422
);
2523
}
@@ -33,10 +31,10 @@ public function testResolveCachesResultFromInnerResolver()
3331
$postObject = $this->createMock(PostObjectInterface::class);
3432
$postObject->method('getPostType')->willReturn('post_type');
3533
$postObject->method('getBlogId')->willReturn(1);
36-
$innerResolver = $this->createMock(ArchiveDateSettingResolverInterface::class);
34+
$innerResolver = $this->createMock(ArchiveDateSourceResolverInterface::class);
3735
$innerResolver->expects($this->exactly(1))->method('resolve')->willReturn('metaKey');
3836

39-
$resolver = new CachedArchiveDateSettingResolver($postObject, new FakeWpService(), $innerResolver);
37+
$resolver = new CachedArchiveDateSourceResolver($postObject, $innerResolver);
4038

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

library/PostObject/Date/TimestampResolver.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
use Municipio\PostObject\PostObjectInterface;
66
use WpService\Contracts\GetPostMeta;
7-
use Municipio\PostObject\Date\ArchiveDateSettingResolverInterface;
7+
use Municipio\PostObject\Date\ArchiveDateSourceResolverInterface;
88

99
/**
1010
* TimestampResolver class.
@@ -22,7 +22,7 @@ class TimestampResolver implements TimestampResolverInterface
2222
public function __construct(
2323
private PostObjectInterface $postObject,
2424
private GetPostMeta $wpService,
25-
private ArchiveDateSettingResolverInterface $archiveDateSetting
25+
private ArchiveDateSourceResolverInterface $archiveDateSetting
2626
) {
2727
}
2828

0 commit comments

Comments
 (0)