get bid for carrier returns a response object

This commit is contained in:
Yisroel Baum 2025-11-22 22:30:50 +02:00
parent d9581cf991
commit e4c535201b
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
3 changed files with 36 additions and 10 deletions

View file

@ -2,7 +2,6 @@
namespace FreightQuote\Bid\UseCases; namespace FreightQuote\Bid\UseCases;
use FreightQuote\Bid\Bid;
use FreightQuote\Bid\BidRepository; use FreightQuote\Bid\BidRepository;
use InvalidArgumentException; use InvalidArgumentException;
@ -15,19 +14,26 @@ class GetBidForCarrier
/** /**
* @throws InvalidArgumentException * @throws InvalidArgumentException
*/ */
public function execute(GetBidForCarrierRequest $dto): ?Bid public function execute(
{ GetBidForCarrierRequest $dto,
): GetBidForCarrierResponse {
$bid = $this->bidRepo->find($dto->id); $bid = $this->bidRepo->find($dto->id);
if ($bid === null) { if ($bid === null) {
throw new InvalidArgumentException('Bid not found!'); throw new InvalidArgumentException('Bid not found!');
} }
if ($bid->isClosed() === true) { if ($bid->isClosed() === true) {
return null; return new GetBidForCarrierResponse(
isClosed: true,
bid: null,
);
} }
if ($bid->getWasOpened() === false) { if ($bid->getWasOpened() === false) {
$bid->setWasOpened(true); $bid->setWasOpened(true);
$this->bidRepo->save($bid); $this->bidRepo->save($bid);
} }
return $bid; return new GetBidForCarrierResponse(
isClosed: false,
bid: $bid,
);
} }
} }

View file

@ -0,0 +1,13 @@
<?php
namespace FreightQuote\Bid\UseCases;
use FreightQuote\Bid\Bid;
class GetBidForCarrierResponse
{
public function __construct(
public bool $isClosed,
public ?Bid $bid,
) {}
}

View file

@ -5,6 +5,7 @@ namespace Tests\Unit\Bid\UseCases;
use FreightQuote\Bid\Bid; use FreightQuote\Bid\Bid;
use FreightQuote\Bid\UseCases\GetBidForCarrier; use FreightQuote\Bid\UseCases\GetBidForCarrier;
use FreightQuote\Bid\UseCases\GetBidForCarrierRequest; use FreightQuote\Bid\UseCases\GetBidForCarrierRequest;
use FreightQuote\Bid\UseCases\GetBidForCarrierResponse;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use InvalidArgumentException; use InvalidArgumentException;
use Tests\Fakes\Bid\FakeBidRepository; use Tests\Fakes\Bid\FakeBidRepository;
@ -41,13 +42,13 @@ class GetBidForCarrierTest extends TestCase
null, null,
null, null,
)); ));
$foundBid = $this->useCase->execute( $response = $this->useCase->execute(
new GetBidForCarrierRequest($bidId) new GetBidForCarrierRequest($bidId)
); );
$this->assertEquals(true, $foundBid->getWasOpened()); $this->assertEquals(true, $response->bid->getWasOpened());
} }
public function test_getting_closed_bid_returns_null(): void public function test_getting_closed_bid_returns_response_with_null_bid(): void
{ {
$this->bidRepo->save(new Bid( $this->bidRepo->save(new Bid(
0, 0,
@ -59,8 +60,14 @@ class GetBidForCarrierTest extends TestCase
null, null,
null, null,
)); ));
$this->assertNull($this->useCase->execute( $response = $this->useCase->execute(
new GetBidForCarrierRequest(0), new GetBidForCarrierRequest(0),
)); );
$this->assertInstanceOf(
GetBidForCarrierResponse::class,
$response
);
$this->assertNull($response->bid);
$this->assertTrue($response->isClosed);
} }
} }