test bid is created with a freight order
This commit is contained in:
parent
d6b3b4b59e
commit
773f438cc1
3 changed files with 76 additions and 5 deletions
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
namespace FreightQuote\FreightOrder\UseCases;
|
namespace FreightQuote\FreightOrder\UseCases;
|
||||||
|
|
||||||
|
use FreightQuote\Bid\Bid;
|
||||||
|
use FreightQuote\Bid\BidRepository;
|
||||||
use FreightQuote\Carrier\Carrier;
|
use FreightQuote\Carrier\Carrier;
|
||||||
use FreightQuote\Carrier\CarrierRepository;
|
use FreightQuote\Carrier\CarrierRepository;
|
||||||
use FreightQuote\Email\Email;
|
use FreightQuote\Email\Email;
|
||||||
|
|
@ -14,6 +16,7 @@ class CreateFreightOrder
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private FreightOrderRepository $freightOrderRepo,
|
private FreightOrderRepository $freightOrderRepo,
|
||||||
private CarrierRepository $carrierRepo,
|
private CarrierRepository $carrierRepo,
|
||||||
|
private BidRepository $bidRepo,
|
||||||
private Emailer $emailer,
|
private Emailer $emailer,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
|
@ -21,26 +24,51 @@ class CreateFreightOrder
|
||||||
CreateFreightOrderRequestDTO $dto,
|
CreateFreightOrderRequestDTO $dto,
|
||||||
): CreateFreightOrderResponseDTO {
|
): CreateFreightOrderResponseDTO {
|
||||||
$savedFreightOrder = $this->saveFreightOrder($dto);
|
$savedFreightOrder = $this->saveFreightOrder($dto);
|
||||||
$this->handleCarrierActions(
|
$bidsCreated = $this->handleCarrierActions(
|
||||||
$dto->carrierIds,
|
$dto->carrierIds,
|
||||||
$savedFreightOrder,
|
$savedFreightOrder,
|
||||||
);
|
);
|
||||||
|
|
||||||
return new CreateFreightOrderResponseDTO($savedFreightOrder);
|
return new CreateFreightOrderResponseDTO(
|
||||||
|
$savedFreightOrder,
|
||||||
|
$bidsCreated
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int[] $carrierIds
|
* @param int[] $carrierIds
|
||||||
|
* @return Bid[]
|
||||||
*/
|
*/
|
||||||
private function handleCarrierActions(
|
private function handleCarrierActions(
|
||||||
array $carrierIds,
|
array $carrierIds,
|
||||||
FreightOrder $freightOrder
|
FreightOrder $freightOrder,
|
||||||
): void {
|
): array {
|
||||||
|
$bidsCreated = [];
|
||||||
foreach ($carrierIds as $carrierId) {
|
foreach ($carrierIds as $carrierId) {
|
||||||
$carrier = $this->carrierRepo->find($carrierId);
|
$carrier = $this->carrierRepo->find($carrierId);
|
||||||
$this->updateCarrierOrderIds($carrier, $freightOrder->getId());
|
$freightOrderId = $freightOrder->getId();
|
||||||
|
$this->updateCarrierOrderIds($carrier, $freightOrderId);
|
||||||
$this->sendEmail($carrier->getEmail(), $freightOrder);
|
$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
|
private function sendEmail(string $emailAddress, FreightOrder $freightOrder): void
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,11 @@ use FreightQuote\FreightOrder\FreightOrder;
|
||||||
|
|
||||||
class CreateFreightOrderResponseDTO
|
class CreateFreightOrderResponseDTO
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @param Bid[] $bidsCreated
|
||||||
|
*/
|
||||||
public function __construct(
|
public function __construct(
|
||||||
public FreightOrder $freightOrder,
|
public FreightOrder $freightOrder,
|
||||||
|
public array $bidsCreated,
|
||||||
) {}
|
) {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace Tests\Unit\FreightOrder\UseCases;
|
namespace Tests\Unit\FreightOrder\UseCases;
|
||||||
|
|
||||||
|
use FreightQuote\Bid\Bid;
|
||||||
use Tests\Fakes\Email\FakeEmailer;
|
use Tests\Fakes\Email\FakeEmailer;
|
||||||
use FreightQuote\Carrier\Carrier;
|
use FreightQuote\Carrier\Carrier;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
@ -9,6 +10,7 @@ use FreightQuote\FreightOrder\UseCases\CreateFreightOrder;
|
||||||
use FreightQuote\FreightOrder\UseCases\CreateFreightOrderRequestDTO;
|
use FreightQuote\FreightOrder\UseCases\CreateFreightOrderRequestDTO;
|
||||||
use Tests\Fakes\Carrier\FakeCarrierRepository;
|
use Tests\Fakes\Carrier\FakeCarrierRepository;
|
||||||
use Tests\Fakes\FreightOrder\FakeFreightOrderRepository;
|
use Tests\Fakes\FreightOrder\FakeFreightOrderRepository;
|
||||||
|
use Tests\Fakes\Bid\FakeBidRepository;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
|
|
||||||
class CreateFreightOrderTest extends TestCase
|
class CreateFreightOrderTest extends TestCase
|
||||||
|
|
@ -16,6 +18,7 @@ class CreateFreightOrderTest extends TestCase
|
||||||
private FakeEmailer $emailer;
|
private FakeEmailer $emailer;
|
||||||
private FakeFreightOrderRepository $freightOrderRepo;
|
private FakeFreightOrderRepository $freightOrderRepo;
|
||||||
private FakeCarrierRepository $carrierRepo;
|
private FakeCarrierRepository $carrierRepo;
|
||||||
|
private FakeBidRepository $bidRepo;
|
||||||
private CreateFreightOrder $useCase;
|
private CreateFreightOrder $useCase;
|
||||||
|
|
||||||
public function setUp(): void
|
public function setUp(): void
|
||||||
|
|
@ -23,9 +26,11 @@ class CreateFreightOrderTest extends TestCase
|
||||||
$this->emailer = new FakeEmailer();
|
$this->emailer = new FakeEmailer();
|
||||||
$this->freightOrderRepo = new FakeFreightOrderRepository();
|
$this->freightOrderRepo = new FakeFreightOrderRepository();
|
||||||
$this->carrierRepo = new FakeCarrierRepository();
|
$this->carrierRepo = new FakeCarrierRepository();
|
||||||
|
$this->bidRepo = new FakeBidRepository();
|
||||||
$this->useCase = new CreateFreightOrder(
|
$this->useCase = new CreateFreightOrder(
|
||||||
$this->freightOrderRepo,
|
$this->freightOrderRepo,
|
||||||
$this->carrierRepo,
|
$this->carrierRepo,
|
||||||
|
$this->bidRepo,
|
||||||
$this->emailer,
|
$this->emailer,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -118,4 +123,38 @@ class CreateFreightOrderTest extends TestCase
|
||||||
$this->useCase->execute($dto);
|
$this->useCase->execute($dto);
|
||||||
$this->assertEquals(1, $this->emailer->getSentEmailCount());
|
$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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue