From 20f7f32bbd36e81420208719ee32353cc5c40da1 Mon Sep 17 00:00:00 2001 From: Noah Lancien Date: Tue, 27 Oct 2026 16:15:31 +0100 Subject: [PATCH] fix: US2.4 - Review feedbacks - Removed pagination from find output --- .../UseCases/Campaign/Find/FindCampaign.php | 15 +-------- .../UseCases/Campaign/Find/Input.php | 2 -- .../Campaign/Find/Outputs/CampaignFound.php | 6 ++-- .../Campaign/Find/FindCampaignTest.php | 33 +++---------------- 4 files changed, 8 insertions(+), 48 deletions(-) diff --git a/src/Application/UseCases/Campaign/Find/FindCampaign.php b/src/Application/UseCases/Campaign/Find/FindCampaign.php index cbd6297..d09cd86 100644 --- a/src/Application/UseCases/Campaign/Find/FindCampaign.php +++ b/src/Application/UseCases/Campaign/Find/FindCampaign.php @@ -11,7 +11,6 @@ use Domain\Ports\Repositories\CampaignRepository; use Shared\DDD\UseCases\Input as BaseInput; use Shared\DDD\UseCases\Output; use Shared\DDD\UseCases\UseCase; -use Shared\ValueObjects\Pagination\Paginated; use Webmozart\Assert\Assert; /** @implements UseCase<\Application\UseCases\Campaign\Find\Input, \Shared\DDD\UseCases\Output> */ @@ -33,25 +32,13 @@ final readonly class FindCampaign implements UseCase return new CampaignNotFound(); } - $allCampaignCoupons = $campaign->coupons->value; - - $couponsToDisplay = array_slice( - $allCampaignCoupons, - $input->couponsPagination->from(), - $input->couponsPagination->pageSize(), - ); - return new CampaignFound( name: $campaign->name, code: $campaign->code, brandCode: $campaign->brandCode, publication: $campaign->publication, printAllAtOnce: $campaign->printAllAtOnce, - coupons: new Paginated( - pagination: $input->couponsPagination, - items: $couponsToDisplay, - total: count($allCampaignCoupons), - ), + coupons: $campaign->coupons, createdAt: $campaign->createdAt(), updatedAt: $campaign->updatedAt(), ); diff --git a/src/Application/UseCases/Campaign/Find/Input.php b/src/Application/UseCases/Campaign/Find/Input.php index b3f30b9..85344e2 100644 --- a/src/Application/UseCases/Campaign/Find/Input.php +++ b/src/Application/UseCases/Campaign/Find/Input.php @@ -6,13 +6,11 @@ namespace Application\UseCases\Campaign\Find; use Domain\Models\ValueObjects\Campaign\CampaignCode; use Shared\DDD\UseCases\Input as UseCaseInput; -use Shared\ValueObjects\Pagination\Pagination; final readonly class Input implements UseCaseInput { public function __construct( public CampaignCode $code, - public Pagination $couponsPagination, ) { } } diff --git a/src/Application/UseCases/Campaign/Find/Outputs/CampaignFound.php b/src/Application/UseCases/Campaign/Find/Outputs/CampaignFound.php index 6db3b19..7856d93 100644 --- a/src/Application/UseCases/Campaign/Find/Outputs/CampaignFound.php +++ b/src/Application/UseCases/Campaign/Find/Outputs/CampaignFound.php @@ -6,20 +6,18 @@ namespace Application\UseCases\Campaign\Find\Outputs; use Domain\Models\ValueObjects\Brand\BrandCode; use Domain\Models\ValueObjects\Campaign\CampaignCode; -use Domain\Models\ValueObjects\Campaign\CampaignCoupon; +use Domain\Models\ValueObjects\Campaign\CampaignCouponArray; use Domain\Models\ValueObjects\Campaign\CampaignName; -use Shared\ValueObjects\Pagination\Paginated; final readonly class CampaignFound implements Output { - /** @param Paginated $coupons */ public function __construct( public CampaignName $name, public CampaignCode $code, public BrandCode $brandCode, public bool $publication, public bool $printAllAtOnce, - public Paginated $coupons, + public CampaignCouponArray $coupons, public \DateTimeInterface $createdAt, public ?\DateTimeInterface $updatedAt, ) { diff --git a/tests/Unit/Application/UseCases/Campaign/Find/FindCampaignTest.php b/tests/Unit/Application/UseCases/Campaign/Find/FindCampaignTest.php index 15e03ab..354707d 100644 --- a/tests/Unit/Application/UseCases/Campaign/Find/FindCampaignTest.php +++ b/tests/Unit/Application/UseCases/Campaign/Find/FindCampaignTest.php @@ -8,13 +8,10 @@ use Application\UseCases\Campaign\Find\FindCampaign; use Application\UseCases\Campaign\Find\Input; use Application\UseCases\Campaign\Find\Outputs\CampaignFound; use Application\UseCases\Campaign\Find\Outputs\CampaignNotFound; -use Application\UseCases\Campaign\Find\Outputs\Output; use Domain\Models\Entities\Campaign; use Domain\Models\ValueObjects\Campaign\CampaignCode; use Domain\Ports\Repositories\CampaignRepository; -use Shared\DDD\UseCases\Input as BaseInput; use Domain\Models\ValueObjects\PrintRules; -use Shared\ValueObjects\Pagination\Pagination; use Tests\Fixtures\Campaign\CampaignFactory; covers(FindCampaign::class, Input::class, CampaignFound::class, CampaignNotFound::class); @@ -31,14 +28,13 @@ describe('find campaign use case', function (): void { it('finds a campaign by its code with paginated coupons', function () use ($makeCampaign): void { // GIVEN $campaign = $makeCampaign(); - $pagination = Pagination::firstPage(); $repository = \Mockery::mock(CampaignRepository::class); $repository->shouldReceive('findByCode')->once()->with($campaign->code)->andReturn($campaign); $useCase = new FindCampaign($repository); // WHEN - $result = $useCase->execute(new Input(code: $campaign->code, couponsPagination: $pagination)); + $result = $useCase->execute(new Input(code: $campaign->code)); // THEN expect($result)->toBeInstanceOf(CampaignFound::class) @@ -47,16 +43,14 @@ describe('find campaign use case', function (): void { ->and($result->brandCode)->toBe($campaign->brandCode) ->and($result->publication)->toBe($campaign->publication) ->and($result->printAllAtOnce)->toBe($campaign->printAllAtOnce) + ->and($result->coupons)->toBe($campaign->coupons) + ->and($result->coupons->value[0]->couponCode->value)->toBe('COU01') ->and($result->createdAt)->toEqual($campaign->createdAt()) - ->and($result->updatedAt)->toEqual($campaign->updatedAt()) - ->and($result->coupons->getItems())->toEqual($campaign->coupons->value) - ->and($result->coupons->getTotal())->toBe(1) - ->and($result->coupons->getPagination()->equals($pagination))->toBeTrue(); + ->and($result->updatedAt)->toEqual($campaign->updatedAt()); }); it('returns CampaignNotFound when the code is not found', function (): void { // GIVEN - $pagination = Pagination::firstPage(); $code = CampaignCode::generate(); $repository = \Mockery::mock(CampaignRepository::class); @@ -65,26 +59,9 @@ describe('find campaign use case', function (): void { $useCase = new FindCampaign($repository); // WHEN - $result = $useCase->execute(new Input(code: $code, couponsPagination: $pagination)); + $result = $useCase->execute(new Input(code: $code)); // WHEN / THEN expect($result)->toBeInstanceOf(CampaignNotFound::class); }); }); - -describe('find campaign use case assertions', function (): void { - it('rejects an input of the wrong type', function (): void { - // GIVEN - $repository = \Mockery::mock(CampaignRepository::class); - $useCase = new FindCampaign($repository); - $invalidInput = new class () implements BaseInput - { - }; - - // WHEN - $action = fn (): Output => $useCase->execute($invalidInput); - - // THEN - expect($action)->toThrow(\InvalidArgumentException::class); - }); -});