From 773f438cc127d3fd4ee21aeaae7bb9acdcb333cd Mon Sep 17 00:00:00 2001 From: Yisroel Baum Date: Mon, 17 Nov 2025 22:33:53 +0200 Subject: [PATCH] test bid is created with a freight order --- .../UseCases/CreateFreightOrder.php | 38 +++++++++++++++--- .../CreateFreightOrderResponseDTO.php | 4 ++ .../UseCases/CreateFreightOrderTest.php | 39 +++++++++++++++++++ 3 files changed, 76 insertions(+), 5 deletions(-) diff --git a/src/FreightOrder/UseCases/CreateFreightOrder.php b/src/FreightOrder/UseCases/CreateFreightOrder.php index 2cfed5f..6785ef4 100644 --- a/src/FreightOrder/UseCases/CreateFreightOrder.php +++ b/src/FreightOrder/UseCases/CreateFreightOrder.php @@ -2,6 +2,8 @@ namespace FreightQuote\FreightOrder\UseCases; +use FreightQuote\Bid\Bid; +use FreightQuote\Bid\BidRepository; use FreightQuote\Carrier\Carrier; use FreightQuote\Carrier\CarrierRepository; use FreightQuote\Email\Email; @@ -14,6 +16,7 @@ class CreateFreightOrder public function __construct( private FreightOrderRepository $freightOrderRepo, private CarrierRepository $carrierRepo, + private BidRepository $bidRepo, private Emailer $emailer, ) {} @@ -21,26 +24,51 @@ class CreateFreightOrder CreateFreightOrderRequestDTO $dto, ): CreateFreightOrderResponseDTO { $savedFreightOrder = $this->saveFreightOrder($dto); - $this->handleCarrierActions( + $bidsCreated = $this->handleCarrierActions( $dto->carrierIds, $savedFreightOrder, ); - return new CreateFreightOrderResponseDTO($savedFreightOrder); + return new CreateFreightOrderResponseDTO( + $savedFreightOrder, + $bidsCreated + ); } /** * @param int[] $carrierIds + * @return Bid[] */ private function handleCarrierActions( array $carrierIds, - FreightOrder $freightOrder - ): void { + FreightOrder $freightOrder, + ): array { + $bidsCreated = []; foreach ($carrierIds as $carrierId) { $carrier = $this->carrierRepo->find($carrierId); - $this->updateCarrierOrderIds($carrier, $freightOrder->getId()); + $freightOrderId = $freightOrder->getId(); + $this->updateCarrierOrderIds($carrier, $freightOrderId); $this->sendEmail($carrier->getEmail(), $freightOrder); + $bidsCreated[] = $this->createBid( + $freightOrderId, + $carrier->getId(), + ); } + + return $bidsCreated; + } + + private function createBid( + int $freightOrderId, + int $carrierId + ): Bid { + return $this->bidRepo->save( + new Bid( + id: null, + freightOrderId: $freightOrderId, + carrierId: $carrierId, + ) + ); } private function sendEmail(string $emailAddress, FreightOrder $freightOrder): void diff --git a/src/FreightOrder/UseCases/CreateFreightOrderResponseDTO.php b/src/FreightOrder/UseCases/CreateFreightOrderResponseDTO.php index 114b545..3979673 100644 --- a/src/FreightOrder/UseCases/CreateFreightOrderResponseDTO.php +++ b/src/FreightOrder/UseCases/CreateFreightOrderResponseDTO.php @@ -6,7 +6,11 @@ use FreightQuote\FreightOrder\FreightOrder; class CreateFreightOrderResponseDTO { + /** + * @param Bid[] $bidsCreated + */ public function __construct( public FreightOrder $freightOrder, + public array $bidsCreated, ) {} } diff --git a/tests/Unit/FreightOrder/UseCases/CreateFreightOrderTest.php b/tests/Unit/FreightOrder/UseCases/CreateFreightOrderTest.php index 740ab9f..5927c18 100644 --- a/tests/Unit/FreightOrder/UseCases/CreateFreightOrderTest.php +++ b/tests/Unit/FreightOrder/UseCases/CreateFreightOrderTest.php @@ -2,6 +2,7 @@ namespace Tests\Unit\FreightOrder\UseCases; +use FreightQuote\Bid\Bid; use Tests\Fakes\Email\FakeEmailer; use FreightQuote\Carrier\Carrier; use PHPUnit\Framework\TestCase; @@ -9,6 +10,7 @@ use FreightQuote\FreightOrder\UseCases\CreateFreightOrder; use FreightQuote\FreightOrder\UseCases\CreateFreightOrderRequestDTO; use Tests\Fakes\Carrier\FakeCarrierRepository; use Tests\Fakes\FreightOrder\FakeFreightOrderRepository; +use Tests\Fakes\Bid\FakeBidRepository; use DateTime; class CreateFreightOrderTest extends TestCase @@ -16,6 +18,7 @@ class CreateFreightOrderTest extends TestCase private FakeEmailer $emailer; private FakeFreightOrderRepository $freightOrderRepo; private FakeCarrierRepository $carrierRepo; + private FakeBidRepository $bidRepo; private CreateFreightOrder $useCase; public function setUp(): void @@ -23,9 +26,11 @@ class CreateFreightOrderTest extends TestCase $this->emailer = new FakeEmailer(); $this->freightOrderRepo = new FakeFreightOrderRepository(); $this->carrierRepo = new FakeCarrierRepository(); + $this->bidRepo = new FakeBidRepository(); $this->useCase = new CreateFreightOrder( $this->freightOrderRepo, $this->carrierRepo, + $this->bidRepo, $this->emailer, ); } @@ -118,4 +123,38 @@ class CreateFreightOrderTest extends TestCase $this->useCase->execute($dto); $this->assertEquals(1, $this->emailer->getSentEmailCount()); } + + public function test_bid_is_created(): void + { + $carrierId = 0; + $this->carrierRepo->save(new Carrier( + id: $carrierId, + email: 'test@email.com', + companyName: 'company name', + contactPerson: 'person', + phoneNumber: '123456798', + notes: 'some notes', + loadProfile: 'LTL/FTL', + countriesServing: ['USA'], + freightOrderIds: [], + )); + $dto = new CreateFreightOrderRequestDTO( + shipFrom: 'ny', + shipTo: 'nj', + pickupDate: new DateTime('+5 days'), + deliveryDeadline: new DateTime('+10 days'), + loadDetails: 'some details', + notes: 'some notes', + fileAttachments: ['path/to/file', 'another/path/file'], + carrierIds: [$carrierId], + ); + $response = $this->useCase->execute($dto); + $bid = $response->bidsCreated[0]; + $this->assertInstanceOf(Bid::class, $bid); + $this->assertEquals( + $response->freightOrder->getId(), + $bid->getFreightOrderId() + ); + $this->assertEquals($carrierId, $bid->getCarrierId()); + } }