Skip to content

Commit b16ccab

Browse files
committed
RegisterUseCaseでArticleCounterを使うように
1 parent b2ab76b commit b16ccab

2 files changed

Lines changed: 44 additions & 4 deletions

File tree

src/Service/UseCase/Article/RegisterUseCase.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use App\DTO\Request\PostedArticle;
66
use App\Entity\Article;
7+
use App\Model\ArticleCounterInterface;
78
use App\Model\ArticlePersisterInterface;
89
use App\Service\UseCase\Article\Exception\RegisterException;
910

@@ -14,12 +15,19 @@ class RegisterUseCase
1415
*/
1516
private $articlePersister;
1617

18+
/**
19+
* @var ArticleCounterInterface
20+
*/
21+
private $articleCounter;
22+
1723
/**
1824
* @param ArticlePersisterInterface $articlePersister
25+
* @param ArticleCounterInterface $articleCounter
1926
*/
20-
public function __construct(ArticlePersisterInterface $articlePersister)
27+
public function __construct(ArticlePersisterInterface $articlePersister, ArticleCounterInterface $articleCounter)
2128
{
2229
$this->articlePersister = $articlePersister;
30+
$this->articleCounter = $articleCounter;
2331
}
2432

2533
/**
@@ -29,9 +37,11 @@ public function __construct(ArticlePersisterInterface $articlePersister)
2937
public function register(PostedArticle $postedArticle): void
3038
{
3139
try {
32-
$this->articlePersister->persist($postedArticle, new Article());
40+
$savedArticle = $this->articlePersister->persist($postedArticle, new Article());
3341
} catch (\Exception $e) {
34-
throw new RegisterException($e->getMessage(), '', $e);
42+
throw new RegisterException($e->getMessage(), $e->getCode(), $e);
3543
}
44+
45+
$this->articleCounter->count($savedArticle);
3646
}
3747
}

tests/Service/UseCase/Article/RegisterUseCaseTest.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44

55
use App\DTO\Request\PostedArticle;
66
use App\Entity\Article;
7+
use App\Model\ArticleCounterInterface;
78
use App\Model\ArticlePersisterInterface;
9+
use App\Service\UseCase\Article\Exception\RegisterException;
810
use App\Service\UseCase\Article\RegisterUseCase;
911
use PHPUnit\Framework\TestCase;
12+
use Prophecy\Argument;
1013
use Prophecy\Prophecy\ObjectProphecy;
1114

1215
class RegisterUseCaseTest extends TestCase
@@ -16,22 +19,49 @@ class RegisterUseCaseTest extends TestCase
1619
*/
1720
private $articlePersisterP;
1821

22+
/**
23+
* @var ArticleCounterInterface|ObjectProphecy
24+
*/
25+
private $articleCounterP;
26+
1927
protected function setUp(): void
2028
{
2129
$this->articlePersisterP = $this->prophesize(ArticlePersisterInterface::class);
30+
$this->articleCounterP = $this->prophesize(ArticleCounterInterface::class);
31+
}
32+
33+
protected function tearDown(): void
34+
{
35+
$this->articlePersisterP = null;
36+
$this->articleCounterP = null;
2237
}
2338

2439
public function test()
2540
{
2641
$postedArticle = $this->prophesize(PostedArticle::class)->reveal();
2742

2843
$this->articlePersisterP->persist($postedArticle, new Article())->willReturnArgument(1)->shouldBeCalled();
44+
$this->articleCounterP->count(Argument::type(Article::class))->shouldBeCalled();
45+
46+
$this->getSUT()->register($postedArticle);
47+
}
48+
49+
public function test_保存でエラーが出たらcountは更新しない()
50+
{
51+
$this->expectException(RegisterException::class);
52+
53+
$postedArticle = $this->prophesize(PostedArticle::class)->reveal();
54+
$this->articlePersisterP->persist($postedArticle, new Article())->willThrow( new \Exception('dummy-error'))->shouldBeCalled();
55+
$this->articleCounterP->count(Argument::any())->shouldNotBeCalled();
2956

3057
$this->getSUT()->register($postedArticle);
3158
}
3259

3360
private function getSUT(): RegisterUseCase
3461
{
35-
return new RegisterUseCase($this->articlePersisterP->reveal());
62+
return new RegisterUseCase(
63+
$this->articlePersisterP->reveal(),
64+
$this->articleCounterP->reveal()
65+
);
3666
}
3767
}

0 commit comments

Comments
 (0)