refactor: ♻️ make sort required in campaign request list
This commit is contained in:
parent
5a59a92546
commit
0b7da69567
3 changed files with 26 additions and 22 deletions
|
|
@ -13,7 +13,7 @@ final readonly class Input implements UseCaseInput
|
|||
{
|
||||
public function __construct(
|
||||
public Pagination $pagination,
|
||||
public ?CampaignRequestSortCriteria $sort = null,
|
||||
public CampaignRequestSortCriteria $sort,
|
||||
public ?CampaignRequestFilters $filters = null,
|
||||
) {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ interface CampaignRequestRepository extends Repository
|
|||
*/
|
||||
public function findAll(
|
||||
Pagination $pagination,
|
||||
?CampaignRequestSortCriteria $sortCriteria = null,
|
||||
CampaignRequestSortCriteria $sortCriteria,
|
||||
?CampaignRequestFilters $filters = null,
|
||||
): Paginated;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,11 +71,18 @@ describe('list campaigns request use case', function (): void {
|
|||
new PrintRules(maxPerCustomer: 3),
|
||||
new GS1('01234567890128', BarcodeFormat::EAN13)
|
||||
);
|
||||
|
||||
$this->pagination = Pagination::firstPage();
|
||||
|
||||
$this->sort = new CampaignRequestSortCriteria(
|
||||
clauses: [
|
||||
new CampaignRequestSortClause(field: CampaignRequestSortField::CreatedAt, direction: \SortDirection::Descending),
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
it('maps repository campaigns request to list items, preserving pagination and sort', function (): void {
|
||||
// GIVEN
|
||||
$pagination = Pagination::firstPage();
|
||||
$campaignRequest1 = CampaignRequest::hydrate(
|
||||
CampaignRequestId::generate(),
|
||||
new BrandCode('AAA01'),
|
||||
|
|
@ -94,7 +101,7 @@ describe('list campaigns request use case', function (): void {
|
|||
$this->couponB,
|
||||
CampaignRequestStatus::CREATED,
|
||||
);
|
||||
$paginated = new Paginated($pagination, [$campaignRequest1, $campaignRequest2], 2);
|
||||
$paginated = new Paginated($this->pagination, [$campaignRequest1, $campaignRequest2], 2);
|
||||
|
||||
$sort = new CampaignRequestSortCriteria(
|
||||
clauses: [
|
||||
|
|
@ -103,12 +110,12 @@ describe('list campaigns request use case', function (): void {
|
|||
]
|
||||
);
|
||||
$filters = new CampaignRequestFilters($campaignRequest2->brandCode, CampaignRequestStatus::CREATED);
|
||||
$input = new Input(pagination: $pagination, sort: $sort, filters: $filters);
|
||||
$input = new Input(pagination: $this->pagination, sort: $sort, filters: $filters);
|
||||
|
||||
$repository = \Mockery::mock(CampaignRequestRepository::class);
|
||||
$repository->shouldReceive('findAll')
|
||||
->once()
|
||||
->with($pagination, CampaignRequestSortCriteria::class, CampaignRequestFilters::class)
|
||||
->with($this->pagination, CampaignRequestSortCriteria::class, CampaignRequestFilters::class)
|
||||
->andReturn($paginated);
|
||||
|
||||
$useCase = new ListCampaignsRequest($repository);
|
||||
|
|
@ -128,12 +135,11 @@ describe('list campaigns request use case', function (): void {
|
|||
->and($items[0]->campaignType)->toBe($campaignRequest1->campaignType)
|
||||
->and($items[0]->status)->toBe($campaignRequest1->status)
|
||||
->and($result->campaignsRequest->getTotal())->toBe(2)
|
||||
->and($result->campaignsRequest->getPagination())->toBe($pagination);
|
||||
->and($result->campaignsRequest->getPagination())->toBe($this->pagination);
|
||||
});
|
||||
|
||||
it('lists campaigns request with filters but without sort', function (): void {
|
||||
it('lists campaigns request with filters', function (): void {
|
||||
// GIVEN
|
||||
$pagination = Pagination::firstPage();
|
||||
$campaignRequest = CampaignRequest::hydrate(
|
||||
CampaignRequestId::generate(),
|
||||
new BrandCode('AAA01'),
|
||||
|
|
@ -143,15 +149,15 @@ describe('list campaigns request use case', function (): void {
|
|||
$this->couponA,
|
||||
CampaignRequestStatus::CREATED,
|
||||
);
|
||||
$paginated = new Paginated($pagination, [$campaignRequest], 1);
|
||||
$paginated = new Paginated($this->pagination, [$campaignRequest], 1);
|
||||
|
||||
$filters = new CampaignRequestFilters($campaignRequest->brandCode, CampaignRequestStatus::CREATED);
|
||||
$input = new Input(pagination: $pagination, filters: $filters);
|
||||
$input = new Input(pagination: $this->pagination, sort: $this->sort, filters: $filters);
|
||||
|
||||
$repository = \Mockery::mock(CampaignRequestRepository::class);
|
||||
$repository->shouldReceive('findAll')
|
||||
->once()
|
||||
->with($pagination, null, $filters)
|
||||
->with($this->pagination, $this->sort, $filters)
|
||||
->andReturn($paginated);
|
||||
|
||||
$useCase = new ListCampaignsRequest($repository);
|
||||
|
|
@ -167,12 +173,11 @@ describe('list campaigns request use case', function (): void {
|
|||
->and($items[0]->name)->toBe($campaignRequest->name)
|
||||
->and($items[0]->status)->toBe($campaignRequest->status)
|
||||
->and($result->campaignsRequest->getTotal())->toBe(1)
|
||||
->and($result->campaignsRequest->getPagination())->toBe($pagination);
|
||||
->and($result->campaignsRequest->getPagination())->toBe($this->pagination);
|
||||
});
|
||||
|
||||
it('lists campaigns request with sort but without filters', function (): void {
|
||||
// GIVEN
|
||||
$pagination = Pagination::firstPage();
|
||||
$campaignRequest1 = CampaignRequest::hydrate(
|
||||
CampaignRequestId::generate(),
|
||||
new BrandCode('AAA01'),
|
||||
|
|
@ -191,19 +196,19 @@ describe('list campaigns request use case', function (): void {
|
|||
$this->couponB,
|
||||
CampaignRequestStatus::CREATED,
|
||||
);
|
||||
$paginated = new Paginated($pagination, [$campaignRequest2, $campaignRequest1], 2);
|
||||
$paginated = new Paginated($this->pagination, [$campaignRequest2, $campaignRequest1], 2);
|
||||
|
||||
$sort = new CampaignRequestSortCriteria(
|
||||
clauses: [
|
||||
new CampaignRequestSortClause(field: CampaignRequestSortField::BrandCode, direction: \SortDirection::Descending),
|
||||
]
|
||||
);
|
||||
$input = new Input(pagination: $pagination, sort: $sort);
|
||||
$input = new Input(pagination: $this->pagination, sort: $sort);
|
||||
|
||||
$repository = \Mockery::mock(CampaignRequestRepository::class);
|
||||
$repository->shouldReceive('findAll')
|
||||
->once()
|
||||
->with($pagination, $sort, null)
|
||||
->with($this->pagination, $sort, null)
|
||||
->andReturn($paginated);
|
||||
|
||||
$useCase = new ListCampaignsRequest($repository);
|
||||
|
|
@ -217,19 +222,18 @@ describe('list campaigns request use case', function (): void {
|
|||
->and($items[0]->brandCode)->toBe($campaignRequest2->brandCode)
|
||||
->and($items[1]->brandCode)->toBe($campaignRequest1->brandCode)
|
||||
->and($result->campaignsRequest->getTotal())->toBe(2)
|
||||
->and($result->campaignsRequest->getPagination())->toBe($pagination);
|
||||
->and($result->campaignsRequest->getPagination())->toBe($this->pagination);
|
||||
});
|
||||
|
||||
it('returns an empty list without error when there are no campaigns request', function (): void {
|
||||
// GIVEN
|
||||
$pagination = Pagination::firstPage();
|
||||
$paginated = new Paginated($pagination, [], 0);
|
||||
$input = new Input(pagination: $pagination);
|
||||
$paginated = new Paginated($this->pagination, [], 0);
|
||||
$input = new Input(pagination: $this->pagination, sort: $this->sort);
|
||||
|
||||
$repository = \Mockery::mock(CampaignRequestRepository::class);
|
||||
$repository->shouldReceive('findAll')
|
||||
->once()
|
||||
->with($pagination, null, null)
|
||||
->with($this->pagination, $this->sort, null)
|
||||
->andReturn($paginated);
|
||||
|
||||
$useCase = new ListCampaignsRequest($repository);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue