get all bids of freight order

This commit is contained in:
Yisroel Baum 2025-12-03 21:58:26 +02:00
parent 14e77d2885
commit fa156fd155
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
5 changed files with 80 additions and 0 deletions

View file

@ -6,4 +6,9 @@ interface BidRepository
{
public function save(Bid $bid): Bid;
public function find(string $id): ?Bid;
/**
* @return Bid[]
*/
public function findByFreightOrderId(int $freightOrderId): array;
}

View file

@ -0,0 +1,17 @@
<?php
namespace FreightQuote\Bid\UseCases;
use FreightQuote\Bid\BidRepository;
class GetBidsOfFreightOrder
{
public function __construct(
private BidRepository $bidRepo,
) {}
public function execute(GetBidsOfFreightOrderRequest $dto): array
{
return $this->bidRepo->findByFreightOrderId($dto->freightOrderId);
}
}

View file

@ -0,0 +1,10 @@
<?php
namespace FreightQuote\Bid\UseCases;
class GetBidsOfFreightOrderRequest
{
public function __construct(
public int $freightOrderId,
) {}
}

View file

@ -61,4 +61,13 @@ class FakeBidRepository implements BidRepository
}
return $id;
}
public function findByFreightOrderId(int $freightOrderId): array
{
return array_filter(
$this->existingBids,
function (Bid $bid) use ($freightOrderId){
return $bid->getFreightOrderId() === $freightOrderId;
});
}
}

View file

@ -0,0 +1,39 @@
<?php
namespace Tests\Unit\Bid\UseCases;
use FreightQuote\Bid\Bid;
use FreightQuote\Bid\UseCases\GetBidsOfFreightOrderRequest;
use FreightQuote\Bid\UseCases\GetBidsOfFreightOrder;
use PHPUnit\Framework\TestCase;
use Tests\Fakes\Bid\FakeBidRepository;
class GetBidsOfFreightOrderTest extends TestCase
{
private FakeBidRepository $bidRepo;
private GetBidsOfFreightOrder $useCase;
public function setUp(): void
{
$this->bidRepo = new FakeBidRepository();
$this->useCase = new GetBidsOfFreightOrder($this->bidRepo);
}
public function test_get_one_bid(): void
{
$this->bidRepo->save(new Bid(0, 0, 0, false, false, 0, '', []));
$dto = new GetBidsOfFreightOrderRequest(freightOrderId: 0);
$bids = $this->useCase->execute($dto);
$this->assertInstanceOf(Bid::class, $bids[0]);
}
public function test_get_two_bids(): void
{
$this->bidRepo->save(new Bid(0, 0, 0, false, false, 0, '', []));
$this->bidRepo->save(new Bid(1, 0, 0, false, false, 0, '', []));
$dto = new GetBidsOfFreightOrderRequest(freightOrderId: 0);
$bids = $this->useCase->execute($dto);
$this->assertInstanceOf(Bid::class, $bids[1]);
}
}