fix: US2.4 - Review feedbacks - Removed pagination from find output
This commit is contained in:
parent
f50cd625b0
commit
20f7f32bbd
4 changed files with 8 additions and 48 deletions
|
|
@ -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(),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
) {
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<CampaignCoupon> $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,
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue