Skip to content

Commit b684c96

Browse files
committed
feat: create new UseCase about Region Count
1 parent 4ba1a6f commit b684c96

2 files changed

Lines changed: 97 additions & 0 deletions

File tree

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
3+
namespace App\Packages\Features\QueryUseCases\Tests\UseCase;
4+
5+
use App\Packages\Features\QueryUseCases\Dto\RegionCountDto;
6+
use App\Packages\Features\QueryUseCases\QueryServiceInterface\WorldHeritageQueryServiceInterface;
7+
use App\Packages\Features\QueryUseCases\UseCase\GetCountEachRegionUseCase;
8+
use Tests\TestCase;
9+
use Mockery;
10+
11+
class GetCountEachRegionUseCaseTest extends TestCase
12+
{
13+
protected function setUp(): void
14+
{
15+
parent::setUp();
16+
}
17+
18+
public function tearDown(): void
19+
{
20+
parent::tearDown();
21+
}
22+
23+
private function mockQueryService(): WorldHeritageQueryServiceInterface
24+
{
25+
$mock = Mockery::mock(WorldHeritageQueryServiceInterface::class);
26+
27+
$mock->shouldReceive('getEachRegionsHeritagesCount')
28+
->andReturn(self::arrayData());
29+
30+
return $mock;
31+
}
32+
33+
private static function arrayData(): array
34+
{
35+
return [
36+
'Asia' => 10,
37+
'Europe' => 5,
38+
'Africa' => 3,
39+
'South America' => 2,
40+
'North America' => 1,
41+
'Oceania' => 4,
42+
];
43+
}
44+
45+
public function test_use_case_check_type(): void
46+
{
47+
$useCase = new GetCountEachRegionUseCase(
48+
$this->mockQueryService()
49+
);
50+
51+
$result = $useCase->handle();
52+
53+
$this->assertInstanceOf(RegionCountDto::class, $result[0]);
54+
}
55+
56+
public function test_use_case_check_data(): void
57+
{
58+
$useCase = new GetCountEachRegionUseCase(
59+
$this->mockQueryService()
60+
);
61+
62+
$result = $useCase->handle();
63+
64+
$this->assertSame('Asia', $result[0]->region);
65+
$this->assertSame(10, $result[0]->count);
66+
}
67+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace App\Packages\Features\QueryUseCases\UseCase;
4+
5+
use App\Packages\Features\QueryUseCases\Dto\RegionCountDto;
6+
use App\Packages\Features\QueryUseCases\QueryServiceInterface\WorldHeritageQueryServiceInterface;
7+
8+
class GetCountEachRegionUseCase
9+
{
10+
public function __construct(
11+
private readonly WorldHeritageQueryServiceInterface $queryService
12+
) {}
13+
14+
/**
15+
* @return RegionCountDto[]
16+
*/
17+
public function handle(): array
18+
{
19+
$result = $this->queryService->getEachRegionsHeritagesCount();
20+
21+
return array_map(
22+
fn(string $region, int $count) => new RegionCountDto(
23+
region: $region,
24+
count: $count,
25+
),
26+
array_keys($result),
27+
array_values($result),
28+
);
29+
}
30+
}

0 commit comments

Comments
 (0)